pytorch模型网页部署——Flask

这篇具有很好参考价值的文章主要介绍了pytorch模型网页部署——Flask。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Flask用法

Flask是python的轻量级web框架,可用来做简单的模型部署。Flask的基本用法如下:

step1:定义Flask类的对象,即创建一个基于Flask的服务器

step2:定义公开的路由及路由对应的调用函数

step3:运行服务器

"""基于flask的web网页"""
from flask import Flask     # 导入flask库

app = Flask(__name__)       # 创建Flask类的对象,可理解为建立一个基于flask框架的服务器

# 公开路由的名称【my_fcn】,同时修饰下一行定义的函数。
# 定义的函数名要与公开的路由名称一致。
# 后续访问网页的url格式为:http://ip:port/路由名称
@app.route("/my_fcn")
def my_fcn():
    return "hello world"    # 访问网页时返回内容会显示在网页上

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8000)      # 运行服务器。可通过get/post参数请求数据

运行结果:

pytorch模型网页部署——Flask

二、在基于flask的网页上部署模型

在基于flask的网页上部署模型,其实只需在上述例子中定义的函数【my_fcn】中添加模型预测的代码即可。示例如下:

"""基于flask的web网页"""
import numpy as np
import cv2
import torch
import torchvision
from flask import Flask     # 导入flask库


app = Flask(__name__)       # 创建Flask类的对象,可理解为建立一个基于flask框架的服务器

# 公开路由的名称【my_fcn】,同时修饰下一行定义的函数。
# 定义的函数名要与公开的路由名称一致。
# 后续访问网页的url格式为:http://ip:port/路由名称
@app.route("/my_fcn")
def my_fcn():
    # 加载图片,并将图片转为0到1之间的浮点数张量
    img = cv2.imread("rose.jpg")
    img = cv2.resize(img, (224, 224))
    img_tensor = torch.tensor(img).permute(2, 0, 1).unsqueeze(0).float()/255.0
    model = torchvision.models.resnet50(pretrained=True)
    model.eval()
    output = model(img_tensor)
    output = torch.nn.functional.softmax(output,1)
    output = torch.argmax(output)

    return "class index={}".format(output.numpy())


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8000)      # 运行服务器。可通过get/post参数请求数据

运行结果:

pytorch模型网页部署——Flask

三、远程客户端访问网页服务器模型进行推理 

当需要在远程客户端请求服务器进行推理时,需要将图像的数据post到服务器,第二节的方法就需要进行改进了,具体方法是将图像数据编码为二进制以post方法提交,服务器解析后进行推理。

举例:web服务器部署了基于resnet50的分类模型,远程客户端读取了一张图片,并提交给服务器进行推理,服务器将推理结果返回给客户端。

代码如下:

3.1 服务器代码:server.py

# server.py

import numpy as np
from flask import Flask, request, jsonify

import json
import torch
import torchvision

app = Flask(__name__)

model = torchvision.models.resnet50(pretrained=True)
model.eval()

# 推理过程
def run_inference(in_tensor):
    with torch.no_grad():
        out_tensor = model(in_tensor)
        out_tensor = torch.nn.functional.softmax(out_tensor, 1)
        output = torch.argmax(out_tensor)

    return output

# flask服务器
@app.route('/predict', methods=['GET', 'POST'])     # 注意,这里开放GET、POST请求
def predict():
    # 客户端post时,包含将输入张量尺寸以json字符串,input_input = "{"shape": [C, W, H]}",因此需要重新解析为json并提取尺寸
    in_shape = json.load(request.files['in_shape'])

    # 客户端post时,将图像数据以二进制形式发送,因此需要将图像重新从二进制转换会tensor,并resize
    in_blob = request.files['in_blob'].read()
    in_tensor = torch.from_numpy(np.frombuffer(in_blob, dtype=np.float32))
    in_tensor = in_tensor.view(*in_shape['shape'])

    output = run_inference(in_tensor)  # 推理
    output = '{}'.format(output)

    return jsonify(output)          # 以json返回结果

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8000)

3.2 客户端代码:client.py

# 首先运行【server.py】,然后运行本文件,实现请求推理本地图像的预测结果。
# client.py

import torch
import cv2
import io
import json
import requests


# config
IMG_NAME = 'dog.jpg'
MY_URL = 'http://192.168.1.103:8000/predict'

# 处理图像数据
img = cv2.imread(IMG_NAME)
img = cv2.resize(img, (224, 224))       # resnet输入张量shape=3x224x224
in_tensor = torch.tensor(img).permute(2, 0, 1).unsqueeze(0).float()/255.0
blob = io.BytesIO(bytearray(in_tensor.numpy()))      # 将输入张量转为numpy,再转为二进制进行post请求
shape = io.StringIO(json.dumps({'shape': [1, 3, 224, 224]}))    # 将输入张量尺寸post

my_files = {'in_shape': shape, 'in_blob': blob}
r = requests.post(url=MY_URL, files=my_files)
response = json.loads(r.content)        # 由于服务器返回结果为json,因此需要解析json内容

print("the class index of '{}' is: {}".format(IMG_NAME, response))

运行结果:

pytorch模型网页部署——Flask

四、缺点

由于HTTP是串行的,当大量并发请求时,这种方式只能应答完一个请求后才会应答下一个,改进方法可通过使用Sanic框架,实现异步并行处理。文章来源地址https://www.toymoban.com/news/detail-422780.html

到了这里,关于pytorch模型网页部署——Flask的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python用flask将视频显示在网页上

    注意我们的return返回值必须是以下之一,否则会报错 运行后输入路由

    2024年02月11日
    浏览(29)
  • python后端接口框架Flask的基本用法

    在现代Web开发中,后端接口是十分重要的一部分。它们建立了前端和后端之间的连接,使得数据能够在两者之间传递。Python是一门受欢迎的动态编程语言,它可以用来编写高效且功能强大的后端接口。本文将介绍如何使用Python编写后端接口,以及Python作为后端接口语言的优点

    2024年02月15日
    浏览(36)
  • 基于Flask的模型部署

    Flask:一个使用Python编写的轻量级Web应用程序框架; 首先需要明确模型部署的两种方式:在线和离线; 在线:就是将模型部署到类似于服务器上,调用需要通过网络传输数据,再将结果返回; 离线:就是将模型直接部署在终端设备上,不需要联网,数据传输上比较快; 通过

    2024年02月13日
    浏览(32)
  • flask模型部署教程

    具体参考https://blog.csdn.net/weixin_42126327/article/details/127642279 1、安装conda环境和相关包 1、训练模型并保存模型 model.py 2、启动flask服务 app_demo.py 3、调用flask服务的客户端代码 request_demo.py python客服端代码 FlaskClient.scala scala客户端代码 http客户端代码 templates/index.html 1、调试环境

    2024年02月12日
    浏览(42)
  • 模型部署flask学习篇(二)---- flask用户登录&用户管理

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在学习机器学习或者深度学习后,我们常常会将自己训练好的模型来进行部署或者可视化出来,供自己或者别人来使用,那么python的flask框架就可以作为选择之一。 1、 flask路由:可以接收get请求和post请求

    2024年01月25日
    浏览(39)
  • 模型部署flask学习篇(一)---- flask初始及创建登录页面

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在学习机器学习或者深度学习后,我们常常会将自己训练好的模型来进行部署或者可视化出来,供自己或者别人来使用,那么python的flask框架就可以作为选择之一。 安装 如何使用flask打印 hello world 总结

    2024年01月24日
    浏览(43)
  • 使用Flask简单部署深度学习模型

    当客户端想要获取资源时,一般会通过浏览器发起HTTP请求。 此时,Web服务器会把来自客户端的所有请求都交给Flask程序实例。 程序实例使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)。 根据每个URL请求,找到具体的视图函数并进行调用。在Flask程序中,路由的

    2023年04月25日
    浏览(36)
  • 将网页数据读入数据库+将数据库数据读出到网页——基于python flask实现网页与数据库的交互连接【全网最全】

    【全网最全!保姆级教学!!】 本篇博客基于flask技术,实现数据库和网页端的交互。 实现效果:在网页端输入数据,能够将数据存入数据库。反向操作时,能将数据库的数据取出,显示在网页端。不仅如此,还支持数据的查询和修改。  读取网页数据存入数据库,效果如下

    2024年02月13日
    浏览(41)
  • 【python】flask操作数据库工具SQLAlchemy,详细用法和应用实战

    ✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,

    2024年04月17日
    浏览(47)
  • 深度学习模型部署——Flask框架轻量级部署+阿里云服务器

    ​因为参加一个比赛,需要把训练好的深度学习模型部署到web端,第一次做,在网上也搜索了很多教程,基本上没有适合自己的,只有一个b站up主讲的还不错 https://www.bilibili.com/video/BV1Qv41117SR/?spm_id_from=333.999.0.0vd_source=6ca6a313467efae52a28428a64104c10 https://www.bilibili.com/video/BV1Qv41117

    2024年02月07日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包