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