Pythonで画像ファイルの表示(Dockerコンテナ起動し、Terminalから実行)
解説
Dockerコンテナを起動し、起動したコンテナ上にいるTerminalからPythonプログラムを実行するときの、画像ファイルを表示する方法についてまとめます。
(JupyterLabサーバーをDockerコンテナを起動することで起動し、JupyterLab上のPythonプログラミングにおいて、画像ファイルを表示する方法は、「Pythonで画像ファイルの表示(Dockerコンテナ起動し、JupyterLabから実行)」にあります。)
画像ファイルを表示する方法は様々ありますが、以下の方法についてまとめます。
- OpenCVを用いて画像ファイルを読み込み、画像表示をする方法
機械学習開発用のコンテナの起動
「Dockerコンテナを実行してJupyterLabにアクセス」に従い、コンテナ起動スクリプトファイルを作成します。
「コンテナ上にいるTerminalから画像表示用のウィンドウを表示」できるようにするために、スクリプトファイルのコンテナ起動コマンドのオプションに以下を追加します。
コンテナ起動スクリプトファイルの内容としては以下のようにします。
「コンテナ上にいるTerminalから画像表示用のウィンドウを表示」できるようにするために、コンテナを起動する前に以下のコマンドを実行します。(ローカルホストからのXサーバーへのアクセスを許可します。)
以下のコマンドを実行し、「L4T ML」コンテナを起動します。
以降の操作は、起動したコンテナ上にいるTerminalで行ないます。
備考)
コンテナ起動コマンドのオプションに「--env DISPLAY=$DISPLAY」を追加しなかった場合、もしくは、コンテナ起動前に、「xhost +local:」を実行しなかった場合は、コンテナ上にいるTerminalからPythonプログラムを実行した際に、以下のようなメッセージが表示され、画像表示用のウィンドウが表示されません。
OpenCVを用いて画像ファイルを読み込み、画像表示をする方法
showimage_cv2.py
以下のコマンドを実行し、プログラムを実行します。
実行結果例
画像ファイルの読み込み結果のimageオブジェクトのデータ型は、
numpy.ndarray
でした。(「print(type(arrayImage))」にて確認)
画像ファイルの読み込み結果のimageオブジェクトのNumPy配列の形状は、
(256, 256, 3)
でした。(256x256の画像を読み込んだ場合)(「print(arrayImage.shape)」にて確認)
コンテナの終了
コンテナを終了するには、起動したコンテナ上にいるTerminalで「exit」と入力します。
コンテナを終了したら以下のコマンドを実行します。(ローカルホストからのXサーバーへのアクセス許可を解除します。)
参考ウェブサイト
- Unable to display images using Open CV when using docker container - Jetson & Embedded Systems / Jetson AGX Xavier - NVIDIA Developer Forums
- DockerでGUIアプリケーションを開く基本的な押さえどころ
- DockerでGUIを表示するときの仕組みについて - Qiita