Mac OS XのProcessingでOpenCVを使おうとしてちょっと手間取ったのでメモ.
以下,インストール方法.
インストール方法
OSのバージョンは以下のとおり.
$ uname -a Darwin macserver.local 11.4.2 Darwin Kernel Version 11.4.2: Thu Aug 23 16:25:48 PDT 2012; root:xnu-1699.32.7~1/RELEASE_X86_64 x86_64
opencvはportでインストール.バージョンは2.4.5.
$ sudo port install opencv $ sudo port list | grep opencv Password: opencv @2.4.5 graphics/opencv
processingにjavacvproライブラリをインストールする.
ダウンロードは下記URLから
最新バージョンは0.5.
インストールはシンプル.
展開したファイルをprocessingのlibrariesディレクトリにコピーする.
$ wget http://www.mon-club-elec.fr/mes_downloads/javacvPro-0.5.zip $ unzip javacvPro-0.5.zip $ mv javacvPro ~/Document/Processing/libraries/ $ cd ~/Documents/Processing/libraries/
ライブラリのインストールはこれで完了だが,このままではopencvのバージョン違いによりエラーとなるので,javacvを入れ替える.
javacvライブラリ(https://code.google.com/p/javacv/)をコンパイルする.
$ wget --no-check-certificate https://javacv.googlecode.com/files/javacv-0.5-src.zip $ unzip javacv-0.5-src.zip $ cd javacv $ sudo mvn -X instal
javacvproのライブラリと入れ替える.
$ cd ~/.m2/repository/com/googlecode/javacv/javacv/0.5 $ cp javacv-0.5-macosx-x86_64.jar ~/Documents/Processing/libraries/javacvPro/library/javacv-macosx-x86_64.jar $ cp javacv-0.5.jar ~/Documents/Processing/libraries/javacvPro/library/javacv.jar
javacppも入れ替える.
$ cd ~/.m2/repository/com/googlecode/javacpp/javacpp/0.5 $ cp javacpp-0.5.jar ~/Documents/Processing/libraries/javacvPro/library/javacpp.jar
これでjavacvProが動くようになる.
試しにサンプルを動かしてみる.
processingを起動し,[File]>[Examples]の順にメニューを開く.
[Contributed Librarires]の項目に[javacvPro]の項目が表示されるので,適当なものをダブルクリックし,スケッチを実行する.
ちなみに顔認識用学習データは「/opt/local/share/OpenCV」になるので,顔認識系のサンプルでは学習データのパスを書き換える.
トラブルシューティング
今回,遭遇したエラー.まずは,processingを64bit modeにしなかった場合のエラー.opencvは64bitライブラリとしてコンパイルされるのでprocessingを32bitモードから64bitモードへと変更しておくこと.
Exception in thread "Animation Thread" java.lang.UnsatisfiedLinkError: no jniopencv_core in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1758) at java.lang.Runtime.loadLibrary0(Runtime.java:823) at java.lang.System.loadLibrary(System.java:1045) at com.googlecode.javacpp.Loader.load(Loader.java:358) at com.googlecode.javacpp.Loader.load(Loader.java:285) at com.googlecode.javacv.cpp.opencv_core.<clinit>(opencv_core.java:129) at monclubelec.javacvPro.OpenCV.<clinit>(Unknown Source) at javacvpro_exemple_cascade_detect.setup(javacvpro_exemple_cascade_detect.java:45) at processing.core.PApplet.handleDraw(PApplet.java:2241) at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243) at processing.core.PApplet.run(PApplet.java:2140) at java.lang.Thread.run(Thread.java:680)
つぎはjavacvライブラリを入れ替えない場合のエラー.「libopencv_core.2.3.dylib」が見つからないといっている.シンボリックリンクを用意するだけでもエラーは回避できたが,今回はライブラリをコンパイルし直した.
Exception in thread "Animation Thread" java.lang.UnsatisfiedLinkError: /private/var/folders/yv/dgfgdbv51slf_rmgt8w497gm0000gn/T/libjniopencv_core395287537304450378.dylib: Library not loaded: /opt/local/lib/libopencv_core.2.3.dylib Referenced from: /private/var/folders/yv/dgfgdbv51slf_rmgt8w497gm0000gn/T/libjniopencv_core395287537304450378.dylib Reason: image not found at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1827) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1703) at java.lang.Runtime.load0(Runtime.java:770) at java.lang.System.load(System.java:1020) at com.googlecode.javacpp.Loader.load(Loader.java:352) at com.googlecode.javacpp.Loader.load(Loader.java:285) at com.googlecode.javacv.cpp.opencv_core.<clinit>(opencv_core.java:129) at monclubelec.javacvPro.OpenCV.<clinit>(Unknown Source) at sketch_130428a.setup(sketch_130428a.java:25) at processing.core.PApplet.handleDraw(PApplet.java:2117) at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:193) at processing.core.PApplet.run(PApplet.java:2020) at java.lang.Thread.run(Thread.java:680)