2011/06/26

Android2.2+OpenCV2.3の実験

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


ではまた。

5 件のコメント:

  1. 良く役に立ちました。だが、CVCameraというサンプルはどうやってコンパイルができましたか?私はWindows native環境でOpenCV LibsとAndroid-opencvはコンパイルができたのですが、CVCameraはできなさそうです。。。

    project_create.shに書いてあるandroidというコマンドはどこに見つけられますか?

    返信削除
  2. androidというコマンドは、Android SDKのtoolsフォルダにあります。

    CVCameraのコンパイルについては、下記ページに記載されています。
    http://team-hiroq.com/blog/android/android_opencv_sample.html

    私はAndroid-opencvをコンパイルしなかったので、CVCameraは動作しませんでした。

    返信削除
  3. 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のレーヤーを使わなければならないですが、どうすればいいですか知らないです。

    返信削除
  4. 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)

    返信削除
  5. >>匿名さん
     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
    で動きました。

    返信削除