macのpython3 opencv3 でcontrib(siftとかsurf)パッケージのインストール
macのpython3 opencv3環境でcontribパッケージを導入できたのでメモ
contribとはSIFTとかSURFとか研究では割と使うけど、特許の関係とか色々あるものを
分割した機能が入っているパッケージです。
anaconda環境に入れたけどvirtualenvでも一緒だと思う
とりあえず大変だった...
でcontribなしでは入れたけど、contribは入ってないため今回はcmakeでビルドして入れようと思う
とりあえずcmakeでビルドするのはここ
Install OpenCV 3 With Python 3 (Mac OSX) - Luis González
anaconda特有の問題(フラグの指定とかdlibの位置とかは)
osx - opencv 3.0.0 alpha with Python 3 failed to import cv2 - Stack Overflow
ここを参考に
とりあえず、新しく環境を作る
conda create -n py34cv3contrib python=3.4 anaconda
cmakeでビルドするので
GUI版のcmakeを入れておく
でopencv3は
zipで落とす
contrib本体は
GitHub - Itseez/opencv_contrib: Repository for OpenCV's extra modules
からクローンするなりzipで落とすなりする。
で以下の設定をするわけだが、GUIでやるのを強くお勧めします。
まずsourceにさっき落としたopencvフォルダを
で次にdstをopencvフォルダの下にbuildとか作ってそこを指定
でcontribはさっき落としたcontribのフォルダのパスを
OPENCV_EXTRA_MODULES_PATH=/さっきのcontribpath/modules
を指定。
他の設定を(多分抜けはないと思うのですが...)
CMAKE_INSTALL_PREFIX=/Users/hogehoge/anaconda/envs/py34cv3contrib
PYTHON3_EXECUTABLE=/Users/hogehoge/anaconda/envs/py34cv3contrib/bin/python3
PYTHON3_LIBRARY=/Users/admin/anaconda/envs/py34cv3contrib/lib/libpython3.4m.dylib
PYTHON3_INCLUDE_DIR=/Users/hogehoge/anaconda/envs/py34cv3contrib/include/python3.4m
PYTHON3_NUMPY_INCLUDE_DIRS=/Users/hogehoge/anaconda/envs/py34cv3contrib/lib/python3.4/site-packages/numpy/core/include
PYTHON3_PACKAGES_PATH=/Users/hogehoge/anaconda/envs/py34cv3contrib/lib/python3.4/site-packages
そしたら、generateとconfigureを押して完了したら
ターミナルでbuildフォルダに移動して
make -j4
終わったら
sudo make install
でpy34cv3contribの環境にがバーッとインスコされます。
あともう少し
最後に、cv2.soが参照するdylibの位置を教えてあげる必要があります。
自分が怒られたのはこの二つだけでした。
hogehogeは自分のユーザ名に変更してください
sudo install_name_tool -change libpython3.4m.dylib /Users/hogehoge/anaconda/envs/py34cv3contrib/lib/libpython3.4m.dylib /Users/hogehoge/anaconda/envs/py34cv3contrib/lib/python3.4/site-packages/cv2.so
sudo install_name_tool -change lib/libopencv_hdf.3.1.dylib /Users/hogehoge/anaconda/envs/py34cv3contrib/lib/libopencv_hdf.3.1.dylib /Users/hogehoge/anaconda/envs/py34cv3contrib/lib/python3.4/site-packages/cv2.so
done
これで、完了。お疲れさまです。
試しに、lennaさんを落としてきて、下のを実行してみてください。
import cv2
import numpy as np
from matplotlib import pyplot as plt
imgOrg = cv2.imread( './lenna.png' )
imgGray = cv2.cvtColor( imgOrg, cv2.COLOR_BGR2GRAY )
sift = cv2.xfeatures2d.SIFT_create( nfeatures = 0, nOctaveLayers = 3, contrastThreshold = 0.04, edgeThreshold = 10, sigma = 1.6 )
keypoints, descriptors = sift.detectAndCompute( imgGray, None )
imgDst = np.empty_like( imgOrg )
cv2.drawKeypoints( imgOrg, keypoints, imgDst, -1, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS )
cv2.imshow( 'hoge', imgDst )
cv2.waitKey( 0 )
cv2.destroyAllWindows()
こんな感じで特徴点が表示されればOKです。
ついにmac python3, opencv3でSIFTを使えるようになりました!!
誰かcontrib付きpipで入れられるようにしてくんねーかな