我在笔记本电脑上使用了 Tensorflow-GPU 进行对象检测。现在管理团队想在自己的地方用 URL 检查它。我从来没有在网络上发布/部署模型,因为我不是 python 开发人员,但现在我必须这样做。为此,我尝试阅读一些 Flask 的在线教程,但它们并没有那么有用。
如何使用 Flask API 发布模型?是否有任何指南/博客/视频可以使用 Flask 在 URL 上部署对象检测模型?
我的项目结构是这样的
我在笔记本电脑上使用了 Tensorflow-GPU 进行对象检测。现在管理团队想在自己的地方用 URL 检查它。我从来没有在网络上发布/部署模型,因为我不是 python 开发人员,但现在我必须这样做。为此,我尝试阅读一些 Flask 的在线教程,但它们并没有那么有用。
如何使用 Flask API 发布模型?是否有任何指南/博客/视频可以使用 Flask 在 URL 上部署对象检测模型?
我的项目结构是这样的
您可以编写一个可以与任何其他服务一起使用的烧瓶 restful api。
base64对于基于图像的任务,在发出请求时使用编码图像总是很明智的。这减少了大量的带宽开销。
在这里,我在制作非常简单的 ML/DL 模型的原型时使用我的虚拟模板来仅使用 rest API 进行测试。
它有一个简单的test路由来测试服务器是否处于活动状态,最后,另一个路由处理带有 base64 图像的 post 请求,它将 base64 图像转换为numpy数组(方便传递给 ML 模型)。
您可以更改中间部分以使其适合您。
ml_app.py
from flask import Flask
from flask_restful import Resource, Api, reqparse
import werkzeug, os
import json
import numpy as np
import base64
class NumpyEncoder(json.JSONEncoder): # useful for sending numpy arrays
def default(self, obj):
if isinstance(obj, np.ndarray):
return obj.tolist()
return json.JSONEncoder.default(self, obj)
app = Flask(__name__)
api = Api(app)
parser = reqparse.RequestParser()
parser.add_argument('file', type=werkzeug.datastructures.FileStorage, location='files')
parser.add_argument('imgb64')
# add other arguments if needed
# test response, check if live
class Test(Resource):
def get(self):
return {'status': 'ok'}
class PredictB64(Resource): # for detecting from base64 images
def post(self):
data = parser.parse_args()
if data['imgb64'] == "":
return {
'data':'',
'message':'No file found',
'status':'error'
}
img = data['imgb64']
#print(img)
br = base64.b64decode(img)
im = np.frombuffer(br, dtype=np.uint8). reshape(-1, 416, 3) # width will be always 416, which is generally the bigger dimension
# reshape with the actual dimension of your image
#print(im.shape)
#print(type(im))
#print(im.shape)
if img:
r = # call your model here
#print(r)
return json.dumps({
'data': json.dumps(list(r)), #(images), # may change based on your output, could be a string too
'message':'darknet processed',
'status':'success'
}, cls=NumpyEncoder)
return {
'data':'',
'message':'Something when wrong',
'status':'error'
}
api.add_resource(Test, '/test')
api.add_resource(PredictB64,'/predict_b64')
if __name__ == '__main__':
app.run(debug=True, host = '0.0.0.0', port = 5000, threaded=True)
要运行,只需执行以下操作:
python ml_app.py
更多示例:https ://github.com/zabir-nabil/flask_restful
黑暗/yolo:https://github.com/zabir-nabil/tf-model-server4-yolov3