3

我在笔记本电脑上使用了 Tensorflow-GPU 进行对象检测。现在管理团队想在自己的地方用 URL 检查它。我从来没有在网络上发布/部署模型,因为我不是 python 开发人员,但现在我必须这样做。为此,我尝试阅读一些 Flask 的在线教程,但它们并没有那么有用。

如何使用 Flask API 发布模型?是否有任何指南/博客/视频可以使用 Flask 在 URL 上部署对象检测模型?

我的项目结构是这样的

在此处输入图像描述

4

1 回答 1

0

您可以编写一个可以与任何其他服务一起使用的烧瓶 restful api。

  1. base64对于基于图像的任务,在发出请求时使用编码图像总是很明智的。这减少了大量的带宽开销。

  2. 在这里,我在制作非常简单的 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

于 2020-05-19T09:00:48.440 回答