【问题标题】:Android Studio OpenCV SampleAndroid Studio OpenCV 示例
【发布时间】:2014-12-04 15:08:29
【问题描述】:

我目前正在 Android Studio 中开发一个项目,我需要使用一些 OpenCV 库。

我知道 Android Studio 目前不支持 NDK 开发,但在进行研究时,我发现有一些方法可以管理周围的事情。

我按照本教程将 opencv 库添加到我的项目中:

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

一切正常,但是当我尝试通过这样做来测试 OpenCV 示例(如“FaceDetection”)时:

转到 OpenCV Android SDK,选择一个您想尝试的示例项目 出去。

首先,删除你自己的项目app/src/main中的‘res’文件夹, 然后将示例中的 res 文件夹放在 app/src/main 中 文件夹。

首先,从 app/src/main 中删除“java”文件夹,然后复制“src” 那里的样本文件夹(注意,必须将 src 重命名为 java)。

如果您使用本机 C++ 文件构建示例,则需要 NDK 安装。从谷歌的开发者门户下载它,然后添加这个 行到您项目顶层的 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");

你有什么建议来解决这个问题?我在网上搜索过,但没有找到任何东西。

【问题讨论】:

  • “你有什么建议来解决这个问题” - 确保 detection_based_tracker 库位于 APK 的 armeabi/ 文件夹中。 APK 只是一个包含一些额外内容的 ZIP 文件,例如清单和签名。
  • 那么你有没有修好它?

标签: java android c++ opencv android-ndk


【解决方案1】:

你能展示你应用的 build.gradle 吗?您应该检查“sourceSets”设置,默认情况下本机模块的源是“jniLibs”。因此,“jniLibs”目录应该包含必要的模块,例如。 armeabi-v7a、mips、x86等

这是一个示例构建:(注意:我将“jniLibs”自定义为“libs”,只是个人喜好......)

~/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'中,如下:

例如

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

这个可以在app模块中找到,完整的app build.gradle如下(Ex.):

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 的 Gradle Experimental Plugin for Native cpp development with OpenCV,那么您可能对以下示例项目感兴趣:

【讨论】:

    【解决方案2】:

    在 AndroidStudio 安装和配置 OPENCV 库时,我确实遇到了类似的问题。如果不再是问题,请忽略此答案(我知道这是一年前提出的)。希望其他人可能会发现它对快速故障排除很有用。一个 github simple sample 使用 OPENCV 库。一切都已经设置好让它运行得非常快。我的 AndroidStudio 是 2.0 Preview 2(5 天前发布)。

    干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      相关资源
      最近更新 更多