web-dev-qa-db-fra.com

android Static Initialization opencv 3.0 Impossible de charger la bibliothèque "opencv_Java3"

À l'aide de Android ADT, j'essaie d'initialiser OpenCV de manière statique afin de l'inclure dans la version de l'application et de ne pas télécharger OpenCV Manager à partir du PlayStore Android.

J'utilise openCV v3 ( http://opencv.org/downloads.html )

Au stade, essayez simplement d’ajouter une initialisation statique à l’un des exemples de OpenCV-Android-sdk\samples\face-detection.

J'ai suivi l'exemple ( http://docs.opencv.org/2.4/doc/tutorials/introduction/Android_binary_package/dev_with_OCV_on_Android.html )

J'ai examiné de nombreux exemples, mais nous n'avons encore trouvé aucune solution pour que cela fonctionne. J'espère sincèrement que quelqu'un pourra peut-être aider.

Je pensais que cela pourrait être dû à libopencv_Java3.so ne pas être dans le dossier libs/armeabi-v7a/ Quand je le copie et le colle à partir de OpenCV-Android-sdk\sdk\native\libs\armeabi-v7a, il disparaît. Je crois que cela pourrait avoir quelque chose à voir avec la configuration du ndk. Bien sûr, le problème pourrait être complètement différent.

LogCat donne ceci:

11-26 16:36:33.647: D/OpenCV/StaticHelper(13993): Trying to load library opencv_Java3 
11-26 16:36:33.647: D/OpenCV/StaticHelper(13993): Cannot load library "opencv_Java3" 
11-26 16:36:33.647: W/System.err(13993): Java.lang.UnsatisfiedLinkError: Couldn't load opencv_Java3 from loader dalvik.system.PathClassLoader[DexPathList[[Zip file "/data/app/org.opencv.samples.facedetect-1.apk"],nativeLibraryDirectories=[/data/app-lib/org.opencv.samples.facedetect-1, /vendor/lib, /system/lib, /vendor/lib]]]: findLibrary returned null 
11-26 16:36:33.767: D/OpenCV/StaticHelper(13993): Trying to load library opencv_Java3 
11-26 16:36:33.767: D/OpenCV/StaticHelper(13993): Cannot load library "opencv_Java3" 
11-26 16:36:33.767: W/System.err(13993): Java.lang.UnsatisfiedLinkError: Couldn't load opencv_Java3 from loader dalvik.system.PathClassLoader[DexPathList[[Zip file "/data/app/org.opencv.samples.facedetect-1.apk"],nativeLibraryDirectories=[/data/app-lib/org.opencv.samples.facedetect-1, /vendor/lib, /system/lib, /vendor/lib]]]: findLibrary returned null
9
Garry Dunicazzz

si quelqu'un rencontre ce problème et utilise AndroidStudio. Vous pouvez le réparer en copiant simplement le dossier OpenCV-Android-sdk\sdk\native\libs

dans votre OpenCvProject/openCVLibrary310/source/main et renommez-le en jniLibs. Pour que la structure finale ressemble à ceci: OpenCvProject/openCVLibrary310/source/main/jniLibs/  enter image description here

Si vous avez déjà exécuté votre projet à partir d'AndroidStudio, veillez à le supprimer d'abord de l'appareil. Sinon, AndroidStudio pourrait ne pas le redéployer et, à cause de cela, ne pourrait pas copier sur les bibliothèques.

Cela pourrait également fonctionner si vous copiez les bibliothèques dans votre projet actuel et non dans le dossier openCVLibrary, mais je n'ai pas essayé.

15
Thor_Bux

Assurez-vous que vous avez la possibilité d'installer les modules sur "ON" avant d'inclure Opencv.mk:

OPENCV_INSTALL_MODULES:=on
include ${OPENCV_Android_SDK}/${Android_SDK_JNI}/OpenCV.mk

J'ai déjà défini mes variables dans mon makefile

voir: http://docs.opencv.org/2.4/doc/tutorials/introduction/Android_binary_package/dev_with_OCV_on_Android.html

1
I L

Je me suis battu avec ce problème pendant des heures, quand j'ai essayé quelque chose juste pour le plaisir et VOILÁ! J'ai eu le problème sur System.loadLibrary("whateverYourLibraryWasCalled"); alors j'ai ajouté OpenCV chargé juste avant:

static {
    System.loadLibrary("opencv_Java3");
    System.loadLibrary("MyOpencvLibs");
}

Et tout a bien fonctionné.

0
Hans Araya

Je rencontre cette question récemment! Parce que je ne le mets pas dans le dossier "app/src/main/jniLibs" mais dans le dossier "app/src/main/cpp/libs" (personnalisé)

Chemin du dossier:

 folder path

Erreur d'exécution:

 runtime error

Contenu APK:

 apk content

nous pouvons voir, libopencv_Java3.so pas emballé dans un fichier apk.

J'ai modifié le chemin du dossier "so" en "app/src/main/jniLibs" et modifié le fichier "CMakeLists.txt".

Utilisez jniLibs:

 use jniLibs

et construire le projet.

nous pouvons voir.

 apk content

nous pouvons trouver libopencv_Java3.so.

et l'application s'exécute normalement.

donc je pense que nous devrions mettre tous les fichiers 'so' dans le dossier jniLibs.

Si vous souhaitez utiliser un autre dossier. vous devriez config dans votre "build.gradle"

0
杨观回