Pytorch项⽬打包和部署(3)——代码——flask+onnx ⽂章⽬录
⼀、Flask部署
1.1 httpserver.py
from flask import Flask,request
app = Flask(__name__)#确保Flask调⽤的是当前模块
@ute('/')# 每个服务定义成⼀个函数,此为服务器的请求路径
def hello():
return'Hello World!'
@ute('/lolanni',)
def new():
print(("name"))# 上传参数与接收参数
# ⽹址输⼊127.0.0.1:5000/lolanni?name=okok 返回值为okok
return'I am lol yasuo!'
if __name__ =='__main__':
app.run()
"""
浏览器发出http请求,服务器处理完返回给浏览器输出
⽹址输⼊错误就是404错误,右键可以检查,返回为200即没出错
"""
⽰意图:
⽹页:
Pycharm:
1.2 clinet.html
改⼀下上⾯的代码,修改的内容为:print((“name”))
新建⼀个html⽂件,在body下建⼀个form表单,输⼊下⾯的代码:
<form action="127.0.0.1:5000/lolanni" method="post">
<input name="name" value="">
<input type="submit" value="submit">
</form>
⽤chrome打开,随意填⼀个名称提交,得到的结果就是“I am lol yasuo!”
这个时候,Pycharm返回的就是我们刚刚提交的名字“lol”
⼆、传图⽚
2.1 clinet.html
仅加了enctype=“multipart/form-data”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="127.0.0.1:5000/lolanni" method="post" enctype="multipart/form-data"> <input type="file" name="file">
<input name="name" value="">
<input type="submit" value="submit">
</form>
</body>
</html>
2.2 httpserver.py
from flask import Flask,request
from PIL import Image
import io
app = Flask(__name__)#确保Flask调⽤的是当前模块
@ute('/')# 每个服务定义成⼀个函数,此为服务器的请求路径
def hello():
return'Hello World!'
@ute('/lolanni',methods=["POST"])
# methods可以⽤POST和GET,默认GET,浏览器知道我们的输⼊,不安全,所以选POST
# 这样下⾯⽹址输⼊lolanni?name=okok,⽹页会返回"Method Not Allowed"
def new():
print(("name"))# 上传参数与接收参数
# ⽹址输⼊127.0.0.1:5000/lolanni?name=okok 返回值为okok
file= ("file")
img_bytes =ad()# 读成字节码
image = Image.open(io.BytesIO(img_bytes))# 转PIL格式
image.show()
return'I am lol yasuo!'
if __name__ =='__main__':
app.run()
选择⼀张图⽚,选择提交⼈名,⽹页会返回⼀张显⽰的图像,下⾯是我⾃⼰提交的:
三、返回json格式
rest规范:过去的数据是表单或GET⽅式,返回的数据应该是json格式。
json格式:⾸先⼀个花括号{},整个代表⼀个对象,同时⾥⾯是⼀种Key-Value的存储形式,它还有不同的数据类型来区分(1)Object
{key:value,key:value…}
key:string类型
value:任何基本类型或数据结构
(2)Array
[value,value…]
value:任何基本类型或数据结构。
⽐如:{“name”:“李⼴”, “values”:[1,2,45,“你好”] }
3.1 clinet.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="127.0.0.1:5000/lolanni" method="post" enctype="multipart/form-data"> <input type="file" name="file">
<input name="name" value="">
<input type="submit" value="submit">
</form>
</body>
</html>
3.2 httpserver.py
from flask import Flask,request,jsonify
from PIL import Image
import io
app = Flask(__name__)#确保Flask调⽤的是当前模块
@ute('/')# 每个服务定义成⼀个函数,此为服务器的请求路径
def hello():
return'Hello World!'
@ute('/lolanni',methods=["POST"])
# methods可以⽤POST和GET,默认GET,浏览器知道我们的输⼊,不安全,所以选POST
# 这样下⾯⽹址输⼊lolanni?name=okok,⽹页会返回"Method Not Allowed"
def new():
name = ("name")# 上传参数与接收参数
# ⽹址输⼊127.0.0.1:5000/lolanni?name=okok 返回值为okok
file= ("file")
img_bytes =ad()# 读成字节码
return jsonify({"name": name,"filelen":len(img_bytes)})
if __name__ =='__main__':
app.run()
提交后,得到的就是json格式的信息:
四、官⽹实例转JSON
4.1 httpserver2.py
import io
import json
from torchvision import models
ansforms as transforms
from PIL import Image
from flask import Flask, jsonify, request
app = Flask(__name__)
imagenet_class_index = json.load(open('imagenet_class_index.json'))
model = models.densenet121(pretrained=True)
model.eval()
def transform_image(image_bytes):
my_transforms = transforms.Compose([transforms.Resize(255),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(
[0.485,0.456,0.406],
[0.229,0.224,0.225])])
image = Image.open(io.BytesIO(image_bytes))
return my_transforms(image).unsqueeze(0)
def get_prediction(image_bytes):
tensor = transform_image(image_bytes=image_bytes)
outputs = model.forward(tensor)
_, y_hat = outputs.max(1)
predicted_idx =str(y_hat.item())
return imagenet_class_index[predicted_idx]
@ute('/predict', methods=['POST'])
def predict():
hod =='POST':
file= request.files['file']
img_bytes =ad()
class_id, class_name = get_prediction(image_bytes=img_bytes)
return jsonify({'class_id': class_id,'class_name': class_name})
if __name__ =='__main__':
app.run()
4.2 clinet2.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="127.0.0.1:5000/predict" method="post" enctype="multipart/form-data"> <input type="file" name="file">
<input name="name" value="">
<input type="submit" value="submit">
</form>
</body>
flask下载</html>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论