在colab上开发测试完成后,投入到生产中,就要部署为服务了。采用通用restful api的形式,通过接口上传图片,json格式返回识别出的数据。
部署方式
服务框架
由于tf为python语言,所以直接用了python的轻量级框架flask,这里只提供一个接口,就是分析图片内CRM组件的接口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| from flask import Flask, jsonify, request from service.tf import tfServer
app = Flask(__name__) ALLOWED_EXTENSIONS = set(['png', 'PNG', 'jpg', 'jpeg'])
@app.route('/') def root(): return 'D2C后台服务'
def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
@app.route('/generate/form', methods=['POST']) def generate_form(): if request.files: file = request.files['file'] if file and allowed_file(file.filename): file.save('images/'+file.filename) result = tfServer('images/'+file.filename) return jsonify({'success': 'true', 'data': result}) return jsonify({'success': 'false', 'message': '请传文件-file'})
if __name__ == '__main__': app.run(host="0.0.0.0", port=5000)
|
flask部分较为简单,服务启动在 0.0.0.0:5000 ,这里需设置host 0.0.0.0否则外网无法访问。
提供一个api接口 /generate/form
方法为POST
, flask对于文件上传处理也比较方便,直接 request.files 就可以获取到文件名等信息。file.save 就可以报错到文件目录。对比 node koa 需要中间件 koa-body 处理文件上传,然后fs.createReadStream读取文件流,fs.createWriteStream 写到目标文件中。
allowed_file 函数用于对上传文件类型的简单判断,只允许几个图片的后缀。
随后就是调用colab上测试好的识别方法了,最后输出时通过 jsonify 包装一下。
图像识别服务
上述代码中的 tfServer('images/'+file.filename)
就是调用的service
文件夹下的tfServer
方法。