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を入れ替える.
$ 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)