PythonでWebカメラ画像の表示(Dockerコンテナ起動し、JupyterLabから実行)
解説
JupyterLabサーバーをDockerコンテナを起動することで起動し、JupyterLab上のPythonプログラミングにおいて、Webカメラ画像を表示する方法についてまとめます。
(Dockerコンテナを起動し、起動したコンテナ上にいるTerminalからPythonプログラムを実行するときの、Webカメラ画像を表示する方法は、「PythonでWebカメラ画像の表示(Dockerコンテナ起動し、Terminalから実行)」にあります。)
Webカメラ画像を表示する方法は様々ありますが、以下の方法についてまとめます。
- OpenCVを用いてカメラ画像を読み込み、IPythonを用いて画像表示をする方法
機械学習開発用のコンテナの起動
「Dockerコンテナを実行してJupyterLabにアクセス」に従い、コンテナ起動スクリプトファイルを作成します。
Webカメラにアクセスできるようにするために、スクリプトファイルのコンテナ起動コマンドのオプションに以下を追加します。
コンテナ起動スクリプトファイルの内容としては以下のようにします。
Jetson に Webカメラを接続します。
以下のコマンドを実行し、「L4T ML」コンテナを起動します。
備考)
「--device /dev/video0」を指定し、Webカメラを接続せずに、コンテナを起動すると、以下のようなエラーメッセージが表示され、コンテナ起動に失敗します。
Jupyterにアクセス
「L4T ML」コンテナを起動すると、以下のようなメッセージが表示され、JupyterLabサーバーも起動します。(IPアドレス部は、実行する
Jetson nano の環境によって異なります)
Jetson nano のデスクトップの「Chromium ウェブ・ブラウザ」アプリ、もしくは、同一ネットワーク上のPCのブラウザアプリ(ChromeやEdge)から、
http://[Jetson nano のIPアドレス]:8888
もしくは
http://[Jetson nano のホスト名]:8888
にアクセスします。
JupiterLabが表示されます。ログインします。
OpenCVを用いてカメラ画像を読み込み、IPythonを用いて画像表示をする方法
1フレームのカメラ画像を取得し表示
実行結果例
Webカメラからのフレームの取得結果のframeオブジェクトのデータ型は、
numpy.ndarray
でした。(「print(type(frame))」にて確認)
カメラ画像を断続的に取得し表示
カメラ画像の断続的な取得を中断するには、
「Jupyterメニュー > Kernel > Interrupt Kernel」
をクリックします。
コンテナの終了
コンテナを終了するには、起動したコンテナ上にいるTerminalで「exit」と入力します。
参考ウェブサイト
- Displaying real-time webcam stream in IPython at (relatively) high framerate | by Konstantin Taletskiy | Medium
- How to run Webcam Closer to Real-time Performance on Jupyter Notebook + Python 3 in 2021? | by Raymond Lo, PhD | Medium
- Jupyter notebook上でWebカメラから取得した映像をリアルタイム表示する (Python3) - Qiita