今回のゴールはAzure IoT + Jetson Nano でクラウドからエッジデバイス関しつつエッジでリアルタイムビデオ分析というのんやってみます
Github で公開されているこれをお手本にします
github.com
(正直この英語の手順はわかりにくいので、独自手順でいきます)
この手順では VSCode を駆使していきます
さすがに Azure との親和性は最強
Jetson Nano を本格的に使いこなす前に、Azure IoT でなにやらやってみよう!
=バージョン情報==
JetPack 4.3-b134
Ubuntu 18.04.3
DeepStream 4.0.2
VSCode 1.51.1
========
Jetson の状態確認
まずは現在の Jetson Nano 上の IoT edge の情報を確認
jetson:/etc/iotedge$ sudo iotedge list NAME STATUS DESCRIPTION CONFIG edgeAgent running Up 2 hours mcr.microsoft.com/azureiotedge-agent:1.0 jetson:/etc/iotedge$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3a3997d68297 mcr.microsoft.com/azureiotedge-agent:1.0 "/bin/sh -c 'exec /a…" 2 hours ago Up 2 hours edgeAgent kon@kon-jetson:/etc/iotedge$
NVIDIA DeepStream のセットアップ
マーケットプレイスから SDK を入手
Azureマーケットプレイスで「NVIDIA Deep Stream SDK」のJetson用を選択します
ターゲットの IoT Edge デバイスを検索して指定
これが設定になるのかな
反映されているのか、それぞれ確認
DeepStream がデプロイされると Docker コンテナも作られるんですね
jetson:/etc/iotedge$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3d7b1cf6bd12 marketplace.azurecr.io/nvidia/deepstream-iot2-l4t:latest "/usr/bin/deepstream…" 53 seconds ago Up 36 seconds NVIDIADeepStreamSDK de3630e6670d mcr.microsoft.com/azureiotedge-hub:1.0 "/bin/sh -c 'echo \"$…" 56 seconds ago Up 54 seconds 0.0.0.0:443->443/tcp, 0.0.0.0:5671->5671/tcp, 0.0.0.0:8883->8883/tcp edgeHub 3a3997d68297 mcr.microsoft.com/azureiotedge-agent:1.0 "/bin/sh -c 'exec /a…" 3 hours ago Up 3 hours edgeAgent jetson:/etc/iotedge$ sudo iotedge list NAME STATUS DESCRIPTION CONFIG NVIDIADeepStreamSDK running Up a minute marketplace.azurecr.io/nvidia/deepstream-iot2-l4t:latest edgeAgent running Up 2 hours mcr.microsoft.com/azureiotedge-agent:1.0 jetson:/etc/iotedge$ sudo iotedge logs NVIDIADeepStreamSDK --tail 200
使わないときは止めておく方法
$ sudo systemctl stop iotedge
DeepStream 動作テスト
設定ファイル
Jetson Nano上に DeepStream 設定ファイルを作ります
cd /var sudo mkdir deepstream sudo mkdir ./deepstream/custom_configs sudo chmod -R 777 /var/deepstream vi test5_config_file_src_infer_azure_iotedge_edited.txt
「test5_config_file_src_infer_azure_iotedge_edited.txt」へ下記をコピペ
次にローカルのPC上に適当な作業フォルダを作って、「deployment.template.json」ファイルを作って下記をコピペ
(要はコンテナの設定をいじるのかな?)
Deploy 用の configファイルを作成
ここからがびっくりの手順だったのですが、
VSCode上で今作った「deployment.template.json」ファイルを右クリック「Generate IoT Edge Deployment Manifest」を選択
そうすると「config」「deploy」の2つのフォルダ作られます
なんだか VSCode すげー
configフォルダ内の deployment.json を右クリック「Create Deployment for Single Device」
適用先の IoT Edge デバイスを選択
OUTPUTにsucceeded
Azure 経由でエッジデバイスに設定を適用している模様
(Azure IoT Hubから直接設定はできないのかな?VSCode必須?)
サービス再起動
あとは Jetson Nano 上、iotedge のサービスを再起動
sudo systemctl restart iotedge
状態の確認
jetson:/var/deepstream$ iotedge list NAME STATUS DESCRIPTION CONFIG NVIDIADeepStreamSDK running Up 7 seconds marketplace.azurecr.io/nvidia/deepstream-iot2-l4t:latest edgeAgent running Up 22 seconds mcr.microsoft.com/azureiotedge-agent:1.0 edgeHub running Up 9 seconds mcr.microsoft.com/azureiotedge-hub:1.0
5分くらい待ってうまいこと起動していると、なんか処理しているログがみることが出来ます
$ iotedge logs NVIDIADeepStreamSDK --tail 100 (中略) Message sent : { "version" : "4.0", "id" : 1658, "@timestamp" : "2020-12-01T15:44:21.760Z", "sensorId" : "HWY_20_AND_LOCUST__WBA__4_11_2018_4_59_59_379_AM_UTC-07_00", "objects" : [ "896|291|442|435|816|Person", "972|457|460|511|614|Person", "974|624|478|681|542|Car", "976|438|464|482|597|Person", "977|675|475|847|601|Car", "979|64|453|192|784|Person", "980|883|493|1078|590|Car", "987|585|471|633|514|Car", "990|976|468|1008|489|Car", "991|1056|468|1100|496|Car", "992|1404|478|1509|521|Car", "993|1545|496|1717|589|Car" ] } *** DeepStream: Launched RTSP Streaming at rtsp://localhost:8554/ds-test *** (deepstream-test5-app:1): GLib-CRITICAL **: 15:44:35.189: g_strrstr: assertion 'haystack != NULL' failed 0:00:01.688358065 1 0x32ac2560 WARN nvinfer gstnvinfer.cpp:515:gst_nvinfer_logger:<primary_gie_classifier> NvDsInferContext[UID 1]:useEngineFile(): Failed to read from model engine file 0:00:01.688436557 1 0x32ac2560 INFO nvinfer gstnvinfer.cpp:519:gst_nvinfer_logger:<primary_gie_classifier> NvDsInferContext[UID 1]:initialize(): Trying to create engine from model files 0:00:01.688653597 1 0x32ac2560 WARN nvinfer gstnvinfer.cpp:515:gst_nvinfer_logger:<primary_gie_classifier> NvDsInferContext[UID 1]:generateTRTModel(): INT8 not supported by platform. Trying FP16 mode.
解析結果の確認
この状態で後は VLC で RTSP 接続すると Jetson Nano 上での解析結果が確認できます
接続先:rtsp://<Jetson NanoのIP>:8554/ds-test
DeepStream on Azure IoT のチュートリアルをこなす pic.twitter.com/NPixBJZFOY
— konchangakita (@konchangakita) 2020年12月1日
この第一段階の手順はおそらく DeepStream のコンテナ上にサンプル動画を解析しているんでしょう
あとはこの github の手順に従って進めると、Jetson Nano上に動画を設置したり、Microsoft の Custom Vision
でアノテーション作業してオブジェクト認識モデルを自分で作ったりを簡単に体験できます