基于Flask的模型部署
基于Flask的模型部署
一、背景
Flask:一个使用Python编写的轻量级Web应用程序框架;
首先需要明确模型部署的两种方式:在线和离线;
在线:就是将模型部署到类似于服务器上,调用需要通过网络传输数据,再将结果返回;
离线:就是将模型直接部署在终端设备上,不需要联网,数据传输上比较快;
二、Flask简单部署分类模型
通过一个实际的分类案例,来说明整个实现的流程;
首先Flask分为服务端和设备端,服务端就是接受数据并处理,应用端只负责发送数据和展示结果;
实现步骤:
------服务端-------
1、初始化Flask app
可以理解为初始化一个服务器对象;
app = flask.Flask(__name__)
2、加载模型
def load_model():global modelmodel = resnet50(pretrained=True) # 这里模型可以替换成自己的模型model.eval()if use_gpu:model.cuda()
这里是所有模型通用的,如果是一些模型需要将模型结构的代码和模型文件都准备好;
3、数据预处理
推理部分的数据处理应该与模型训练前的处理保持一致,否则可能导致结果出现较大偏差;
def prepare_image(image, target_size):if image.mode != 'RGB':image = image.convert("RGB") # 转换图像为RGB类型# 缩放图像image = T.Resize(target_size)(image)image = T.ToTensor()(image)# 归一化image = T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])(image)# 这里表示可以配置多个图像作为一个batchimage = image[None]if use_gpu:image = image.cuda() # 使用GPUreturn Variable(image, volatile=True) #不需要求导
上述的数据处理是最基本并且简单的数据处理,在很多任务中的数据预处理会复杂很多;
4、开启服务
# 注意这里的predict可以自行修改,但需要和后面的端口后缀保持一致
@app.route("/predict", methods=["POST"]) # 这里是python的装饰器
def predict():# 初始化一个返回列表,并且用一个变量表示是否调用成功data = {"success": False}# 确保传入数据为图像,并且将图像数据经过数据处理if flask.request.method == 'POST':if flask.request.files.get("image"): # 这里用于判断接受的对象# 读取图像数据image = flask.request.files["image"].read() # 读取实际路径image = Image.open(io.BytesIO(image)) #二进制数据# 数据预处理image = prepare_image(image, target_size=(224, 224))# 得到模型输出的结果,取出前K个结果preds = F.softmax(model(image), dim=1)results = torch.topk(preds.cpu().data, k=3, dim=1)results = (results[0].cpu().numpy(), results[1].cpu().numpy())# 结果保存到要传回的列表中data['predictions'] = list()# 根据标签值找到对应对象的实际类别for prob, label in zip(results[0][0], results[1][0]):label_name = idx2label[label]r = {"label": label_name, "probability": float(prob)}data['predictions'].append(r)# 设置返回列表调用成功data["success"] = True# 将数据转为json并返回return flask.jsonify(data)
这里是服务的具体执行程序,也就是接收数据和处理数据,并将结果返回;
这里可以做UI的可视化界面,本次只是演示效果就不进行设计;
执行该程序后,出现一个访问地址和端口号,如下图所示:
这里是部署到本地的服务器上,在实际工程中,一般是部署到一台公共服务器上,将服务开放为接口供但部分应用使用;
------应用端-------
1、初始化服务接口
PyTorch_REST_API_URL = 'http://127.0.0.1:5000/predict'
2、请求服务并展示结果
def predict_result(image_path):# 读取图像数据,保存到数组中image = open(image_path, 'rb').read()payload = {'image': image}# 请求服务r = requests.post(PyTorch_REST_API_URL, files=payload).json()# 确保服务返回成功if r['success']:# 遍历结果,并打印出来for (i, result) in enumerate(r['predictions']):print('{}. {}: {:.4f}'.format(i + 1, result['label'],result['probability']))# 如果服务请求失败,返回失败else:print('Request failed')
上面就是传入一张狗狗图像后打印的结果,可以看出服务能够正常运行;
总结:
虽然是一个简单的分类项目,但整体部署的流程以及一些代码的模板是不变的,换成别的任务可能会复杂一些,主要还是前后处理相对复杂一些,并且做UI界面的话也会相对复杂一些;
相关文章:
![](https://img-blog.csdnimg.cn/8acf8b2128394e5db8ae45734eaac1fe.png)
基于Flask的模型部署
基于Flask的模型部署 一、背景 Flask:一个使用Python编写的轻量级Web应用程序框架; 首先需要明确模型部署的两种方式:在线和离线; 在线:就是将模型部署到类似于服务器上,调用需要通过网络传输数据&…...
![](https://img-blog.csdnimg.cn/img_convert/3e6e910b76d3c9c743d6a51fd898053a.png)
【资料分享】全志科技T507-H开发板规格书
1 评估板简介 创龙科技TLT507-EVM是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53国产工业评估板,主频高达1.416GHz,由核心板和评估底板组成。核心板CPU、ROM、RAM、电源、晶振等所有器件均采用国产工业级方案,国产化率100%。同时,评估底板大部分元器件亦采用国产…...
![](https://img-blog.csdnimg.cn/e934cf293fa44662a1118b7712a22110.png)
2023华数杯数学建模C题思路 - 母亲身心健康对婴儿成长的影响
# 1 赛题 C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护, 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况,如抑郁、焦虑、 压力等,可能会对婴儿的认知、情…...
![](https://img-blog.csdnimg.cn/6be5dfc3efdd46a4b2345ae01b39066e.png)
【Kaggle】Identify Contrails to Reduce Global Warming 比赛数据集的可视化(含源代码)
一、数据简单解读 卫星图像最初来自: https://www.goes-r.gov/spacesegment/abi.html高级基线成像仪是GOES-R系列中用于对地球天气、海洋和环境进行成像的主要仪器。ABI用16个不同的光谱波段观察地球(上一代GOES只有<>个),…...
![](https://www.ngui.cc/images/no-images.jpg)
Spring(12) BeanFactory 和 ApplicationContext 区别
目录 一、BeanFactory 和 ApplicationContext 区别?二、既然 Spring Boot 中使用的是 ApplicationContext 进行应用程序的启动和管理,那么 Spring Boot 会用到 BeanFactory 吗? 一、BeanFactory 和 ApplicationContext 区别? Bea…...
![](https://img-blog.csdnimg.cn/c25d74c781a7482c9a2375844d92e094.png)
git的日常使用
加入忽略列表:在.gitignore中加入忽略的文件,build/ 表示build文件夹下,*.jar 表示以jar结尾的,用换行符隔开将另一个分支合并到当前分支:git merge xxx冲突出现,可以看看这里:详解Git合并冲突—…...
![](https://img-blog.csdnimg.cn/d23a99e755da4b61a25aeb81f8f6fe10.png)
【Spring Boot】请求参数传json对象,后端采用(pojo)CRUD案例(102)
请求参数传json对象,后端采用(pojo)接收的前提条件: 1.pom.xml文件加入坐标依赖:jackson-databind 2.Spring Boot 的启动类加注解:EnableWebMvc 3.Spring Boot 的Controller接受参数采用:Reque…...
![](https://img-blog.csdnimg.cn/13ed975fb57248efb1e2ea75654dceae.png)
layui之layer弹出层的icon数字及效果展示
layer的icon样式 icon如果在信息提示弹出层值(type为0)可以传入0-6,icon与图标对应关系如下: 如果是加载层(type为3)可以传入0-2,icon与图标对应关系如下:...
![](https://img-blog.csdnimg.cn/9e6d0cd3e50c4670a3a8c09a68173c56.png)
Python selenium对应的浏览器chromedriver版本不一致
1、chrome和chromedriver版本不一致导致的,我们只需要升级下chromedriver的版本即可 浏览器版本查看 //打开google浏览器直接访问,查看浏览器版本 chrome://version/ 查看chromedriver的版本 //查看驱动版本 chromedriver chromedriver下载 可看到浏…...
![](https://img-blog.csdnimg.cn/2b518f6a22f24aecab1cca6da5c95d91.png)
Redis的安装方法与基本操作
目录 前言 一、REDIS概述 二、REDIS安装 1、编译安装 2.yum安装 三、Redis的目录结构 四、基础命令解析 五、在一台服务器上启动多个redis 六、数据库的基本操作 (一)登录数据库 (二)基础命令 七、Redis持久化 (一&…...
![](https://img-blog.csdnimg.cn/4af311ad70854cb8b38750dcbeb65629.png)
选读SQL经典实例笔记20_Oracle语法示例
1. 计算一年有多少天 1.1. sql select Days in 2005: ||to_char(add_months(trunc(sysdate,y),12)-1,DDD)as reportfrom dualunion allselect Days in 2004: ||to_char(add_months(trunc(to_date(01-SEP-2004),y),12)-1,DDD)from dual REPORT ----------------- Days in 200…...
![](https://www.ngui.cc/images/no-images.jpg)
JAVA细节/小技巧
一、 Callable类可以实现返回结果的多线程。实现Callable类,然后实例化一个对象传递给FutureTask,然后把FutureTask对象传递给Thread对象,执行start即可开始多线程。FutureTask对象执行get函数可以获得Callable类中call函数的返回值…...
![](https://img-blog.csdnimg.cn/img_convert/b55abb1e474e032a801f5079c02d6c14.png)
jmeter如何压测和存储
一、存储过程准备: 1、建立一个空表: 1 CREATE TABLE test_data ( id NUMBER, name VARCHAR2(50), age NUMBER ); 2、建立一个存储过程: 1 2 3 4 5 6 7 8 9 CREATE OR REPLACE PROCEDURE insert_test_data (n IN NUMBER) AS BEGIN --E…...
![](https://www.ngui.cc/images/no-images.jpg)
一个月学通Python(三十三):Python并发编程在爬虫中的应用
专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对…...
![](https://img-blog.csdnimg.cn/1162b148dd1a4a36811e5a1bfa955bd6.png)
HCIP——STP
STP 一、STP概述二、二层环路带来的问题1、广播风暴问题2、MAC地址漂移问题3、多帧复制 三、802.1D生成树STP的BPDU1、配置BPDU2、RPC3、COST4、配置BPDU的工作过程5、TCN BPDU6、TCN BPDU的工作原理 四、STP的角色五、STP角色选举六、STP的接口状态七、接口状态的迁移八、STP的…...
![](https://img-blog.csdnimg.cn/bd78c648e2d3442587e8924913be1431.png)
【数据结构】“单链表”的练习题
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
![](https://img-blog.csdnimg.cn/896fb422c4a045fabda5b6093387269f.png)
项目实战 — 消息队列(5){统一硬盘操作}
前面已经使用数据库管理了交换机、绑定、队列,然后又使用了数据文件管理了消息。 那么,这里就创建一个类,讲之前的两个部分整合起来,对上层提供统一的一套接口,表示硬盘上存储的所有的类的信息。 /* * 用这个类来管理…...
![](https://img-blog.csdnimg.cn/13b9528ef63642f99c6eb70643315ad1.png)
【2.2】Java微服务:Hystrix的详解与使用
目录 分布式系统面临问题 Hystrix概念 Hystrix作用 降级 什么是降级 order服务导入Hystrix依赖(简单判断原则:谁调用远程谁加) 启动类添加注解 业务方法添加注解(冒号里填回调方法名,回调方法返回兜底数据&…...
![](https://www.ngui.cc/images/no-images.jpg)
【PYTHON】WebSocket服务端与客户端通信实现
目录 1 简介 2 WebSocket优点 3 前后端交互的方式 4 心跳机制和重连机制 5 后端代码 6 测试...
![](https://www.ngui.cc/images/no-images.jpg)
Runloop 的五种mode
1.runloop是一个事件驱动的循环,收到事件就去处理,没有事件就进入睡眠. 2.应用一启动主线程被创建后,主线程对应的runloop也被创建,runloop也保证了程序能够一直运行.之后创建的子线程默认是没有runloop的,只有当调用[NSRunLoop currentRunLoop]去获取的时候才被创建. 3.runloo…...
![](https://www.ngui.cc/images/no-images.jpg)
C++头文件使用精要
一、头文件包含顺序 根据《Google C 编程风格指南》,对于Foo.cpp,顺序推荐为: Foo.hC标准库C标准库其它库的头文件本工程的头文件 另外,在包含头文件时应该加上头文件所在工程的文件夹名,可区分重名文件。即假如你有…...
![](https://www.ngui.cc/images/no-images.jpg)
Flink之SideOutput(数据分流)
Flink在早期版本有一个split算子用来做数据分流使用的,但是在flink-1.12开始这个API就已经被删除了,在1.12版本以后我们是通过process算子来做数据分流的,这里就介绍一下如何使用prodess进行数据分流. 代码 import org.apache.flink.api.common.typeinfo.TypeInformation; im…...
![](https://img-blog.csdnimg.cn/b0d31364b7e740d9a61a1ad3866084c2.png)
Android Studio新版本logcat过滤说明
按包名过滤 //输入package:(输入一个p就会有提示的) ,后面加上包名 比如: package:com.xal.runcontrol package:包名可以完整或者输部分包名即可 package:包名需要输完整准确 package~:正则表达式过滤 不了解正则表达式的可以参考&#…...
![](https://www.ngui.cc/images/no-images.jpg)
carsim与matlab仿真
matlab2021a安装教程,亲测。 百度网盘: matlab2021a安装包 提取码:1223 CarSim2020安装教程, 亲测。 百度网盘: CarSim2020安装包 提取码:1223 ,破解可参考 b站视频...
![](https://www.ngui.cc/images/no-images.jpg)
rust里如何快速实现一个LRU 本地缓存?
LRU是Least Recently Used(最近最少使用)的缩写,是一种常见的缓存淘汰算法。LRU算法的基本思想是,当缓存空间已满时,优先淘汰最近最少使用的数据,以保留最常用的数据。 在计算机系统中,LRU算法…...
![](https://img-blog.csdnimg.cn/40ab896baebe454b9b3522b9ae19f0dd.png)
MQTT 订阅接收消息 mosquitto 方式
1 说明 采用 mosquitto 库,实现订阅主题,并接收消息。其中服务器有做限制,需要对应的 cilent id ,cafile 、certfile 、keyfile 等配置2 环境 采用ubuntu 直接编译调试 安装mosquitto 库 sudo apt install libmosquitto-dev su…...
![](https://img-blog.csdnimg.cn/f7007382116746d4b6674b2dca4b2163.png)
以mod_jk方式整合apache与tomcat(动静分离)
前言: 为什么要整合apache和tomcat apache对静态页面的处理能力强,而tomcat对静态页面的处理不如apache,整合后有以下好处 提升对静态文件的处理性能 利用 Web 服务器来做负载均衡以及容错 更完善地去升级应用程序 jk整合方式介绍&#…...
![](https://www.ngui.cc/images/no-images.jpg)
springboot动态数据源切换
1)、就是将多个数据源全部注入到bean中,根据需要实现多数据源之间的切换。 2)、使用baomidou的DS注解。见文章DS注解实现数据源动态切换 com.baomidou dynamic-datasource-spring-boot-starter 3.5.1 ##设置默认的数据源或者数据源组,默认值…...
![](https://www.ngui.cc/images/no-images.jpg)
代码随想录训练营day14
101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 func isSymmetric(root *TreeNode) bool {if root nil{ return true}return judge(root.Left,root.Right) }func judge(lf *TreeNode , ri *TreeNode)bool{if lf nil && ri nil{ retu…...
![](https://www.ngui.cc/images/no-images.jpg)
功能测试进阶自动化测试如何摸清学习方向,少走弯路呢?
目录 抛开疑问,只做学术探讨 小白在想什么? 盖楼之前先打好地基,首先需要学习一门语言 语言入门后,正式踏上开始自动化成神之路,入门篇Selenium 玩腻了Selenium 开始接触自动化框架unittest/testNG 不满足于单元…...
ip地址进入网站怎么做的/市场调研报告
MACD 的三个最有价值技术为: 多空力量对比、背离买卖、水上金叉。 除此之外,利用形态研判买卖点也非常有效,配合其主要价值技术,对于买点与卖点的把握也极其精确。 MACD形态跟K线形态差不多,大概为: 双顶…...
![](https://img-blog.csdnimg.cn/ec307750dece445eaa8ae2afbcec0b67.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2hhcmxlcyBZYW4=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
wordpress脚本/引流获客工具
K8S学习之CentOS7系统搭建Docker环境前言CentOS7虚拟机安装联网Docker环境部署添加普通用户执行权限安装Docker启动DockerDocker配置Docker常用命令参考链接前言 内容介绍 本次安装事先基于win10环境安装VMWare 12虚拟机,并创建完成CentOS7镜像,在以上基…...
![](/images/no-images.jpg)
用iis浏览网站/bt蚂蚁
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/77983392 甲骨文宣布,Oracle 已选择 Eclipse 基金会作为 Java EE 的新东家。甲骨文与该平台的另外两大贡献者 —— IBM 和 Red Ha…...
![](/images/no-images.jpg)
苏州园区网站建设/最新军事动态
SQL Server 日期的加减函数: DATEDIFF DATEADD 原文:SQL Server 日期的加减函数: DATEDIFF DATEADD原文地址:http://blog.csdn.net/xyzqiang/article/details/6577831 SQL Server 日期的加减函数: DATEDIFF DATEADDDATEDIFF: 返回跨两个指定日期的日期边界数和时…...
![](/images/no-images.jpg)
政府工程招标网站/天津seo网站管理
我们经常用一些正则来验证url,但是php自带了一个类似的函数filter_var。函数用法:参数标志:FILTER_FLAG_SCHEME_REQUIRED – 要求 URL 是 RFC 兼容 URL。(比如:http://example)FILTER_FLAG_HOST_REQUIRED – 要求 URL 包含主机名(…...
![](https://img-blog.csdnimg.cn/img_convert/1614c62c79432f497fe8c5cf19be22e2.png)
国内网站开发语言/seo优化论坛
IBM SPSS Statistics对个案值的计数功能,是通过构建新的个案计数变量,来统计每个个案的指定变量列表中设置值的出现次数。 对个案值的计数功能,既可以用于字符串变量的计数,也可以用于数值型变量的计数。接下来,我们将…...