【Python】dockerでサクッと画像処理環境を整える

はじめに

実験で機器の数値を目視で読み取る作業が面倒!
特に5秒おきで読み取るなんて作業は苦痛でしかない
というか数値をデジタル出力できない計測機器ってどうなんだ?

まぁお金の話もあるし機器の話は置いといて、Pythonで画像解析したらいいと思うので、まずは画像解析の環境を整えよう。

カメラ入力、画面出力などは別途設定が必要なので、その設定も行う。

概要

  • Pythonの画像解析ライブラリOpenCVを動かすdocker環境の構築
  • デフォルトではdocker紐付くディスプレイがないので、ホストマシンのディスプレイと繋げる。

実行環境

ホストPC: Mac
docker-composeでjupyter(Pythonが動くところ)を構築し、そこで画像解析する

ホストマシン(Mac)の設定

  1. Mac用X11インストール

    $ brew cask install xquartz

    できたら再起動しよう。
    しないと次でxhost: command not foundになる。

  2. ディスプレイを外からアクセス可能にする

    $ xhost +
    ...
    access control disabled, clients can connect from any host

    ※作業が終わったら無効にするのが良い

    $ xhost -
  3. コンテナからのアクセスを待ち受ける

    $ brew install socat
    $ socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"

    実行後は待ち受け状態になるので、別ターミナルに切り替える

実行環境(Docker)の設定

dockerfile

  1. opencv-pythonの依存関係にある外部ライブラリをインストール
    RUN apt-get update && \
    apt-get install -y libopencv-dev
  2. opencv-pythonのインストール
    RUN set -x && \
    pip install -U pip && \
    pip install opencv-python

docker-compose

  1. ホストPCのX11の認証情報をコンテナのボリュームにマウントする

    volumes:
      - $HOME/.Xauthority/:/root/.Xauthority
      - /tmp/.X11-unix/:/tmp/.X11-unix
  2. ホストPCのIPを環境変数で渡す
    ※localhost・127.0.0.1ではダメです。
    Macのネットワーク環境設定からIPを読み取ってください
    最後の:0を忘れずに!

    environment:
      - DISPLAY=192.168.0.18:0

全体のdocker関連のコード

※jupyter_notebookの設定も入ってます

コメント

タイトルとURLをコピーしました