概要
この記事ではJetson TX2でDeepStream SDKのサンプルアプリを動かす手順を紹介しています。
DeepStream SDKを使用することで、Jetsonでの映像処理やディープラーニングの推論処理を高速に処理できるようになります。
今回動かすサンプルアプリは、USBカメラの映像を入力にして物体検出(PersonやCarなどを検出)を行う内容になります。
環境情報
Jetpack 4.3
Jetson TX2
カメラ:LOGICOOL HD PRO WEBCAM C920
Jetpack導入
TX2へのJetpackの導入は、NVIDIA SDK MANAGERを使って実施します。
手順については以下の記事を参考にしてください。
https://dev.classmethod.jp/hardware/jetson-setup-jetpack-with-sdkmanager/
https://qiita.com/harmegiddo/items/eb0e4796221b19f28d93
ただし、今回DeepStream SDKを使用するので、以下の画面でDeepStreamにチェックを入れます。
jetson-stats導入
リソース使用量が見たくなるのでjetson-statsを入れておきます。
# pipをインストール
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python3 get-pip.py
# jetson-statsをインストール
$ sudo -H pip3 install jetson-stats
# 実行してみる
$ jtop
jtopを起動すると以下のような画面でCPUやGPUの使用量を確認できます。
v4l-utilsをインストール
USBのカメラを使うのでv4l-utilsをインストールしておきます。
$ sudo apt-get install v4l-utils
カメラの確認
v4l-utilsでTX2に接続されているカメラを確認します。
/dev/video1にUSBカメラがついているのが確認できます。
$ v4l2-ctl --list-devices
vi-output, ov5693 2-0036 (platform:15700000.vi:2):
/dev/video0
HD Pro Webcam C920 (usb-3530000.xhci-2.2):
/dev/video1
サンプルアプリ実行
サンプルコードをHOMEディレクトリにコピーします。
$ mkdir ~/work
$ cp -r /opt/nvidia/deepstream/deepstream-4.0/samples/ ~/work
$ cd work
source1_usb_dec_infer_resnet_int8.txtを1箇所修正します。
$ vi samples/configs/deepstream-app/source1_usb_dec_infer_resnet_int8.txt
USBカメラは/dev/video1であることを確認しているので、
29行目camera-v4l2-dev-nodeを1に変更します。
(確認の結果USBカメラが/dev/video0であった場合には0のままにしておきます)
21 [source0]
22 enable=1
23 #Type - 1=CameraV4L2 2=URI 3=MultiURI
24 type=1
25 camera-width=1280
26 camera-height=720
27 camera-fps-n=30
28 camera-fps-d=1
29 camera-v4l2-dev-node=1 # 0から1に変更
今回使うモデルで検出できるラベルを確認します。
$ cat samples/models/Primary_Detector/labels.txt
Car
Bicycle
Person
Roadsign
プログラムを実行します。
$ deepstream-app -c samples/configs/deepstream-app/source1_usb_dec_infer_resnet_int8.txt
アプリを実行しているターミナルには以下のような出力があり、24FPSぐらいで処理できていることがわかります。
**PERF: 26.12 (26.12)
**PERF: 24.00 (25.02)
**PERF: 23.99 (24.67)
**PERF: 23.99 (24.50)
**PERF: 24.02 (24.40)
**PERF: 24.00 (24.33)
**PERF: 24.00 (24.28)
**PERF: 23.99 (24.25)
**PERF: 24.02 (24.22)
**PERF: 23.99 (24.20)
**PERF: 24.00 (24.18)
**PERF: 24.00 (24.17)
**PERF: 24.00 (24.15)
アプリを動かしている時のjtopの様子も以下のような感じで、GPUが有効に使用されているのが確認できます。
まとめ
DeepStream SDKを使うことで、USBカメラの映像から高速に物体検出できることが確認できました。
また、今回動かしたリファレンスアプリ(deepstream-app)はConfigの変更で他にも色々できそうなので、今後試してみたいと思います。