java.lang.UnsatisfiedLinkError: dlopen a échoué: la bibliothèque “libopencv_java3.so” est introuvable.

Je travaille sur une application Android censée détecter si un visage se trouve devant l’appareil photo, puis effectuer une action en fonction de celui-ci. J’utilise open cv pour la détection de visage, mais j’ai besoin de quelques fonctionnalités de costume cpp. J’essaie donc d’importer le contenu d’un cv ouvert dans mon propre fichier cpp, myLib.cpp. Je souhaite ensuite appeler la fonction définie dans myLib dans mon mainActivity.

Lorsque je construis le projet, tout fonctionne bien, mais dès que je l’exécute sur mon appareil (Oneplus x – Android 22), il se bloque immédiatement avec le message d’erreur suivant.

04-12 10:28:38.494 11114-11114/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.lunaticcoding.opencvtest, PID: 11114 java.lang.UnsatisfiedLinkError: dlopen failed: library "libopencv_java3.so" not found at java.lang.Runtime.loadLibrary(Runtime.java:371) at java.lang.System.loadLibrary(System.java:988) at com.lunaticcoding.opencvtest.MainActivity.(MainActivity.java:19) at java.lang.reflect.Constructor.newInstance(Native Method) at java.lang.Class.newInstance(Class.java:1606) at android.app.Instrumentation.newActivity(Instrumentation.java:1066) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2246) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2424) at android.app.ActivityThread.access$900(ActivityThread.java:155) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:139) at android.app.ActivityThread.main(ActivityThread.java:5298) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:950) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)

mon opencv build gradle

 apply plugin: 'com.android.library' android { comstackSdkVersion 27 defaultConfig { minSdkVersion 15 targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" externalNativeBuild { cmake { cppFlags "-frtti -fexceptions" abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'mips', 'mips64' } } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } externalNativeBuild { cmake { path "CMakeLists.txt" } } sourceSets { main { jni.srcDirs = [jni.srcDirs, 'src/sdk/native/jni/include'] jniLibs.srcDirs = [jniLibs.srcDirs, 'src/sdk/native/3rdparty/libs', 'src/sdk/native/libs'] } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:27.1.1' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } 

mon opencv cMakeLists.txt

 cmake_minimum_required(VERSION 3.4.1) set(OpenCV_DIR "/Users/lunaticcoding/Documents/OpenCV-android-sdk/sdk/native/jni") find_package(OpenCV REQUIRED java) message(STATUS "OpenCV libraries: ${OpenCV_LIBS}") include_directories(${OpenCV_INCLUDE_DIRS}) 

Le problème est que libopencv_java3.so n’est pas créé dans ma construction. Le problème doit donc se trouver dans les listes de diffusion du projet opencv. Quelqu’un sait-il comment exporter le fichier libopencv_java3.so dans la version de mon application?

Vous devez installer OpenCV Manager sur votre appareil.

Et initier le manager comme ça

 OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mLoaderCallback); 

BaseLoaderCallback est

 private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { switch (status) { case LoaderCallbackInterface.SUCCESS: { Log.i(TAG, "OpenCV loaded successfully"); } break; default: { super.onManagerConnected(status); } break; } } }; 

Voir page de référence