iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
AI & Data

機器學習與前端網頁系列 第 13

Day 13 Flask 與 Tensorflow Serving 的溝通

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 文字情緒分類模型了。


上一篇
Day 12 跑 Tensorflow Serving Docker 範例
下一篇
Day 14 試用 Heroku
系列文
機器學習與前端網頁30

尚未有邦友留言

立即登入留言