konchangakita

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

Azure IoT Edge + Jetson Nano with DeepStreamハンズオンやってみた

f:id:konchangakita:20201202214632p:plain

今回のゴールは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用を選択します
f:id:konchangakita:20201130232617p:plain

ターゲットの IoT Edge デバイスを検索して指定
f:id:konchangakita:20201202220203p:plain

これが設定になるのかな
f:id:konchangakita:20201126134513p:plain

反映されているのか、それぞれ確認
f:id:konchangakita:20201130233649p:plain


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」を選択
f:id:konchangakita:20201201005437p:plain


そうすると「config」「deploy」の2つのフォルダ作られます
なんだか VSCode すげー
configフォルダ内の deployment.json を右クリック「Create Deployment for Single Device」
f:id:konchangakita:20201201010040p:plain

適用先の IoT Edge デバイスを選択
f:id:konchangakita:20201201010103p:plain

OUTPUTにsucceeded
f:id:konchangakita:20201202224252p:plain


Azure 経由でエッジデバイスに設定を適用している模様
(Azure IoT Hubから直接設定はできないのかな?VSCode必須?)

ハマったポイントVSCodeで右クリックしてもIoT関連メニューがでてこない場合は、VSCodeのExtentionを確認
・Azure IoT Hub, Azure IoT Edgeあたりが必要

サービス再起動

あとは 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 のコンテナ上にサンプル動画を解析しているんでしょう
あとはこの github の手順に従って進めると、Jetson Nano上に動画を設置したり、Microsoft の Custom Vision
アノテーション作業してオブジェクト認識モデルを自分で作ったりを簡単に体験できます

感想

はじめの Azure IoT Hub の操作だけ Azure ポータルを触っただけで、あとは VSCode だけで全部できてしまうっていう、、、むしろ、VSCodeに感動
Azure IoT の感想としては、Jetson Nano上の設定周りも Azure(VSCode)から操作できるよいなぁ
複数箇所に設置すること考えると、後で更新があると大変かな