2014-10-09 94 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的,那么你可能有兴趣在下面的示例项目: