今日は、ご質問の多いAIモデルの動きについて解説します。
AI Modelsとは
デバイスに配置した学習済みモデルをNode-REDのノードとして表示することで、AIへのデータの受渡や出力結果を簡単に扱えるようにしようという機能です。現在β版となっています。
enebularでは学習済みモデルを表示するノードをAIノードと呼んでいます。現時点ではJSON形式、カラー画像の2つの形式をインプットデータとして選択できます。
基本的な仕組み
enebularに登録した学習済みモデルをAIモデルと呼びます。AIノードとデバイスにあるAIモデルは、Web Server(Flask)を中継して通信します。これにより、デバイスにデプロイしたフローからAIモデルを扱えるようになります。
Node-RED 上の Flow と Docker Image の I/F には HTTP (Flask) を用いています。そして、リクエストを受けた Flask は AI-Models の処理を呼出すために自動生成されるwrapper.py を介して handlerを呼び出します。
handlerは、AI Models の enebularの設定画面にある Handler Functions で設定することができます。
Flow からのリクエストを Flask が受け、Flask が wrapper.py 経由で main.py の関数 handler を呼び出します。
main.handler 関数の返り値を wrapper.py が受け、それを Flask に返します。
自動生成されるwrapper.pyは以下の様なプログラムです。
JOSNの場合
---- wrapper.py 抜粋 ----
def handler1():
r = request
data = json.loads(r.data.decode("utf-8"))
predict = main.handler(data) #★main.py の関数 handler を呼び出す。
return Response(response=json.dumps(predict), status=200, mimetype="application/json")
------------------------
画像の場合
---- wrapper.py 抜粋 ----
def handler1():
r = request
with open("画像ファイル名.jpg", 'wb') as fh:
fh.write(r.data.decode('base64'))
img = imread("画像ファイル名.jpg")
predict = sample.handler(img)
return Response(response=json.dumps(predict), status=200, mimetype="application/json")
------------------------
学習済みモデルについて
アップロードする学習モデルはPythonプログラムです。プログラムフォルダ全体をZip圧縮してenebularにアップロードします。
学習済みモデルのデプロイについて
デバイスに学習済みモデルをデプロイするとき、enebularは、Docker hubから指定されたdocker imageを一緒にデプロイします。
Docker imageには依存関係があるため、こちらのドキュメントを参考にしてください。
基本的な使用方法
AIモデル機能の主な使用手順としては、以下の様になります。設定や操作などはドキュメントをご覧ください。
- Docker imageを作る。
- そのDocker image上でAIモデルを作る。
- 動いたDocker imageをDocker hubにアップする。
- AIモデルを呼び出すハンドラ関数を作る。
- AIモデルとハンドラ関数をzipファイルにしてデバイスにデプロイする。
- AIノードを使ったフローをenebular editorからリモートモードで作る。
最後に
ご興味がある方は、ぜひenterprise Planのトライアルをお申し込みいただき、お試しください。
また、お時間のあるときに以下の機能紹介動画も合わせてご覧ください。
※現在β版でのご提供のため、予告なくサービス内容が変わる場合がございます。予めご了承ください。