pyenv環境へOpenCVをインストールする
pyenvで作ったpython環境へ最新のOpenCVをビルドしてインストールする手順のメモです.
- 0. 前提環境
- 1. ソースコードのダウンロード
- 2. numpyをインストールする
- 3. OpenCVモジュールのビルドとインストール
- 4. python環境からOpenCVが使えるようにする
- 5. ロードされることを確認
- 参考サイト
0. 前提環境
- Ubuntu 18.04
- 開発用パッケージ(build-essential, cmake)インストール済み.
1. ソースコードのダウンロード
まず下記からOpenCVのソースコードをDLする.
https://opencv.org/releases.html
続いて、OpenCVのContribのソースコードをダウンロードする.
ここでは、OpenCV本体のバージョンに対応すたバージョンをダウンロードするように注意.
https://github.com/opencv/opencv_contrib/releases
ダウンロードしたら、適当なディレクトリに以下のように展開しておく.
. ├── build/ # ビルド作業ディレクトリ ├── opencv-3.4.1/ # OpenCVのソース └── opencv_contrib-3.4.1/ # OpenCV-contribのソース
2. numpyをインストールする
python用OpenCVモジュールのビルドの際にnumpyモジュールのヘッダが必要になるので、pipでnumpyをインストールしておく.
pyenvの環境へnumpyをインストールすると、依存ライブラリ開発用のC言語用ヘッダファイルもインストールされる.
numpyのインストール
# python環境を切り替える $ pyenv global [インストールしたいpython環境] # pipでnumpyをインストール $ pip install numpy
pipでpython環境へnumpyがインストールされると、一緒にC言語用のヘッダファイルもデプロイされている.
numpyのインストール先
# python 3.6.5の場合. # pyenvのディレクトリがHOME直下にある場合は下記場所にインストールされるはず. ${HOME}/.pyenv/versions/3.6.5/lib/python3.6/site-packages/numpy/
3. OpenCVモジュールのビルドとインストール
ビルド作業ディレクトリ(build)に移動し、cmakeを実行する.
cmakeではpyenvにOpenCVのライブラリがデプロイされるように、インストール先などをcmakeのプロパティを使って指定する.
ここではOpenCVライブラリのインストール先をpython環境下の usr/local とした.
pyenv環境は ${HOME}/.pyenv 、インストール先のpythonバージョンとして3.6.5を想定した場合、以下のようなコマンドになる.
とにかく設定パラメータが多いので注意.
buildディレクトリでcmakeを実行
# buildへ移動 $ cd build # cmakeでMakefile生成 $ cmake ${PWD}/../opencv-3.4.1 \ # <--- buildディレクトリからopencvのディレクトリを参照してます -DCMAKE_BUILD_TYPE=RELEASE \ -DCMAKE_INSTALL_PREFIX=${HOME}/.pyenv/versions/3.6.5/usr/local/ \ # <--- make install先ディレクトリ -DINSTALL_C_EXAMPLES=OFF \ -DBUILD_NEW_PYTHON_SUPPORT=ON \ -DBUILD_opencv_python3=ON \ -DBUILD_opencv_legacy=OFF \ -DINSTALL_PYTHON_EXAMPLES=ON \ -DBUILD_EXAMPLES=ON \ -DPYTHON_EXECUTABLE=${HOME}/.pyenv/versions/3.6.5/bin/python \ -DPYTHON_LIBRARY=${HOME}/.pyenv/versions/3.6.5/lib/libpython3.6m.a \ -DPYTHON_INCLUDE_DIR=${HOME}/.pyenv/versions/3.6.5/include/python3.6m \ -DPYTHON_INCLUDE_DIRS=${HOME}/.pyenv/versions/3.6.5/include/python3.6m \ -DPYTHON_INCLUDE_DIRS2=${HOME}/.pyenv/versions/3.6.5/include/python3.6m \ -DINCLUDE_DIRS=${HOME}/.pyenv/versions/3.6.5/include/python3.6m \ -DINCLUDE_DIRS2=${HOME}/.pyenv/versions/3.6.5/include/python3.6m \ -DPYTHON_PACKAGES_PATH=${HOME}/.pyenv/versions/3.6.5/lib/python3.6/site-packages \ -DPYTHON_NUMPY_INCLUDE_DIR=${HOME}/.pyenv/versions/3.6.5/lib/python3.6/site-packages/numpy/core/include \ -DOPENCV_EXTRA_MODULES_PATH=${PWD}/../opencv_contrib-3.4.1/modules
cmakeが無事完了したら、カレントディレクトリにMakefileが生成されているはずなので、makeを実行.
時間がかかるので並列ビルドをするとよいです.
Makeの実行
# 8スレッドで並列ビルド&インストール $ make -j8 install
ビルドとインストールが完了したら、
${HOME}/.pyenv/versions/3.6.5/usr/local/
に、ビルドされたOpenCVライブラリ一式がインストールされていることを確認.
こんな感じのツリーが作られていればOK.
.
├── bin
│ ├── opencv_annotation
│ ├── opencv_createsamples
│ ├── opencv_interactive-calibration
│ ├── opencv_traincascade
│ ├── opencv_version
│ ├── opencv_visualisation
│ └── opencv_waldboost_detector
│
├── include
│ ├── opencv
│ └── opencv2
│
├── lib
│ ├── libopencv_aruco.so -> libopencv_aruco.so.3.4
│ ├── libopencv_aruco.so.3.4 -> libopencv_aruco.so.3.4.1
│ ├── libopencv_aruco.so.3.4.1
│ ├── libopencv_bgsegm.so -> libopencv_bgsegm.so.3.4
│ ├── libopencv_bgsegm.so.3.4 -> libopencv_bgsegm.so.3.4.1
│ ├── libopencv_bgsegm.so.3.4.1
│ ├── libopencv_bioinspired.so -> libopencv_bioinspired.so.3.4
│ ├── libopencv_bioinspired.so.3.4 -> libopencv_bioinspired.so.3.4.1
│ ├── libopencv_bioinspired.so.3.4.1
: :
: : (途中省略)
: :
│ ├── pkgconfig
│ └── python3.6
│ └── site-packages
│ └── cv2.cpython-36m-xxxxx-xxxxxxx.so # python連携用ライブラリ
└── share
└── OpenCV
4. python環境からOpenCVが使えるようにする
ファイルが無事インストールされたら、pythonコードからOpenCVライブラリが認識されるように、
インストール先python環境の site-packages に
cv2.cpython-36m-xxxxx-xxxxxxx.so ライブラリへのシンボリックリンクを配置します.
site-packagesにpython連携ライブラリのリンクを配置
# 配置先ディレクトリ $ cd ${HOME}/.pyenv/versions/3.6.5/lib/python3.6/site-packages # cv2という名前でライブラリ参照できるように. $ ln -s ${HOME}/.pyenv/versions/3.6.5/usr/local/lib/python3.6/site-packages/cv2.cpython-36m-xxxxx-xxxxxxx.so cv2.so
5. ロードされることを確認
interactiveモードでopencv2のライブラリがロードされることを確認します.
$ python3 >>> import cv2 >>> cv2.__version__ '3.4.1'
無事ロードできました!
参考サイト
Install opencv3 for python 3.5.0 with pyenv on ubuntu 14.04 · GitHub