Python で OpenCV
前回 c のサンプルが動いて楽しかった OpenCV。一緒に Python のサンプルも付いてるからそっちも動かしてみようと思ったのだけど…
debian:~/myTest/opencv-1.0.0/samples/python paraches$ python lkdemo.py OpenCV Python version of lkdemo Traceback (most recent call last): File "lkdemo.py", line 8, in ? from opencv import cv ImportError: No module named opencv debian:~/myTest/opencv-1.0.0/samples/python paraches$
へ? opencvってモジュールが無いって? OpenCV インストールして一緒にインストールされたサンプルなのに…。なんでだろう?っていうか Python の事なにも知らないんだよな…。触った事ないし。
で、Python ちょっと調べてみた。モジュールの置き場所ってのがあるのね。後は PYTHONPATH で設定することもできるのね。
debian:~/myTest/opencv-1.0.0/samples/python paraches$ python Python 2.3.5 (#1, Jan 13 2006, 20:13:11) [GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', '/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python23.zip', '/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3', '/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.3/Extras/lib/python'] >>>
んじゃ次は opencv のモジュールだけど、どこにあるの…?
インストールしたときに /opt/local/lib とか設定したから /opt/local/lib にある???
debian:~/myTest/opencv-1.0.0/samples/python paraches$ ls /opt/local/lib apr.exp libogg.la aprutil.exp libpanel.5.dylib <省略> libogg.dylib terminfo debian:~/myTest/opencv-1.0.0/samples/python paraches$
無いし…。
OpenCV の INSTALL 見てもわからんな〜。./configure --help に何かないかな?
Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX]
ん〜これかな? /usr/local に入ってる?
debian:~/myTest/opencv-1.0.0/samples/python paraches$ ls /usr/local/lib libcv.1.0.0.dylib libcvhaartraining.a libhighgui.la libcv.1.dylib libcxcore.1.0.0.dylib libml.1.0.0.dylib libcv.dylib libcxcore.1.dylib libml.1.dylib libcv.la libcxcore.dylib libml.dylib libcvaux.1.0.0.dylib libcxcore.la libml.la libcvaux.1.dylib libhighgui.1.0.0.dylib pkgconfig libcvaux.dylib libhighgui.1.dylib python2.3 libcvaux.la libhighgui.dylib debian:~/myTest/opencv-1.0.0/samples/python paraches$
を! ここに OpenCV のライブラリがあるのね。で、python2.3 なんてフォルダもあるし!中にモジュールがあるってこと?
debian:~/myTest/opencv-1.0.0/samples/python paraches$ ls /usr/local/lib/python2.3/ site-packages debian:~/myTest/opencv-1.0.0/samples/python paraches$ ls /usr/local/lib/python2.3/site-packages/ opencv debian:~/myTest/opencv-1.0.0/samples/python paraches$ ls /usr/local/lib/python2.3/site-packages/opencv/ __init__.py adaptors.py highgui.pyc __init__.pyc adaptors.pyc highgui.pyo __init__.pyo adaptors.pyo matlab_syntax.py _cv.la cv.py matlab_syntax.pyc _cv.so cv.pyc matlab_syntax.pyo _highgui.la cv.pyo _highgui.so highgui.py debian:~/myTest/opencv-1.0.0/samples/python paraches$
なるほど〜そんな感じで入ってるのね。
じゃ、どこをモジュールの場所として指定すれば良いの?さっきの sys.path の真似して /usr/local/lib/python2.3/site-packages で良いのか?
debian:~/myTest/opencv-1.0.0/samples/python paraches$ PYTHONPATH=/usr/local/lib/python2.3/site-packages/ debian:~/myTest/opencv-1.0.0/samples/python paraches$ echo $PYTHONPATH /usr/local/lib/python2.3/site-packages/ debian:~/myTest/opencv-1.0.0/samples/python paraches$ export PYTHONPATH
で、PYTHONPATH を設定して、サンプルを起動してみる…
debian:~/myTest/opencv-1.0.0/samples/python paraches$ python lkdemo.py OpenCV Python version of lkdemo Hot keys: ESC - quit the program r - auto-initialize tracking c - delete all the points n - switch the "night" mode on/off To add/remove a feature point click it debian:~/myTest/opencv-1.0.0/samples/python paraches$
できた! ちゃんと Python でも動いた〜!
モジュール云々でここまで凄い時間かかった…。Python のモジュールの場所が MacOS X は特別なの? /System/Library の Frameworks の下になってるし。ま、今回はとりあえず動かせたから良しとしよう!