2022/02/22

Jetson上のDockerコンテナでCSIカメラを使用する

概要

NVIDIA L4T MLのDockerイメージを使用することで,JetsonでCUDAサポートがONのOpenCVの環境を比較的手軽に準備できるようになりました. そこで本投稿では,Jetson上で起動しているDockerコンテナから,Jetsonに接続されたRaspberry Pi Camera Module 2などのCSIカメラを使用する方法について紹介します.

Jetson Jetson Nano
JetPack 4.6
NVIDIA L4T ML l4t-ml:r32.6.1-py3
CSIカメラ Raspberry Pi Camera Module 2
準備
CSIカメラの接続

Jetson Nanoをシャットダウンして電源ケーブルを外した状態で,CSIカメラを確実に接続してください. インターネット上に接続方法の解説記事が数多くありますので参考にしてください.

サンプルコードの入手

サンプルコードをGitHub Gistに置きましたので,git cloneするかブラウザでダウンロードしてください.

CSIカメラの動作確認

これ以降の作業は,Jetsonにキーボード,マウスおよびディスプレイを接続して直接GUIログインしていることを前提に説明します.

Dockerコンテナ上でCSIカメラが使用できるか確認する前に,Jetson OS上で使用できるか確認しておくと良いです. 先ほどgit cloneしたディレクトリにあるPythonスクリプトを下記のとおり実行してください.CSIカメラで撮影中の映像がウィンドウに表示されます. 映像表示ウィンドウがアクティブな状態でESCキーを押下すると,ウィンドウが閉じてPythonスクリプトの実行が終了します.

なお,CSIカメラの動作確認方法はNVIDIAのチュートリアルにも紹介があります.

CSIカメラをDockerコンテナで使用する
方法

方法については,下記ページの「Run the container」に簡単な記載があります. つまり,docker runコマンドのオプションとして-v /tmp/argus_socket:/tmp/argus_socketを付加する必要があります. 一方,例えば/dev/video1としてJetson OSに認識されているUSBカメラを使用したい場合は,--device /dev/video1:/dev/video1:rwmを付加する必要があります.

See /opt/nvidia/deepstream/deepstream-6.0/README inside the container for deepstream-app usage information. Additional argument to add to above docker command for accessing CSI Camera from Docker: -v /tmp/argus_socket:/tmp/argus_socket For USB Camera additional argument --device /dev/video
Dockerコンテナの起動スクリプト例

先ほどgit cloneしたディレクトリにDockerコンテナの起動スクリプト例,run_with_csi-camera.shがあります. お好みのテキストエディタで内容を確認してください.

run_with_csi-camera.shを実行するとDockerコンテナが起動します. l4t-ml:r32.6.1-py3のDokcerイメージがローカルに存在しない場合は,初回にPullされます.

CSIカメラの動作確認

git cloneしたディレクトリはDockerコンテナ上の/dataにマウントされています. ここにあるOpenCVの簡単なサンプルコードを実行して,DockerコンテナでCSIカメラが使用できることを確認します.

opencv_csi-camera.pyはCSIカメラで撮影中の映像がウィンドウに表示されます. 映像表示ウィンドウがアクティブな状態でESCキーを押下すると,ウィンドウが閉じてPythonスクリプトの実行が終了します.

opencv_face-detection_csi-camera.pyはCSIカメラの映像から顔を検出し,顔が検出された場合は映像に顔の領域を示す白枠を描画してウィンドウに表示します. 映像表示ウィンドウがアクティブな状態でESCキーを押下すると,ウィンドウが閉じてPythonスクリプトの実行が終了します.

製品紹介

0 件のコメント:

コメントを投稿