PythonでWebカメラ画像の表示(Dockerコンテナ起動し、Terminalから実行)

解説

Dockerコンテナを起動し、起動したコンテナ上にいるTerminalからPythonプログラムを実行するときの、Webカメラ画像を表示する方法についてまとめます。
(JupyterLabサーバーをDockerコンテナを起動することで起動し、JupyterLab上のPythonプログラミングにおいて、Webカメラ画像を表示する方法は、「PythonでWebカメラ画像の表示(Dockerコンテナ起動し、JupyterLabから実行)」にあります。)

画像ファイルを表示する方法は様々ありますが、以下の方法についてまとめます。

機械学習開発用のコンテナの起動

Dockerコンテナを実行してJupyterLabにアクセス」に従い、コンテナ起動スクリプトファイルを作成します。

「コンテナ上にいるTerminalから画像表示用のウィンドウを表示」できるようにするために、スクリプトファイルのコンテナ起動コマンドのオプションに以下を追加します。



Webカメラにアクセスできるようにするために、スクリプトファイルのコンテナ起動コマンドのオプションに以下を追加します。



コンテナ起動スクリプトファイルの内容としては以下のようにします。


Jetson に Webカメラを接続します。

「コンテナ上にいるTerminalから画像表示用のウィンドウを表示」できるようにするために、コンテナを起動する前に以下のコマンドを実行します。(ローカルホストからのXサーバーへのアクセスを許可します。)



以下のコマンドを実行し、「L4T ML」コンテナを起動します。



以降の操作は、起動したコンテナ上にいるTerminalで行ないます。

備考1)
コンテナ起動コマンドのオプションに「--env DISPLAY=$DISPLAY」を追加しなかった場合、もしくは、コンテナ起動前に、「xhost +local:」を実行しなかった場合は、コンテナ上にいるTerminalからPythonプログラムを実行した際に、以下のようなメッセージが表示され、画像表示用のウィンドウが表示されません。


備考2)
「--device /dev/video0」を指定し、Webカメラを接続せずに、コンテナを起動すると、以下のようなエラーメッセージが表示され、コンテナ起動に失敗します。

OpenCVを用いて画像ファイルを読み込み、画像表示をする方法

1フレームのカメラ画像を取得し表示

showcameraimage_cv2.py


以下のコマンドを実行し、プログラムを実行します。


実行結果例


Webカメラからのフレームの取得結果のframeオブジェクトのデータ型は、
numpy.ndarray
でした。(「print(type(frame))」にて確認)

カメラ画像を断続的に取得し表示

showcameravideo_cv2.py


以下のコマンドを実行し、プログラムを実行します。


「Esc」キーを押下するか、画像表示用ウィンドウを閉じると、プログラムは終了します。

コンテナの終了

コンテナを終了するには、起動したコンテナ上にいるTerminalで「exit」と入力します。

コンテナを終了したら以下のコマンドを実行します。(ローカルホストからのXサーバーへのアクセス許可を解除します。)