OpenCV2.3をAndroidで動かせるようになったので、
実際にどれぐらいの速度で処理できるかを試してみました。
処理の内容:
Java側でVGAサイズのカメラプレビューのバイト配列を取得(YUV420のデータ)
C側でバイト配列からCvMat型に変換する
CvMat型の画像をFAST特徴量検出器にかける
結果の画像を今度はintの配列にして返す
Java側で表示
結果:1フレームあたり80~90msで処理できた。
(CvMatに変換した後、FAST検出器にかけない場合は50ms程度だったので、FAST検出器部分の処理は30~40ms)
動作中の映像は以下の通りです。
最初はもっと遅かったのですが、Application.mkのCPP_FLAGSというところに最適化オプションスイッチの-O3を加えたらかなり速くなりました。
NDKのデフォルトでは、コンパイラの最適オプションがついていないようです。
また、JNIついて書かれているPDFがOracleのページにあったのでリンクを貼っておきます。
JNIって何なの?と思っていたので、大変参考になりました。
Java Native Interface
ではまた。
良く役に立ちました。だが、CVCameraというサンプルはどうやってコンパイルができましたか?私はWindows native環境でOpenCV LibsとAndroid-opencvはコンパイルができたのですが、CVCameraはできなさそうです。。。
返信削除project_create.shに書いてあるandroidというコマンドはどこに見つけられますか?
androidというコマンドは、Android SDKのtoolsフォルダにあります。
返信削除CVCameraのコンパイルについては、下記ページに記載されています。
http://team-hiroq.com/blog/android/android_opencv_sample.html
私はAndroid-opencvをコンパイルしなかったので、CVCameraは動作しませんでした。
Android-opencvをコンパイルができて、libandroid-opencv.soを作成しました。CVCamera以外の OpenCV 2.3 のサンプルをコンパイルもできました (Calibrationと OpenCV_SAMPLE, 両方JNIを使いません)。だが、CVCameraというサンプルはまだダメだ。
返信削除以上のリンクはOpenCV 2.2 と ndk-r4-crystax の方法ですが、opencv 2.3のパッケージには CVCameraのMakefileがなくなってしまいました。SWIGでJNIのレーヤーを使わなければならないですが、どうすればいいですか知らないです。
CVCameraのフォルダから cmake . を使ったら、以下んpエラーメッセージが表示されてます。
返信削除Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)
Call Stack (most recent call first):
/usr/share/cmake-2.8.2/Modules/FindJNI.cmake:211 (FIND_PACKAGE_HANDLE_STANDARD
_ARGS)
jni/CMakeLists.txt:37 (find_package)
>>匿名さん
返信削除Comments are okay in both English and Japanese.
私もcmakeでエラーが出ましたが、下記方法でコンパイルが出きるようになりました。
1.android-opencvフォルダから、cmake_android.shをCVCameraフォルダにコピーします。
2.cd CVCamera
3.sh cmake_android.sh
4.cd build
5.make -j4
でjniのライブラリが作成されます。
その後、
6.cd CVCamera
7.sh project_create.sh
8.ant compile
9.ant install
で動きました。