2014-10-09 93 views
3

我目前正在Android Studio中開發一個項目,我需要使用一些OpenCV庫。Android Studio OpenCV示例

我知道Android Studio目前不支持NDK開發,但是在做我的研究時,我發現有辦法管理周圍的事物。

我跟着這個教程OpenCV的庫添加到我的項目:

How to use opencv in android studio using gradle build tool?

一切工作正常,但當我試圖測試像「人臉檢測」的OpenCV的例子做這個:

轉到OpenCV Android SDK,選擇一個您想嘗試 的示例項目。

首先,刪除您自己的項目app/src/main中的'res'文件夾, ,然後將res文件夾放在您的app/src/main文件夾內的樣本中。

首先,刪除應用程序/ src目錄/主的「Java的文件夾,然後複製「SRC」從樣品 夾在裏面(注意,在src已被重命名爲 JAVA)。

如果您使用本機C++文件構建示例,則需要安裝NDK 。從Google的開發人員門戶網站下載它,並將此 行添加到您項目頂層的local.properties行中,低於 sdk.dir行:ndk.dir=/path/to/your/android-ndk構建並運行 示例!

我得到了這些錯誤:

java.lang.UnsatisfiedLinkError: Couldn't load detection_based_tracker from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.ricardonascimento.opencvexamples-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.ricardonascimento.opencvexamples-2, /vendor/lib, /system/lib]]]: findLibrary returned null 
      at java.lang.Runtime.loadLibrary(Runtime.java:358) 
      at java.lang.System.loadLibrary(System.java:526) 

問題加載庫時,

// Load native library after(!) OpenCV initialization 

System.loadLibrary("detection_based_tracker"); 

你有什麼建議來解決這個問題?我在網上搜索過,但沒有找到任何東西。

+0

* 「你有什麼建議來解決這個問題。」 * - 確保'detect_based_tracker'庫位於APK的'armeabi /'文件夾中。這個APK只是一個ZIP文件,帶有一些額外的東西,比如清單和簽名。 – jww 2014-10-10 02:29:18

+0

那麼你有沒有修好? – Ahmed 2015-02-25 05:14:41

回答

0

在AndroidStudio上安裝和配置OPENCV庫時,我確實遇到類似的問題。如果它不再是問題,請忽略這個答案(我知道這是一年前提出的)。希望其他人可能會發現它有助於快速排除故障。 github simple sample使用OPENCV庫。一切都已經設置好,讓它運行得非常快。我的AndroidStudio 2.0預覽版2(5天前發佈)。

乾杯。

0

你可以顯示你的應用程序的build.gradle?您應該檢查'sourceSets'設置,默認情況下,本地模塊的源代碼是'jniLibs'。因此,'jniLibs'目錄應該包含必要的模塊,例如。 armeabi-V7A,MIPS,X86等

下面是一個示例編譯:(注:我定製 'jniLibs' 到 '庫',只是個人喜好...)

~/AndroidStudioProjects/OpenCV3-FaceDetection/app/jni$ ndk-build 
[armeabi-v7a] Compile++ thumb: detection_based_tracker <= DetectionBasedTracker_jni.cpp 
[armeabi-v7a] Prebuilt  : libopencv_java3.so <= /home/cobalt/Android/OpenCV-android-sdk/sdk/native/jni/../libs/armeabi-v7a/ 
[armeabi-v7a] SharedLibrary : libdetection_based_tracker.so 
/home/cobalt/Android/adt-bundle-linux-x86-20131030/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: warning: hidden symbol '__aeabi_atexit' in /home/cobalt/Android/adt-bundle-linux-x86-20131030/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/thumb/libgnustl_static.a(atexit_arm.o) is referenced by DSO /home/cobalt/AndroidStudioProjects/OpenCV3-FaceDetection/app/obj/local/armeabi-v7a/libopencv_java3.so 
[armeabi-v7a] Install  : libdetection_based_tracker.so => libs/armeabi-v7a/libdetection_based_tracker.so 
[armeabi-v7a] Install  : libopencv_java3.so => libs/armeabi-v7a/libopencv_java3.so 

你也可以從app目錄中將'jniLibs'自定義爲'libs',如下所示:

Ex。

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

這可以在應用模塊中可以發現,全應用的build.gradle如下(例):

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 

    defaultConfig { 
     applicationId "org.opencv.samples.opencv3_facedetection" 
     minSdkVersion 15 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

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

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:22.2.1' 
    compile project(':libraries:opencv') 
} 

下面是一個示例項目Android Studio中導入的OpenCV 3.0的人臉檢測樣品:

https://github.com/DeLaSalleUniversity-Manila/opencvfacedetection-melvincabatuan

該過程可以在README.md找到。

另外,如果你想嘗試的Android Studio的搖籃實驗插件本地CPP發展與OpenCV的,那麼你可能有興趣在下面的示例項目: