JETSON NANO, 組込

今日は朝から昨日(5日)のドカ雪のおかげで、雪かきで疲れました。(笑)
かなり腰にきています。
1日で40センチ以上積もりました。

現在もまだちらほら雪が降っています。

という事で多少疲れてはいますが、
今回は、NVIDIAが提供しているDeepStream SDKの機能を試してみました。

1.DeepStream SDK とは? (説明からの抜粋です)

 (1)カメラ、センサー、IoTゲートウェイからのデータをリアルタイムで分析
  NVIDIAのDeepStream SDKは、マルチセンサー処理だけでなく、AIベースのビデオおよび画像を理解するための完全なストリーミング分析ツールキットを提供します。
  DeepStreamは、ピクセルとセンサーデータを実用的な洞察に変換するためのエンドツーエンドのサービスとソリューションを構築するプラットフォームであるNVIDIA Metropolisの不可欠な部分です。

 (2)複雑なストリーム処理パイプラインをシームレスに開発
  DeepStreamを使用すると、開発者はエッジツークラウドのストリーミング分析アプリケーションを構築できます。
  SDKは、オープンソースのGStreamerを使用して、低レイテンシのストリーミングフレームワークで高いスループットを実現します。
  ランタイムシステムはパイプライン化されており、ディープラーニング機能に加えて、ストリーミングアプリケーションでの画像およびセンサー処理と融合アルゴリズムを可能にします。

2.DeepStream SDKのセットアップ
 
 方法はいくつかあるようですが、ホストPCからSDK Managerを通してセットアップするのが楽ちんのようです。
 これについては以前の「【NVIDIA SDK Manager編】」で既に実施済です。

3.サンプルの動作確認

 sampleの構成ファイルは /opt/nvidia/deepstream/deepstream-4.0/samples ディレクトリにあります

 $ cd /opt/nvidia/deepstream/deepstream-4.0/samples/

 次のコマンドを入力すると 2*4のタイル形式でサンプルmp4に対して約30FPSの物体検知の動画が表示されます。

 $ deepstream-app -c ./configs/deepstream-app/source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt

 ※動画は割愛。

4.カメラ映像をリアルタイム検出してRTSP配信&スマフォ(Android)で見る

 マニュアルや他のconfigを参考にお試し用にのconfigを編集しました。
 https://docs.nvidia.com/metropolis/deepstream/4.0/dev-guide/index.html#page/DeepStream_Development_Guide%2Fdeepstream_app_config.3.2.html

 下記コマンドでお試しを起動。
 $ deepstream-app -c ./configs/deepstream-app/my_test.txt

 スマフォ(Android)のVLCアプリを起動し、ネットワークストリームにて下記にアクセスします。
 ※VLCアプリは別途インストール要。

 rtsp://192.168.0.18:8554/ds-test

 おおっ! Jetson Nanoに接続されているカメラ映像がスマフォで見る事ができました。
 物体検出も見れているようです。

 ※動画は割愛。

5.YOLOを試してみる。

 YOLO(You Only Look Once)はdarknet(C言語で書かれたディープラーニングライブラリ)で開発された画像認識ディープラーニングネットワークで、1回ネットワークを通して、ちょっと後処理しただけで複数の対象物のクラス(種別)と位置を検出するという優れものというものです。
 これについても試してみました。

 (1)YOLOの準備

   $ cd /opt/nvidia/deepstream/deepstream-4.0/sources/objectDetector_Yolo

   以下のコマンドで、YOLOのcfgファイル(ネットワーク構造等を定義しているもの)、weight(ネットワークの係数)を次のコマンド(スクリプト)で一括ダウンロードします。

   $ ./prebuild.sh

   下記コマンドで、Jetson NanoにインストールされているCUDAのバージョンを環境変数として設定します。

   $ nvcc -V

   表示されたバージョンを確認して次の通り設定します。間違うとコンパイルでエラーになります。

$ export CUDA_VER=10.0

   YOLOのPluginをコンパイルします。

$ make -C nvdsinfer_custom_impl_Yolo

 (2)YOLOv3-tinyのサンプルを動かす

   次のコマンドでサンプルが動きます。動き始めるまでは少し時間がかかります。

$ deepstream-app -c deepstream_app_config_yoloV3_tiny.txt

 (3)USB Cameraで動かす

   $ cp deepstream_app_config_yoloV3_tiny.txt deepstream_app_config_yoloV3_tiny_usb_camera.txt

   deepstream_app_config_yoloV3_tiny_usb_camera.txtの[source0]を書き換えます。

    [source0]
   enable=1
   #Type – 1=CameraV4L2 2=URI 3=MultiURI
   type=1
   camera-width=640
   camera-height=480
   camera-fps-n=30
   camera-fps-d=1
   camera-v4l2-dev-node=0
   #uri=file://../../samples/streams/sample_1080p_h264.mp4
   #num-sources=1
   #gpu-id=0
   # (0): memtype_device – Memory type Device
   # (1): memtype_pinned – Memory type Host Pinned
   # (2): memtype_unified – Memory type Unified
   #cudadec-memtype=0

   USB CameraでYOLOv3-tinyを動かします。

   $ deepstream-app -c deepstream_app_config_yoloV3_tiny_usb_camera.txt

   Jetson Nanoに接続されているカメラ映像でYOLOが動作しました。

   ※動画は割愛。

DeepStream技術は様々なニーズがあるようです。
今後も勉強していきたいと思います。

JETSON NANO, 組込

今回はJetson Nanoでリアルタイム画像類推についてです。

1.jetson-inferenceの構築
Jetson NanoにはGitHubでjetson-inferenceというサンプルがあるので、これを試してみました。
以下の手順で、構築しました。

$ git clone https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference
$ git submodule update –init
$ mkdir build
$ cd build
$ cmake ../
$ make
$ sudo make install
$ sudo reboot

2.サンプルを試す
$ cd jetson-inference/build/aarch64/bin

・ペットボトルが検出されるか?
$ ./detectnet-camera –camera=/dev/video0 –network=googlenet coco-bottle

以下は、結果画像です。77%の割合で検出されました。

detectnet-camera

・ペットボトルがどのように認識されるか?
$ ./imagenet-camera –camera=/dev/video0 –network=googlenet

以下は、結果画像です。23,25%の割合で薬箱もしくは常備薬戸棚として認識されました。(笑)

imagenet-camera

面白いですね~。

3.自分作成済のものを試す
それでは、昔PC上で私がちょっと作成してみたもの(一部)もJetson Nanoに落として、試してみます。
※python3で開発したもの。

・物体認識
以下が結果画像です。

物体認識

丸で色のついた部分で物体認識されているようです。

※本当は動画で物体が動く軌跡が描かれるんですが、動画サイズが重いので割愛。

・顔認識
以下が結果画像です。

顔認証

赤の四角で顔が囲まれていて認識されています。

必要なpython3のライブラリをインストールする必要がありましたが、ちゃんと動作しました。

次回はTensorflowをインストールして何か作成してみようと思います。

※最終的にはJetBotを試してみたいです。

JETSON NANO, 組込

1.ホストPCの構築
NVIDIA SDK Managerを使用するにはホストPCを構築する必要があります。

VMwareにUbuntu_18.04.4 LTSを構築しました。
また下記URLを参考に日本語化を実施。
https://www.server-world.info/query?os=Ubuntu_18.04&p=japanese

タイムゾーンも変更し、時間を再設定しました。
# timedatectl
# timedatectl list-timezones
# retimedatectl set-timezone Asia/Tokyo

2.NVIDIA SDK Managerのセットアップ
下記を参考にNVIDIA SDK Managerをインストールし、開発環境をセットアップしてみました。

https://developer.nvidia.com/nvidia-sdk-manager
https://docs.nvidia.com/sdk-manager/install-with-sdkm-jetson/index.html

以下は、作業した画面イメージです。

SDK-Manager-step1

SDK-Manager-step2

SDK-Manager-step3

SDK-Manager-step4

3.カメラの接続

現在チャットなどで使用しているUSB-Webカメラが使えないかと思い、試しにJETSON NANOに接続して確認してみた所、何と認識してくれました。(笑)

・BUFFALO BSWHD06Mシリーズ

USB-Webカメラ接続

4.リモートデスクトップ接続の設定

JETSON NANO本体にディスプレイやキーボード・マウスを繋げて、というのはスペース問題もあるので、Windows PCからリモートデスクトップ接続できる環境を構築しました。

以下の手順で、とりあえずはできました。

# sudo apt-get update
# sudo apt-get -y upgrade
# sudo apt-get -y install ubuntu-desktop xrdp
# sudo systemctl enable xrdp
# sudo systemctl start xrdp
# sudo reboot

※でも動作がちょっと遅いです・・・VNCの方がいいのかな?

次回は、画像認識にチャレンジです。

JETSON NANO, 組込

年明けの1月15日~16日、「JETSON NANO」を1台手に入れたので、早速遊んでみる事にしました。
まずは、セットアップから起動までを試してみました。

1.事前準備

①JETSON NANO:
手に入れたもの

②microSDカード:
microSDXC 128GB SanDisk サンディスク
Extreme UHS-1 U3 V30 4K Ultra HD A2対応
SDアダプター付 [並行輸入品]

51dSMyaGedL._SY90_

③ACアダプター:
SUCCUL ACアダプター 5V 4A 大手メーカーOEM社製品 センタープラス スイッチング式
最大出力20W 出力プラグ外径5.5mm(内径2.1mm)PSE取得品

41FqZ-NCSEL._SY90_

④ジャンパーピン:
Bullet ジャンパーピン(小) 取手付き JP04
※ACアダプターを使用する場合、基板のJ68にジャンパーピンを挿してあげる必要があります。

41REeIwtjoL._SX90_

⑤USB Wifiドングル:
Buffalo WLI-UC-G301N
※昔Wifiハッキングで使用していたもの(笑)
※今後NVIDIA SDK Mangerを使用する事を考慮しSSH接続させる為、必要としました。
※microSDにインストールしたアーキテクチャはarm64で、SDK Managerはamd64で動作する為。

②~⑤は自分で手配・購入しました。

以下は、今回の接続イメージです。

jetson-nano-接続状態

2.セットアップ

下記URLを参考にmicroSDへのOSイメージの書き込みを実施しました。

https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write

3.起動

以下は、OSが起動されログインした直後の画面です。

jetson-nano-ログイン直後

※初回時OSが起動された際にはちょっとした設定手順があります。

取りあえずは成功!といった所でしょうか。

4.Wifi接続の設定

起動後にいちいちコマンド実行してWifi接続するのは面倒ですので、OS起動時に自動接続させるように起動スクリプトを作成しました。

/etc/rc.localファイルにその内容を記載し作成しました。

以下は、その内容です。

————————————————————————–
#!/bin/sh -e

nmcli device wifi list
nmcli device wifi connect <ここは接続先のSSID> password <ここはパスワード>

exit 0
—————————————————————————

セットアップしたUbuntu 18.04.3 LTSでは、rc-local.serviceが既に自動起動されるように設定されているので、/etc/rc.localファイルを作成するだけでOKでした。

以下コマンドでOSを再起動し、Wifi自動接続される事を確認しました。

# shutdown -r now

5.SSH接続の設定

セットアップしたUbuntu 18.04.3 LTSでは、SSHが既に自動起動されるように設定されているので、特に何もしなくてもOKでした。

ホストPCからJETSON NANOのIPアドレスへSSH接続し、無事接続される事を確認しました。

次回はホストPCにVMwareでUtbuntuをインストール、そこにVIDIA SDK Managerをインストールし、JETSON NANOとの開発連携をしてみようと思います。

PAGE TOP