LoginSignup
29
30

More than 5 years have passed since last update.

Windows環境のAndroid StudioでOpenCV for androidのサンプルを動かすためにやったこと

Last updated at Posted at 2015-05-31

基本的には
http://workpiles.com/2015/04/android-opencv-face_detection/
の通りですが,一部変更が必要な箇所があったので,備忘録として.

使用したOpenCVのバージョンは2.4.11

含まれているサンプルの中のface-detectionを動かすことを目標にします.

android SDK, NDK, OpenCV for android SDKはダウンロードして適当な場所に解凍しておく.

プロジェクトのインポート

File > New > Import Project で,OpenCV-android-sdk/samples/face-detectionを指定してインポート.
表示されるダイアログは特にいじらず,Next からの Finish

API14が入っていないと,その旨のメッセージが表示されるかもしれないので,その時はそのダイアログに従って必要なものをインストールする.

aidl is missing

Error:Execution failed for task ':openCVLibrary2411:compileDebugAidl'.
> aidl is missing

なるエラーが.
ビルドツールのバージョンが23.0.0 rc1に指定されているのに<android-sdk-path>\build-tools\23.0.0_rc1以下にaidl.exeが無いのが原因.(ちなみに,<android-sdk-path>local.properties内にsdk.dirとして設定されている)

File > Project Structure を開き,
openCVSamplefacedetection, openCVLibrary2411共に,Build Tools Versionを22.0.1に設定する.

参考:http://stackoverflow.com/questions/30506406/aidl-is-missing-android-studio

エンコーディング

ファイルのエンコードがWindows31で良いのかとか言われたりするので,
File > Settings を開き,
Editor > File Encodings で IDE Encoding, Project Encoding 共に UTF-8に設定.

NDKの設定

この段階で一旦ビルドしてみると,

Error:Execution failed for task ':openCVSamplefacedetection:compileDebugNdk'.
> NDK not configured.
Download the NDK from http://developer.android.com/tools/sdk/ndk/.Then add ndk.dir=path/to/ndk in local.properties.
(On Windows, make sure you escape backslashes, e.g. C:\\ndk rather than C:\ndk)

とか言われる.
上記リンク先にもあるように,
local.properties

ndk.dir=C\:\\Users\\hoge\\android-ndk-r10e

を追加.(環境によって変わる.NDKを置いた場所を指定する.)
Windows環境なので区切り文字がバックスラッシュ&エスケープが必要なのに注意.

build.gradle設定

openCVSamplefacedetectionモジュールのbuild.gradleもいじる.

build.gradle
android {
    ...

    sourceSets.main {
        jni.srcDirs = []
        jniLibs.srcDir 'src\\main\\libs'
    }

    task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
        def ndkDir = "C:\\Users\\hoge\\android-ndk-r10e"
        commandLine "$ndkDir\\ndk-build.cmd",
                '-C', file('src\\main\\jni').absolutePath,
                '-j', Runtime.runtime.availableProcessors(),
                'all',
                'NDK_DEBUG=1'
    }

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn buildNative
    }
}

これまたリンク先と違い,ディレクトリ区切りがバックスラッシュなのに注意.
ndk-buildコマンドも,ndk-build.cmdに変えてある.
sourceSets.main以下の記述もちょっと変えてある.( http://stackoverflow.com/questions/21096819/jni-and-gradle-in-android-studio )

複数の環境に対応させるには

同じbuild.gradleでwindows環境にもlinux環境にも対応させたい.
http://qiita.com/abekatsu/items/31459d11284623277668#buildgradle
こうすればよいのか.

Android.mk

face-detection\openCVSamplefacedetection\src\main\jni\Android.mkを書き換え.

include ../../sdk/native/jni/OpenCV.mk

を絶対パスに変える.
例えば

include C:\Users\hoge\OpenCV-android-sdk\sdk\native\jni\OpenCV.mk

とか.

Application.mk

以上の状態でビルドすると,ビルドは通る(Build > Make Project).

しかし,実行してみる(Run > Run 'openCVSamplefacedetection`して,エミュレータや実機に転送)と,
端末には"Unfortunately, OCV Face Detection has stopped"と表示されてアプリが停止し,
logcatには

05-31 19:07:07.437  29773-29773/org.opencv.samples.facedetect E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.UnsatisfiedLinkError: Couldn't load detection_based_tracker: findLibrary returned null

的なエラーが.

正しいターゲットを指定できておらず,ライブラリを読み込めていない(?)っぽい.

face-detection\openCVSamplefacedetection\src\main\jni\Application.mkを修正する.

APP_ABI := armeabi armeabi-v7a mips x86

( 参考:http://answers.opencv.org/question/4222/problem-working-with-native-apps/ )

これでもう一度ビルド→実行.
動いた!

29
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
30