pyenvで作ったpython環境へ最新のOpenCVをビルドしてインストールする手順のメモです.
0. 前提環境
- Ubuntu 18.04
- 開発用パッケージ(build-essential, cmake)インストール済み.
まず下記から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のインストール
$ pyenv global [インストールしたいpython環境]
$ pip install numpy
pipでpython環境へnumpyがインストールされると、一緒にC言語用のヘッダファイルもデプロイされている.
numpyのインストール先
${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を実行
$ cd build
$ cmake ${PWD}/../opencv-3.4.1 \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=${HOME}/.pyenv/versions/3.6.5/usr/local/ \
-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の実行
$ 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
ファイルが無事インストールされたら、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
$ 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