Tensorflow Serving 雖然幫你跑模型,但它並不負責展示網頁,或是一些預處理的部分。
(除非把預處理層也寫進模型裡)
所以在這邊我分別使用 docker 提供 Tensorflow Serving API,
並使用 flask 負責中介,也就是接收前端的圖片,轉換後給 Tensorflow Serving API 分類。
docker run -t --rm -p 8501:8501 -v "D:\vscode\ithelp\mnist:/models/mnist/001234" -e MODEL_NAME=mnist tensorflow/serving
import base64
import cv2
import io
from flask import Flask, render_template, request, jsonify
import numpy as np
import requests
import json
import os
app = Flask("mnist", template_folder= os.path.dirname(__file__) + '\\templates')
@app.route("/")
def hello_world():
return render_template('index.html')
@app.route("/mnist", methods = ['POST'])
def mnist():
base64tag = "data:image/png;base64"
data = request.form.get("base64_str").split(",", 1)
if len(data) == 2:
decoded = base64.b64decode(data[1])
np_arr = np.frombuffer(decoded,np.uint8)
imggray = cv2.imdecode(np_arr, cv2.IMREAD_GRAYSCALE)
resized = cv2.resize(imggray, (28, 28))
input_arr = np.array(resized)
r = requests.post(url='http://localhost:8501/v1/models/mnist:predict', data=json.dumps({"instances":[input_arr.tolist()]}))
print(r.content)
return r.content
return jsonify([False])
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5050)
我花了幾個小時為 requests.post 的格式除錯,因為 Tensorflow Serving API 一直跟我說格式錯誤,instances 下的第一個元素應該是字串或是啥的...但 mnist 轉換後是數字陣列阿,怎麼可能有字串。
結果是我當初 docker 指定錯模型資料夾,指定到其他專案--bert 文字情緒分類模型了。