À 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
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/
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é.
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
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é.
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:
Erreur d'exécution:
Contenu APK:
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:
et construire le projet.
nous pouvons voir.
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"