在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
# -*- coding: utf-8 -*
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.debug = True
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方法。