2014年2月10日月曜日

AndroidでOpenCVを使う

「これがあったら便利だよね」ってのを、どっかのおっさんが用意してくれる。
それがOpenCVだ。
http://gori-naru.blogspot.jp/2012/11/opencv.html

OpenCV

画像をいじりたい人が使うライブラリ。
だいたい無料で使い放題。
Androidで使うのはマジカンタンだからあ、やったほうがよくね?笑

AndroidでOpenCVを使う

とりまダウンロード。

http://opencv.org/downloads.html へ赴く。
OpenCVはいろんなOS用で動くのだ!wa-i
もちろんここではAndroid版をダウンロードする。

でいい感じのトコに解凍する。
ダウンロードディレクトリとかじゃないほうがいい。

さっそくインポート。

Eclipse起動してくれ。

OpenCV-2.4.8-android-sdk/sdk/java をインポートする。
これAndroidライブラリプロジェクトだよ。

これでおしまい。

やっぱサンプル動かす。

せっかくなのでサンプルを動かしてうぇーいしてみる。

OpenCV-2.4.8-android-sdk/samples/tutorial-1-camerapreview
をインポートして。起動する。
うぇーい

うぇーいできない??
なんかダイアログでた??
そしたら、ナウい日本人丸出しでYes!Yes!って答えておけばおk。

OpenCVの本体が、全部のOpenCVを使ったアプリに1つずつ入っていたら、
端末の容量すげー食って嫌だよね。
まるで、別荘にもワイフがいるようなものさ。
(OpenCV開発者談)

OpenCVはアプリの中に組み込むこともできるけど、
マネージャアプリを通して端末にインストールされたOpenCVを
利用することもできるんだ。
このどっちの方法をとるかは、アプリをつくる側が決められる。

サンプルアプリはマネージャアプリを使っている。
とはいっても、キミの超イケてるCoolなアプリを起動させるために、
件のダイアログを出して、この超ださいアイコンのアプリを
インストールさせるのは気がひけるよね。

NDKで使う。

たいていはJavaでいじっていればいい。
OpenCVの内部はC/C++で書かれているので十分速いためだ。

しかしNDKから使えないと不便なときもある。
たとえば、JNIとJavaの橋渡しは少し時間がかかる。
非常に頻繁に(それがどれくらいかはキミの想像に任せる)
JavaからOpenCVのメソッドを呼び出していると、
やがてその少しの時間がうざったくなる時が来るのだ。

C/C++でOpenCVをいじったことのある人は、
画像配列をJNIでやりとりして、
実装をC++で書いてしまったほうがラクだ。

NDKを使うサンプルな。

jniディレクトリがあるものが、NDKを使うサンプルだ。

OpenCV-2.4.8-android-sdk/samples/tutorial-2-mixedprocessing
が該当する。

このプロジェクトをインポートすると
以下の様なエラーがコンソールに出力されちゃったりしちゃうのだ。

error: Program “/ndk-build.cmd” is not found in PATH

まず、NDKを使えるようにしよう。
NDKをダウンロードとか、
Eclipseの設定からAndroidの項目を選び、NDKを選択して、
NDKのパスを設定するとか、
NDKのディレクトリにパスを通すとかはやってある?

それだったら、このサンプルプロジェクトの設定を開き、

C/C++ Build > Tool Chain Editor > Current Builder

の項目をAndroid Builderにする。
そうしたらビルドできて、動くよ。
うぇーい