読者です 読者をやめる 読者になる 読者になる

EnsekiTT Blog

EnsekiTTが書くブログです。

macOS Sierra + PyEnv環境でimport cv2するまでの長い長い道のり 〜2016年12月の場合〜

OpenCV3.2のニュースを見かけて、そういえば最近画像処理してないな!と思い立った。
本当であればさくっと環境を整えて、Lennaと戯れるつもりだった。
f:id:ensekitt:20161228020326j:plain
Lennaについて: The Rest of the Lenna Story

そこからimport cv2するまでの長い長い道のりの記録。

なにしようとしたの?

macOS Sierra上のpyenv-virtualenv環境でimport cv2しようとした。

何に困ったの?

brewOpenCVを入れるところ
pyenv-virtualenvでimportできるようにするところ

環境

macOS Sierra 10.12.2
pyenv 1.0.3
OpenCV 3.2(のつもりで結果的に3.2.0-dev)

やったこと

軽い気持ちでbrewOpenCVを入れようとする

$ brew tap homebrew/science
$ brew install opencv3 --with-python3 --with-ffmpeg --with-tbb --with-contrib

この時の僕はこれから2時間ググり続けるとは知らず、
「依存関係もいっぱいあるだろうしなー!なんかブログのネタになるような処理実装できるかなー」
などとのんきに構えていた。

Updating Homebrew...
==> Auto-updated Homebrew!
###ログ中略###
==> cmake .. -DCMAKE_C_FLAGS_RELEASE=-DNDEBUG -DCMAKE_CXX_FLAGS_RELEASE=-DNDEBUG -DCMAKE_INSTALL_PREFIX=/usr/local/Cellar/opencv3/3.1.0_4 -DCMAKE_BUILD_TYPE=Release -DCMAKE_FIND_FRAMEWORK=LAST -DCMAKE_VER
==> make

そしてmakeまではなんとなくうまく行っていた。

問題: QTKitがない
/tmp/opencv3-20161228-85298-1ls4do/opencv-3.1.0/modules/videoio/src/cap_qtkit.mm:46:9: fatal error: 'QTKit/QTKit.h' file not found
#import <QTKit/QTKit.h>
        ^
1 error generated.
make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_qtkit.mm.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
make: *** [all] Error 2

ああああああああああ(なんだかんだで1時間位悩んで試行錯誤してしまった)

解決編

macOS SierraではQTKitがなくなっていた。
ないものは仕方がないらしいので解決されたものを使うことに。
github.com

HEADのオプションをつけて再度実行

$ brew install opencv3 --HEAD --with-python3 --with-ffmpeg --with-tbb --with-contrib
Updating Homebrew...
==> Auto-updated Homebrew!
###ログ中略###
==> Summary
🍺  /usr/local/Cellar/opencv3/HEAD-7dd3723_4: 499 files, 67.3M, built in 22 minutes 1 second

$ brew link opencv3 --force # <= これとても忘れがちなので気をつける(10分位悩んだ)
$ python3
>>> import cv2
>>> print(cv2.__version__)
3.2.0-dev

とバージョンを確認して解決完了

# 軽い気持ちでpyenv-virtualenvで環境を用意しようとする
さっき詰まったのにここまでくれば余裕やろとpyenv virtualenv環境を用意しはじめた。

問題: 当然cv2がない
$ pyenv virtualenv 3.5.2 MyOpenCVEnv # 名前は適当に
$ mkdir opencv_test
$ cd opencv_test
$ pyenv local MyOpenCVEnv
(MyOpenCVEnv)$ python
(MyOpenCVEnv)$ import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'cv2'

あーそりゃそうだ。えっ?(1時間程度悩む)

解決編

PyEnvのsite-packagesにcv2.soを入れてあげる必要がある。

cd ~/.pyenv/versions/OpenCV/lib/python3.5/site-packages/
ln -s /usr/local/lib/python3.6/site-packages/cv2.cpython-36m-darwin.so cv2.so
cd ~/opencv_test
(MyOpenCVEnv)$ python
>>> import cv2
>>> print(cv2.__version__)
3.2.0-dev

とバージョンを確認して解決完了
Pythonのバージョンが3.5と3.6になっている点について問題があれば別途報告することとして今回は完了とした。)

ちからつきた

ホントはもっと色々やりたかった。
せっかく休みになるので明日から本気出す。