OpenCV dans Android Studio
je veux utiliser la bibliothèque OpenCV dans mon application avec Android Studio. J'ai suivi les instructions trouvées ici mais j'obtiens erreur
Configuration avec nom "default" introuvable
Qu'est-ce qui ne va pas?
J'utilise Android Studio 1.0 avec gradle 2.2.1.
6 réponses
les étapes ci-dessous pour utiliser Android OpenCV sdk dans Android Studio. Ceci est une version simplifiée de ceci( 1 ) donc répondre.
- télécharger dernier OpenCV sdk pour Android à partir de OpenCV.org et décompresser le fichier zip.
- importer OpenCV to Android Studio , à partir de Fichier - > nouveau - > module D'importation , choisir sdk/java dans le dossier décompressé opencv archive.
- version de mise à Jour.gradle sous module OpenCV importé pour mettre à jour 4 champs correspondant à la construction de votre projet.gradle a) compileSdkVersion b) buildToolsVersion c) minSdkVersion et d) targetSdkVersion.
- ajouter dépendance au module par Application - > Paramètres du Module , et sélectionner la Dépendances onglet. Cliquez sur + icône en bas, choisissez dépendance du Module et sélectionnez le module OpenCV importé.
- pour Android Studio v1.2.2, pour accéder aux paramètres du Module : dans la vue de projet, droit-cliquer le module dépendant -> Ouvrir Les Paramètres Du Module
- Copie libs dossier sous sdk / native à Android Studio sous app/src / main .
- Dans Android Studio, renommer le copié libs répertoire jniLibs et nous avons fini.
Étape (6) est depuis Android studio attend des libs natifs dans app/src/main/jniLibs
au lieu de l'ancien dossier libs
. Pour les nouveaux à Android OpenCV, ne manquez pas en dessous des marches
- include
static{ System.loadLibrary("opencv_java"); }
(Note: pour OpenCV version 3 à cette étape, vous devriez plutôt charger la bibliothèqueopencv_java3
.) - pour step (5), Si vous ignorez une plate-forme libs comme x86, assurez-vous que votre périphérique/émulateur n'est pas sur cette plate-forme.
OpenCV est écrit en C/C++. Java wrappers sont
- Android OpenCV SDK - OpenCV.org maintenu Java wrapper Android. Je suggère celui-ci.
- OpenCV Java - OpenCV.org maintenu générés automatiquement, bureau wrapper Java.
- JavaCV - populaire Java wrapper maintenu par un(des) développeur (s) indépendant (s). Pas spécifiquement Androïde. Cette bibliothèque pourrait sortir de la synchronisation avec OpenCV plus récent version.
Integrating Opencv3.1.0 dans Android Studio v1.4.1 , instructions avec des détails supplémentaires et ce-est-ce-que-vous-devriez-obtenir type screenshots.
la plus grande partie du crédit va à Kiran, Kool, 1", et SteveLiles plus de opencv.org pour leurs explications. J'ajoute cette réponse parce que je crois que L'interface D'Android Studio est maintenant assez stable pour travailler sur ce type de truc d'intégration. Je dois aussi écrire ces instructions. de toute façon pour notre projet.
A. S. expérimentés développeurs trouveront certains 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 studio Android en utilisant l'assistant de projet (Menu:/Fichier/Nouveau projet):
- Appel " cvtest1 "
- facteur de forme: API 19, Android 4.4 (KitKat)
-
Blank Activity named MainActivity
vous devriez avoir un répertoire cvtest1 où ce projet est stocké. (la barre de titre D'Android studio vous montre où cvtest1 est 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 est OK pour vous. (Je teste avec un émulateur D'un appareil API 19).
-
Téléchargez le pack OpenCV pour Android v3.1.0 et décompresse-le dans un répertoire temporaire quelque part. (Assurez-vous que C'est le paquet spécifiquement pour Android et pas seulement le paquet OpenCV pour Java.) Je vais appeler ce répertoire " unzip-dir "ci-dessous unzip-dir vous devriez avoir un répertoire sdk/native/libs avec des sous-répertoires qui commencent par des choses comme arm ..., mips ... et x86 ... (un pour chaque type d ' "architecture" Android fonctionne sur)
-
de Android Studio importer OpenCV dans votre projet comme un module: Le Menu: /Fichier/Nouveau/Import_Module :
- Source-directory: {unzip-dir} / sdk / java
- nom du Module: Android studio remplit automatiquement ce champ avec openCVLibrary310 (le nom exact n'a probablement pas d'importance, mais nous irons avec cela).
-
Cliquez sur suivant . Vous obtenez un écran avec trois cases à cocher et des questions sur les jarres, les bibliothèques et les options d'importation. Tous les trois être vérifiée. Cliquez sur terminer.
Android Studio commence à importer le module et vous êtes montré un importation-résumé.txt fichier qui a une liste de ce qui n'a pas été importé (principalement des fichiers javadoc) et d'autres éléments d'information.
mais vous obtenez également un message d'erreur disant n'a pas trouvé la cible avec la chaîne de hachage 'android-14'... . Cela arrive parce que la construction.le fichier gradle dans le fichier zip OpenCV que vous avez téléchargé dit de compiler en utilisant L'API android version 14, ce que par défaut vous n'avez pas avec Android Studio v1.4.1.
-
ouvrir le dialogue sur la structure du projet ( Menu:/File/Project_Structure ). Sélectionnez le module" app", cliquez sur le Dépendances tab et ajouter : openCVLibrary310 comme une dépendance de Module. Lorsque vous sélectionnez ajouter/Module_Dependency cela doit apparaître dans la liste des modules que vous pouvez ajouter. Il apparaîtra maintenant comme une dépendance, mais vous obtiendrez quelques erreurs supplémentaires impossible-find-android-14 dans le journal des événements.
-
Regarder dans le "1519160920 de construire".Grad fichier pour votre application module. Il y a plusieurs constructions.fichiers gradle dans un projet Android. Celui que vous voulez est dans le répertoire cvtest1/app et du point de vue du projet il ressemble à construire.gradle (Module: app) . Notez les valeurs de ces quatre champs:
- compileSDKVersion (mine dit 23)
- buildToolsVersion (mine dit 23.0.2)
- minSdkVersion (mine dit 19)
- targetSdkVersion (mine dit 23)
-
votre projet a maintenant un répertoire cvtest1/OpenCVLibrary310 mais il n'est pas visible du point de vue du projet:
utilisez un autre outil, tel qu'un gestionnaire de fichiers, et allez dans ce répertoire. Vous pouvez également changer la vue du projet de Android à dossiers de projet et vous pouvez trouver ce répertoire comme montré dans cette capture d'écran:
à l'intérieur il y a un autre construire.gradle fichier (il est surligné dans la capture d'écran ci-dessus). Mettez à jour ce fichier avec les quatre valeurs de l'étape 6.
-
Resynchroniser votre projet, puis nettoyer et reconstruire il. (Menu: / Build / Clean_Project ) il devrait nettoyer et construire sans erreurs et vous devriez voir de nombreuses références à : openCVLibrary310 dans le 0: Messages écran.
à ce point le module devrait apparaître dans la hiérarchie du projet comme openCVLibrary310 , tout comme app . (Notez que dans ce petit menu déroulant je suis revenu de Project View à Android View ). Vous devriez également voir une construction supplémentaire .gradle fichier sous "Gradle Scripts" mais je trouve L'interface Android Studio un peu glitchy et parfois il ne le fait pas tout de suite. Essayez donc de resynchrer, nettoyer, et même redémarrer Android Studio.
vous devriez voir le module openCVLibrary310 avec toutes les fonctions OpenCV sous java comme sur cette capture d'écran:
-
Copiez le répertoire {unzip-dir}/sdk/native/libs (et tout ce qui s'y trouve) dans votre projet Android, à cvtest1/OpenCVLibrary310 / src / main/ , puis renommez votre copie de libs à jniLibs . Vous devriez maintenant avoir un répertoire cvtest1/OpenCVLibrary310/src/main/jniLibs . Resynchroniser votre projet et de ce répertoire devrait maintenant apparaît dans la vue de projet sous openCVLibrary310 .
-
aller à la méthode onCreate de activité principale.java et annexe ce code:
if (!OpenCVLoader.initDebug()) { Log.e(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), not working."); } else { Log.d(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), working."); }
lancez 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 un code openCV. Dans l'exemple ci-dessous, j'ai copié un .fichier jpg dans le répertoire cache de l'application cvtest1 sur l'émulateur android. Le code sous charge ceci image, exécute l'algorithme de détection de bord canny et écrit ensuite les résultats à A.png fichier dans le même répertoire.
mettez ce code juste en dessous du code de l'étape précédente et modifiez-le pour correspondre à vos propres fichiers/répertoires.
String inputFileName="simm_01"; String inputExtension = "jpg"; String inputDir = getCacheDir().getAbsolutePath(); // use the cache directory for i/o String outputDir = getCacheDir().getAbsolutePath(); String outputExtension = "png"; String inputFilePath = inputDir + File.separator + inputFileName + "." + inputExtension; Log.d (this.getClass().getSimpleName(), "loading " + inputFilePath + "..."); Mat image = Imgcodecs.imread(inputFilePath); Log.d (this.getClass().getSimpleName(), "width of " + inputFileName + ": " + image.width()); // if width is 0 then it did not read your image. // for the canny edge detection algorithm, play with these to see different results int threshold1 = 70; int threshold2 = 100; Mat im_canny = new Mat(); // you have to initialize output image before giving it to the Canny method Imgproc.Canny(image, im_canny, threshold1, threshold2); String cannyFilename = outputDir + File.separator + inputFileName + "_canny-" + threshold1 + "-" + threshold2 + "." + outputExtension; Log.d (this.getClass().getSimpleName(), "Writing " + cannyFilename); Imgcodecs.imwrite(cannyFilename, im_canny);
-
lancez votre application. Votre émulateur devrait créer une image "de bord" en noir et blanc. Vous pouvez utiliser le moniteur de périphérique Android pour récupérer la sortie ou écrire une activité à afficher il.
Le Pièges :
- si vous abaissez votre plate-forme cible en dessous de KitKat, certaines bibliothèques OpenCV ne fonctionneront plus, en particulier les classes liées à org.opencv.Android.Camera2Renderer et autres classes apparentées. Vous pouvez probablement contourner cela en enlevant simplement l'apprpriate OpenCV .les fichiers java.
- si vous soulevez votre plateforme cible à Lollipop ou au-dessus de mon exemple de chargement d'un fichier pourrait ne pas fonctionner parce que l'utilisation de chemins de fichiers absolus est mal vue. Donc vous pourriez avoir à changer l'exemple pour charger un fichier à partir de la galerie ou d'ailleurs. Il y a de nombreux exemples qui circulent.
Pour tous ceux qui pensaient qu'ils veulent fuir à toutes les étapes et les captures d'écran sur le (grand!) réponses ci-dessus, cela a fonctionné pour moi avec android studio 2.2.1
:
- créez un nouveau projet, nommez-le comme vous voulez et prenez la valeur par défaut (minSdkVersion 15 est parfait).
- Téléchargez le fichier zip à partir d'ici: https://sourceforge.net/projects/opencvlibrary/files/opencv-android / (j'ai téléchargé la version 3.1.0, mais il Mai une des versions plus récentes).
- décompressez le fichier zip, le meilleur endroit est dans votre dossier espace de travail, mais cela n'a pas vraiment d'importance.
- à l'intérieur de
Android Studio
, cliquez surFile->New-> Import Module
et naviguez vers\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 fichier
gradle
de votre moduleapp
, ajoutez ceci au bloc de dépendances:dependencies { compile project(':openCVLibraryXYZ') //rest of code }
où XYZ est la version exacte que vous téléchargez, par exemple dans mon cas:
dependencies {
compile project(':openCVLibrary320')
//rest of code
}
toute personne confrontée à un problème lors de la création de jniLibs cpp est montrée ..juste ajouter ndk ..
intégration Opencv avec android studio
Ceux qui veulent avoir une vidéo de youtube, de même essayer avec la dernière version d'opencv(3.4.0), ma chance n'était pas assez bon pour montré version(2.4.9)( opencv libère ).
vous pouvez aussi ajouter cette bibliothèque dans build.Grad
dependencies{
compile 'org.opencv:opencv-android:2.4.8'
}