1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Manjaro-KDE+Python3.x+OpenCV4.1.x+wxPython4.0.x+USBWebcamの環境構築例

Last updated at Posted at 2019-11-26

# 無 保 証 で す
当方執筆の技術情報に関するライセンス、免責事項、禁止事項

#総合もくじ
Python3.7.x+OpenCV4.1.x+wxPython4.0.x+USBWebcamのクロスプラットフォームな環境構築事例集

想定する運用スタイル

  • OpenCV を利用する GUI アプリケーションを wxPython により構築する。
  • Webcam を USB 接続し OpenCV から利用する。
  • Python 向けパッケージは pip + venv で管理する。
  • 異なるプラットフォームにおける作業手順を出来るだけ統一化する。1

※ インストール済みの Python パッケージ全てのアップグレードについては以下を参照下さい。
How to upgrade all Python packages with pip? - Stack Overflow

環境構築スクリプト記述例

Manjaro 向け環境構築スクリプト
#!/bin/sh
# variables
VENV_DIR="$HOME/testenv"
WXPYTHON_VERSION="4.0.6"

# install basic build dependencies
cd || exit 1
echo "Enter your password"
sudo pacman -Syyu
sudo pacman -Syu cmake || exit 2

# activate python3's virtual environment
test -d $VENV_DIR || mkdir $VENV_DIR
cd $VENV_DIR || exit 3
test -d $VENV_DIR/py3env || python3 -m venv ./py3env
. ./py3env/bin/activate || exit 4
pip install --upgrade pip setuptools || exit 5

# install opencv-python and wxPython
test -f $VENV_DIR/requirements.txt && rm "$VENV_DIR/requirements.txt"
test -d $VENV_DIR/requirements && rm -r "$VENV_DIR/requirements"
mkdir $VENV_DIR/requirements
cd $VENV_DIR/requirements || exit 6
curl -LO https://raw.githubusercontent.com/wxWidgets/Phoenix/wxPython-$WXPYTHON_VERSION/requirements/devel.txt || exit 7
curl -LO https://raw.githubusercontent.com/wxWidgets/Phoenix/wxPython-$WXPYTHON_VERSION/requirements/install.txt || exit 8
cd $VENV_DIR || exit 9
curl -LO https://raw.githubusercontent.com/wxWidgets/Phoenix/wxPython-$WXPYTHON_VERSION/requirements.txt || exit 10
pip install -r requirements.txt || exit 11
pip install opencv-python wxPython==$WXPYTHON_VERSION || exit 12
rm "requirements.txt"
rm -r "requirements"

# deactivate python3's virtual environment
deactivate
cd || exit 13
exit 0

※ 終了ステータスの使い方が少し変則的かもしれません。

事前準備:適切なミラーの選択

sudo pacman-mirrors --fasttrack && sudo pacman -Syyu

参考とした文献

Pacman-mirrorsコマンドによるミラーサーバーリストの更新 - Manjaro Linux
Pacman-mirrors - Manjaro Linux

事前準備(コンパイルでつまづく場合):base 及び base-devel の導入

sudo pacman -S base base-devel

参考とした文献

Arch User Repository - ArchWiki
Pacman Overview - Manjaro Linux
Arch Linux の pacman コマンドを使うことのメモ | Jenemal Notes

事前準備:cmake の導入

sudo pacman -S cmake

事前準備:Python3 の環境構築

pip の導入(pip 未導入の場合)

sudo pacman -S python-pip

venv による仮想環境の構築

cd || exit
test -d $HOME/testenv || mkdir $HOME/testenv
cd $HOME/testenv || exit
python3 -m venv ./py3env
. ./py3env/bin/activate
pip install --upgrade pip setuptools
deactivate

direnv を用いることで、対象ディレクトリに移動するだけで仮想環境が開始されるよう設定出来るそうです。

BuildWxPythonOnRaspberryPi - wxPyWiki より引用

If your lazy like most programmers. Check out https://direnv.net/ and https://github.com/direnv/direnv/wiki/Python with some fussing the virtenv will load automagically when you enter a directory.

参考とした文献

仮想環境 - python.jp
https://www.python.jp/install/centos/virtualenv.html

venv --- 仮想環境の作成 — Python 3.7.4 ドキュメント
https://docs.python.org/ja/3/library/venv.html

opencv-python と wxPython の導入:pip を利用する場合

OpenCV 4.1.x のインストール

cd $HOME/testenv || exit
. ./py3env/bin/activate || exit
pip install opencv-python
pip show opencv-python
deactivate
cd || exit

wxPython(4.0.6)のインストール

cd $HOME/testenv || exit
. ./py3env/bin/activate || exit
WXPYTHON_VERSION=4.0.6
test -d Downloads || mkdir Downloads
cd Downloads || exit
test -d wxPython-$WXPYTHON_VERSION-requirements && rm -r "wxPython-$WXPYTHON_VERSION-requirements"
mkdir wxPython-$WXPYTHON_VERSION-requirements
cd  wxPython-$WXPYTHON_VERSION-requirements || exit
curl -LO https://raw.githubusercontent.com/wxWidgets/Phoenix/wxPython-$WXPYTHON_VERSION/requirements.txt
mkdir requirements
cd requirements || exit
curl -LO https://raw.githubusercontent.com/wxWidgets/Phoenix/wxPython-$WXPYTHON_VERSION/requirements/devel.txt
curl -LO https://raw.githubusercontent.com/wxWidgets/Phoenix/wxPython-$WXPYTHON_VERSION/requirements/install.txt
cd ../
pip install -r requirements.txt
pip install wxPython==$WXPYTHON_VERSION
pip show wxPython
unset WXPYTHON_VERSION
deactivate
cd || exit

opencv-python と wxPython の導入:ソースコードからビルド&インストールする場合

OpenCV 4.1.1 のビルド&インストール

OpenCV をソースコードからビルドする利点と問題点

  • 利点:
  • 最新版を手軽に試すことが出来る。
  • ビルドオプションを細かく指定してのビルド&インストールが可能である。
  • Qt のバージョンが揃うので UI のアイコン表示等が崩れない。
  • 問題点:
    • pip list に現れない。

ビルド&インストール

venv 仮想環境への OpenCV 4.1.1 の構築
cd $HOME/testenv || exit
. ./py3env/bin/activate || exit # 仮想環境を開始する
OPENCV_VERSION=4.1.1
pip uninstall opencv-python # pipから導入した opencv-python があれば削除しておく
pip install numpy # opencv-python が構築時、及び導入時に依存する numpy をインストールする
test -d Downloads || mkdir Downloads
cd Downloads || exit
curl -LO https://github.com/opencv/opencv/archive/$OPENCV_VERSION.tar.gz # GitHub から OpenCV のソースコードをダウンロードする
tar zxf $OPENCV_VERSION.tar.gz
cd opencv-$OPENCV_VERSION || exit
mkdir build && cd build || exit
cmake -D CMAKE_BUILD_TYPE=Release -D WITH_QT=YES -D CMAKE_INSTALL_PREFIX=$HOME/testenv/py3env/ ..
make -j$(nproc)
make install # ホームディレクトリ内、仮想環境内部にインストールするのでスーパーユーザー権限は必要ない
python3 -c "import cv2; print(cv2.__version__)" # 導入した opencv-python のバージョンを確認する
python3 -c "import cv2; print(cv2.getBuildInformation())" # 導入した opencv のビルドオプションを確認する
python3 $HOME/testenv/Downloads/opencv-$OPENCV_VERSION/samples/python/video.py # Webcam からの映像を確認、ESC キーでサンプルプログラムは終了する
unset OPENCV_VERSION
deactivate # 仮想環境を終了する
cd || exit

※ マルチコアCPUなら例えばmake -j$(nproc)make -j$(grep processor /proc/cpuinfo | wc -l)などとオプションをわたすことで構築時間を短縮出来ます 2 3 4

###参考とした文献
OpenCV: Installation in Linux
https://docs.opencv.org/4.1.1/d7/d9f/tutorial_linux_install.html

OpenCVのビルド情報を確認するgetBuildInformation() | note.nkmk.me
https://note.nkmk.me/python-opencv-getbuildinformation/

Python Tips:ワンライナーが書きたい - Life with Python
https://www.lifewithpython.com/2015/01/python-use-command-one-liner.html

wxPython 4.0.6 のビルド&インストール

wxPython をソースコードからビルドする利点と問題点

  • 利点:
  • ビルドオプションを柔軟に指定出来る。
  • システムに既に wxWidgets が導入済みであれば build.py のオプションで --use_syswx を指定することでそちらを利用出来る。
  • 問題点:
  • python3 build.py clean を行う際に誤って python3 build.py cleanall とすると sip 配下のファイルやフォルダが一掃されてしまう。

ビルド&インストール

venv 仮想環境への wxPython 4.0.6 の構築
cd $HOME/testenv || exit
. ./py3env/bin/activate || exit # 仮想環境を開始する
WXPYTHON_VERSION=4.0.6
pip uninstall wxPython # pipから導入した wxPython があれば削除しておく
test -d Downloads || mkdir Downloads
cd Downloads || exit
pip download wxPython==$WXPYTHON_VERSION --no-deps --no-binary :all: # PyPI から wxPython のソースコードをダウンロードする
tar zxf wxPython-$WXPYTHON_VERSION.tar.gz
cd wxPython-$WXPYTHON_VERSION || exit
pip install -r requirements.txt # 構築時依存及び導入時依存 python パッケージのインストールを行う
python3 build.py build bdist_wheel --release --jobs=$(nproc) # wxPython のビルドを行う
pip install dist/wxPython-$WXPYTHON_VERSION-*.whl #wxPython のインストールを行う
pip show wxPython # インストールされた wxPython パッケージの情報を表示する
python3 $HOME/testenv/Downloads/wxPython-$WXPYTHON_VERSION/demo/demo.py # wxPython のデモを実行する
unset WXPYTHON_VERSION
deactivate # 仮想環境を終了する
cd || exit

※ マルチコアCPUなら例えば--jobs=$(nproc)--jobs=$(grep processor /proc/cpuinfo | wc -l)などと build.py にオプションをわたすことで構築時間を短縮出来ます 2 3 4

参考とした文献

How to install wxPython - wxPyWiki
https://wiki.wxpython.org/How%20to%20install%20wxPython

BuildWxPythonOnRaspberryPi - wxPyWiki
https://wiki.wxpython.org/BuildWxPythonOnRaspberryPi

Cannot build Phoenix from github master - wxpython-dev@lists.wxwidgets.org
https://wxpython-dev.wxwidgets.narkive.com/Sdn1NNA8/cannot-build-phoenix-from-github-master

  1. 構築予定の環境の構成によっては Ansible 等も有用と思われる。

  2. bash - How to obtain the number of CPUs/cores in Linux from the command line? - Stack Overflow 2

  3. Man page of NPROC - JM Project 2

  4. 物理 CPU、CPU コア、および論理 CPU の数を確認する - Red Hat Customer Portal 2

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?