konchangakita

KPSを一番楽しんでいたブログ 会社の看板を背負いません 転載はご自由にどうぞ

Xi IoT上でYOLOv5マスク検出を動かしてみる

せっかく作った YOLOv5 マスク検出を Xi IoT 上にも展開してみます

Xi IoT上で動いてしまえば、Service Domain(エッジOS)を増やしていけば、プラネットスケールの展開を目論むことができます。
f:id:konchangakita:20200831171714p:plain


【今回やってみること】
 1.Xi IoT用 YOLOv5 runtimeを作成
 2.Xi IoTで runtime 読み込み
 3.YOLOv5 の detect.py を Xi IoT 用に改良して自作
 4.Data Pipeline の作成
 5.nodered で可視化

Xi IoTでこんなの作ってみる
f:id:konchangakita:20200831193118p:plain



一回作ってしまえば、プラネットスケールと書いたように Service Domain(エッジOS)に、Webカメラを通信させればエッジAI をゼロタッチ展開できるのが特徴です
あちこち設置してみたいので頑張って作ってみましょう

1.Xi IoT用 YOLOv5 runtimeを作成

まずは、YOLOv5 を Xi IoT 上で動かすにはいくつか方法があるようです
 ・Kubernetes Apps - Dockerコンテナイメージを作り込み丸っともってくる。シンプル
 ・Runtime - Function で呼び出し、Data Pipeline で活用。自由度が高い
(きっとML modelがこの辺うまくできそうだけどあんま分かってない)

今回は、自由度の高い Runtime 作戦でいきます

YOLOv5 は PyTorch を使っていますので、これを参考に Xi IoT用 Runtime を作っていきます
konchangakita.hatenablog.com

YOLOv5 の中に Dockerコンテナ作る用の requirements.txt があるので、これを利用します
あとは、学習済みパラメータ(xxx.pt)も一緒に設置します



2.Xi IoTで runtime 読み込み

自作したRuntime のコンテナイメージを Dockerhub に push しておきます
https://hub.docker.com/repository/docker/konchangakita/kon_yolov5_env/general

Xi IoT ver2.0 になって Runtime Environments の場所が変わりました。Projectごとにそれぞれ選ぶようになりました
f:id:konchangakita:20200831230243p:plain


3.YOLOv5 の detect.py を Xi IoT 用に改良して自作

Data Pipeline に登録する Function を作っていきます

RTSP からの映像から画像を切り出す

RTSP で受け取った映像から jpg 形式で切り出し、base64エンコードして次へ渡します
runtime は、Tensorflow Python を選択します
opencv が必要)


画像に対してマスク検出

ここで 自作した YOLOv5 Runtimeを指定します
f:id:konchangakita:20200831225215p:plain

YOLOv5 の detect.py を参考にしながら、自作しました



4.Data Pipeline の作成

まずはWebカメラを Data Source に登録します
f:id:konchangakita:20200831214918p:plain
RTSP のアドレスは、Webカメラによって異なります
f:id:konchangakita:20200831215201p:plain

プロジェクトを選んで、Data Pipelineを作成します
Input: Data Sourceで作ったカテゴリを選択
Transformation:Sampling interval 30 seconds / raw_to_jpg → maskdetect
Output:Stream Domain / MQTT / maskdetect
f:id:konchangakita:20200831215407p:plain

Data Pipeline を作った後は、しばらく待ちます
Deployment タブで RUNNING となれば、無事完了です
(Functionでプログラミング記述がミスったりしていると、RUNNINGになりません)
f:id:konchangakita:20200831215701p:plain

View Real-time Logs でデバックすることができます
f:id:konchangakita:20200831220228p:plain
f:id:konchangakita:20200831220405p:plain


5.nodered で可視化

Dockerhub で公開されている コンテナイメージをそのまま使います。
Xi IoTで外部アクセス用に必要な socat も一緒記述しておき、公開する port番号を指定します(今回は 11880)

ブラウザで 「Service DomainのIP:11880」へアクセスし、MQTTで受け取った画像出力するだけのフローを作ります
f:id:konchangakita:20200831221843p:plain


フローはこんな感じです


今回 nodered 上の詳細説明は省きますが、YoutubeWebカメラを向けて撮影してみると、良い感じに判定結果を表示してくれています
f:id:konchangakita:20200831221532p:plain
f:id:konchangakita:20200831221727p:plain


全容はコチラ
GitHub - konchangakita/xiiot_MaskDetect


Xi IoTの良いところは、これを一回作ってしまえばナンボでも、どこにでもスケールできることです
早速福岡オフィスに適用しましたので、福岡お立ち寄りの際はNutanixさんへお声がけください
(名古屋にもはやく設置したい)