Je souhaite utiliser la bibliothèque OpenCV dans mon application avec Android Studio. J'ai suivi les instructions trouvées ici mais j'obtiens une erreur
Configuration avec le nom 'default' introuvable
Qu'est-ce qui ne va pas?
J'utilise Android Studio 1.0 avec gradle 2.2.1.
android
opencv
android-studio
gradle
Bartosz Bialecki
la source
la source
native
répertoire sous monsdk
répertoire, est-ce qu'il me manque quelque chose?Réponses:
Les étapes ci-dessous pour utiliser Android OpenCV sdk dans Android Studio. Ceci est une version simplifiée de cette ( 1 ) réponse SO.
L'étape (6) est que le studio Android attend des bibliothèques natives au
app/src/main/jniLibs
lieu d'unlibs
dossier plus ancien . Pour ceux qui découvrent Android OpenCV, ne manquez pas les étapes ci-dessousstatic{ System.loadLibrary("opencv_java"); }
(Remarque: pour OpenCV version 3 à cette étape, vous devez à la place charger la bibliothèqueopencv_java3
.)OpenCV écrit est en C / C ++. Les wrappers Java sont
la source
javadocs
répertoire? .Il me demande également d'installerandroid sdk 14
bien que je cible les appareils qui prennent en chargeandroid sdk 15
sdk
répertoire d'installation sur mon système pendant que vousAndroid Open CV SDK
parliez du répertoire qui vient avec .Ok terminé l'étape 6. Où dois-je inclurestatic{ System.loadLibrary("opencv_java"); }
?android-14
erreur après l'importation du module à l'étape 2, vous devez éditer manuellement lebuild.gradle
dans le répertoire openCV de votre projet comme indiqué à l'étape 3.Intégration d'OpenCV v3.1.0 dans Android Studio v1.4.1 , des instructions avec des détails supplémentaires et des captures d'écran de type voici ce que vous devriez obtenir.
La plus grande partie du mérite revient à Kiran, Kool, 1 "et SteveLiles sur opencv.org pour leurs explications. J'ajoute cette réponse car je pense que l'interface d'Android Studio est maintenant suffisamment stable pour fonctionner avec ce type d'intégration De toute façon, je dois écrire ces instructions pour notre projet.
Les développeurs AS expérimentés trouveront une partie de ce pédant. Cette réponse s'adresse aux personnes ayant une expérience limitée dans Android Studio.
Créez un nouveau projet Android Studio à l'aide de l'assistant de projet (Menu: / Fichier / Nouveau projet):
Activité vide nommée MainActivity
Vous devez avoir un répertoire cvtest1 dans lequel ce projet est stocké. (la barre de titre du studio Android vous montre où se trouve cvtest1 lorsque vous ouvrez le projet)
Vérifiez que votre application fonctionne correctement. Essayez de changer quelque chose comme le texte "Hello World" pour confirmer que le cycle de construction / test vous convient. (Je teste avec un émulateur d'un appareil API 19).
Téléchargez le package OpenCV pour Android v3.1.0 et décompressez-le dans un répertoire temporaire quelque part. (Assurez-vous qu'il s'agit du package spécifiquement pour Android et pas seulement du package OpenCV pour Java.) J'appellerai ce répertoire " unzip-dir " Sous unzip-dir, vous devriez avoir un répertoire sdk / native / libs avec des sous-répertoires commençant par des choses comme arm ..., mips ... et x86 ... (un pour chaque type d '"architecture" sur lequel tourne Android)
Depuis Android Studio, importez OpenCV dans votre projet en tant que module: Menu: / Fichier / Nouveau / Import_Module :
Cliquez sur suivant . Vous obtenez un écran avec trois cases à cocher et des questions sur les pots, les bibliothèques et les options d'importation. Tous les trois doivent être vérifiés. Cliquez sur Terminer.
Android Studio commence à importer le module et vous affiche un fichier import-summary.txt contenant une liste de ce qui n'a pas été importé (principalement des fichiers javadoc) et d'autres informations.
Mais vous obtenez également un message d'erreur indiquant n'a pas réussi à trouver la cible avec la chaîne de hachage « android-14 » ... . Cela se produit parce que le fichier build.gradle dans le fichier zip OpenCV que vous avez téléchargé indique de compiler à l'aide de l'API Android version 14, que vous n'avez pas par défaut avec Android Studio v1.4.1.
Ouvrez la boîte de dialogue de structure du projet ( Menu: / File / Project_Structure ). Sélectionnez le module «app», cliquez sur l' onglet Dépendances et ajoutez : openCVLibrary310 comme dépendance de module. Lorsque vous sélectionnez Add / Module_Dependency, il doit apparaître dans la liste des modules que vous pouvez ajouter. Il apparaîtra maintenant comme une dépendance, mais vous obtiendrez quelques autres erreurs cannot-find-android-14 dans le journal des événements.
Recherchez dans le fichier build.gradle votre module d'application. Il existe plusieurs fichiers build.gradle dans un projet Android. Celui que vous voulez se trouve dans le répertoire cvtest1 / app et, dans la vue du projet, il ressemble à build.gradle (Module: app) . Notez les valeurs de ces quatre champs:
Votre projet a maintenant un répertoire cvtest1 / OpenCVLibrary310 mais il n'est pas visible depuis la vue du projet:
Utilisez un autre outil, tel qu'un gestionnaire de fichiers, et accédez à ce répertoire. Vous pouvez également basculer la vue du projet d' Android vers Project Files et vous pouvez trouver ce répertoire comme indiqué dans cette capture d'écran:
À l'intérieur, il y a un autre fichier build.gradle (il est mis en évidence dans la capture d'écran ci-dessus). Mettez à jour ce fichier avec les quatre valeurs de l'étape 6.
Resynchronisez votre projet, puis nettoyez / reconstruisez-le. (Menu: / Build / Clean_Project ) Il devrait nettoyer et construire sans erreurs et vous devriez voir de nombreuses références à : openCVLibrary310 dans l' écran 0: Messages .
À ce stade, le module doit apparaître dans la hiérarchie du projet en tant que openCVLibrary310 , tout comme app . (Notez que dans ce petit menu déroulant, je suis revenu de Project View à Android View ). Vous devriez également voir un fichier build.gradle supplémentaire sous "Gradle Scripts" mais je trouve l'interface d'Android Studio un peu glitch et parfois elle ne le fait pas tout de suite. Essayez donc de resynchroniser, de nettoyer et même de redémarrer Android Studio.
Vous devriez voir le module openCVLibrary310 avec toutes les fonctions OpenCV sous java comme dans cette capture d'écran:
Copiez le répertoire {unzip-dir} / sdk / native / libs (et tout ce qu'il contient ) dans votre projet Android, dans cvtest1 / OpenCVLibrary310 / src / main / , puis renommez votre copie de libs en jniLibs . Vous devriez maintenant avoir un répertoire cvtest1 / OpenCVLibrary310 / src / main / jniLibs . Resynchronisez votre projet et ce répertoire devrait maintenant apparaître dans la vue du projet sous openCVLibrary310 .
Accédez à la méthode onCreate de MainActivity.java et ajoutez ce code:
Exécutez ensuite votre application. Vous devriez voir des lignes comme celle-ci dans le moniteur Android: (Je ne sais pas pourquoi cette ligne avec le message d'erreur est là)
Essayez maintenant d'utiliser du code openCV. Dans l'exemple ci-dessous, j'ai copié un fichier .jpg dans le répertoire de cache de l'application cvtest1 sur l'émulateur Android. Le code ci-dessous charge cette image, exécute l'algorithme de détection des bords astucieux, puis réécrit les résultats dans un fichier .png dans le même répertoire.
Placez ce code juste en dessous du code de l'étape précédente et modifiez-le pour qu'il corresponde à vos propres fichiers / répertoires.
Exécutez votre application. Votre émulateur doit créer une image «bord» en noir et blanc. Vous pouvez utiliser Android Device Monitor pour récupérer la sortie ou écrire une activité pour l'afficher.
le Gotchas :
la source
OpenCV error: Cannot load info library for OpenCV
2java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/www.deven.com.opencv-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libopencv_java3.so
Ce que ces erreurs à propos de j'ai fait étape par étape au fur et à mesure que vous écriviez.Pour tous ceux qui ont senti qu'ils voulaient s'enfuir avec toutes les étapes et les captures d'écran des (super!) Réponses ci-dessus, cela a fonctionné pour moi avec
android studio 2.2.1
:Android Studio
, cliquezFile->New-> Import Module
et accédez à\path_to_your_unzipped_file\OpenCV-android-sdk\sdk\java
et appuyez sur OK, puis acceptez toutes les boîtes de dialogue par défaut.Dans le
gradle
fichier de votreapp
module, ajoutez ceci au bloc des dépendances:Où XYZ est la version exacte que vous téléchargez, par exemple dans mon cas:
la source
Android Studio 3.4 + OpenCV 4.1
Téléchargez le dernier fichier zip OpenCV à partir d' ici (la dernière version actuelle est 4.1.0) et décompressez-le dans votre espace de travail ou dans un autre dossier.
Créez normalement un nouveau projet Android Studio. Cliquez
File->New->Import Module
, accédez à/path_to_unzipped_files/OpenCV-android-sdk/sdk/java
, définissez le nom du module commeopencv
, cliquezNext
et décochez toutes les options à l'écran.Activez
Project
le mode d'affichage des fichiers (le mode par défaut estAndroid
). Dans leopencv/build.gradle
changement de fichierapply plugin: 'com.android.application'
àapply plugin: 'com.android.library'
et remplacerapplication ID "org.opencv"
par(selon les valeurs de
app/build.gradle
). Projet de synchronisation avec les fichiers Gradle.Ajoutez cette chaîne au bloc de dépendances dans le
app/build.gradle
fichierSélectionnez à nouveau
Android
le mode d'affichage des fichiers. Faites un clic droit sur leapp
module et allez-yNew->Folder->JNI Folder
. Sélectionnez le changement d'emplacement du dossier et définissez-lesrc/main/jniLibs/
.Sélectionnez à nouveau
Project
le mode d'affichage des fichiers et copiez tous les dossiers de/path_to_unzipped_files/OpenCV-android-sdk/sdk/native/libs
versapp/src/main/jniLibs
.Encore une fois en
Android
mode d'affichage de fichier, faites un clic droit sur leapp
module et choisissezLink C++ Project with Gradle
. Sélectionnez Build Systemndk-build
et le chemin d'accès auOpenCV.mk
fichier/path_to_unzipped_files/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk
.path_to_unzipped_files
ne doit contenir aucun espace, ou vous obtiendrez une erreur!Pour vérifier l'initialisation d'OpenCV, ajoutez un message Toast dans la
onCreate()
méthode MainActivity :Si l'initialisation réussit, vous verrez
true
dans le message Toast, sinon vous verrezfalse
.la source
application ID "org.opencv"
chaîne par deux chaînes:minSdkVersion 21
ettargetSdkVersion 28
(selon les valeurs du fichier app / build.gradle)Cela a fonctionné pour moi et était aussi simple que d'ajouter une dépendance gradle:
https://bintray.com/seesaa/maven/opencv#
https://github.com/seesaa/opencv-android
La seule mise en garde étant que je devais utiliser un périphérique de débogage matériel car les émulateurs de bras fonctionnaient trop lentement pour moi (comme AVD Manager le dit), et, comme décrit dans le repo README, cette version n'inclut pas le support x86 ou x86_64.
Il semble construire et le test suggéré:
crache un tas de sortie qui me semble juste.
la source
Toute personne confrontée à un problème lors de la création de jniLibs cpp est affichée .. il suffit d'ajouter ndk ..
la source
Dans votre build.gradle
Plus d'infos
la source