Recherche…


Remarques

Les bibliothèques de CV ouvert peuvent être trouvées sur le Web en utilisant un moteur de recherche.

Les Gotchas :

  • Si vous abaissez votre plate-forme cible sous KitKat, certaines des bibliothèques OpenCV ne fonctionneront plus, en particulier les classes liées à org.opencv.android.Camera2Renderer et à d'autres classes associées. Vous pouvez probablement contourner ce problème en supprimant simplement les fichiers .java OpenCV appropriés.
  • Si vous élevez votre plate-forme cible à Lollipop ou au-dessus, mon exemple de chargement d'un fichier peut ne pas fonctionner car l'utilisation de chemins d'accès absolus est mal vue. Donc, vous devrez peut-être changer l'exemple pour charger un fichier de la galerie ou ailleurs. Il existe de nombreux exemples qui circulent.

Instructions

Testé avec AS v1.4.1 mais devrait également fonctionner avec les nouvelles versions.

  1. Créez un nouveau projet Android Studio à l'aide de l'assistant de projet (Menu: / Fichier / Nouveau projet):

    • Appelez ça " cvtest1 "
    • Facteur de forme: API 19, Android 4.4 (KitKat)
    • Activité vide nommée MainActivity

    Vous devriez avoir un répertoire cvtest1 où ce projet est stocké. (la barre de titre du studio Android vous indique où cvtest1 se trouve lorsque vous ouvrez le projet)

  1. Vérifiez que votre application s'exécute correctement. Essayez de changer quelque chose comme le texte "Hello World" pour confirmer que le cycle de construction / test est correct pour vous. (Je teste avec un émulateur d'un périphérique API 19).

  2. Téléchargez le package OpenCV pour Android v3.1.0 et décompressez-le dans un répertoire temporaire quelque part. (Assurez-vous que c'est le paquet spécifiquement pour Android et pas seulement le paquetage 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 bras ..., mips ... et x86 ... (un pour chaque type "d'architecture" Android s'exécute)

  3. Depuis Android Studio, importez OpenCV dans votre projet en tant que module: Menu: / File / New / Import_Module :

    • Répertoire-source: {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 allons y aller).
    • 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 obtenez un fichier import-summary.txt contenant une liste de ce qui n'a pas été importé (principalement des fichiers javadoc) et d'autres informations.
    entrer la description de l'image ici

    Mais vous obtenez également un message d'erreur indiquant que vous n'avez pas réussi à trouver la cible avec la chaîne de hachage "android-14" .... Cela se produit parce que le fichier build.gradle du fichier zip OpenCV que vous avez téléchargé dit de compiler à l'aide d'Android API version 14, que vous n'avez pas par défaut avec Android Studio v1.4.1. entrer la description de l'image ici

  1. Ouvrez le dialogue de structure du projet ( Menu: / File / Project_Structure ). Sélectionnez le module "app", cliquez sur l'onglet Dépendances et ajoutez : openCVLibrary310 en tant que 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 désormais comme une dépendance, mais vous obtiendrez quelques erreurs de non-recherche-Android-14 dans le journal des événements.

  2. 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:

    • compileSDKVersion (le mien dit 23)
    • buildToolsVersion (le mien dit 23.0.2)
    • minSdkVersion (le mien dit 19)
    • targetSdkVersion (le mien dit 23)
  3. Votre projet a maintenant un répertoire cvtest1 / OpenCVLibrary310 mais il n'est pas visible dans la vue du projet:

entrer la description de l'image ici

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 Fichiers de projet et vous pouvez trouver ce répertoire comme indiqué dans cette capture d'écran: entrer la description de l'image ici

A 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.

  1. 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 .

    entrer la description de l'image ici

    À ce stade, le module devrait 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 passé de la vue projet à la vue Android ). Vous devriez également voir un fichier build.gradle supplémentaire sous "Gradle Scripts", mais je trouve que l'interface d'Android Studio est un peu complexe et qu'elle ne le fait parfois pas tout de suite. Essayez donc de resynchroniser, de nettoyer, voire de redémarrer Android Studio.

    Vous devriez voir le module openCVLibrary310 avec toutes les fonctions OpenCV sous java comme dans cette capture d'écran:

    entrer la description de l'image ici

  2. 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 .

    entrer la description de l'image ici

  3. Accédez à la méthode onCreate de MainActivity.java et ajoutez ce code:

if (!OpenCVLoader.initDebug()) {
        Log.e(this.getClass().getSimpleName(), "  OpenCVLoader.initDebug(), not working.");
    } else {
        Log.d(this.getClass().getSimpleName(), "  OpenCVLoader.initDebug(), working.");
    }

Ensuite, lancez votre application. Vous devriez voir des lignes comme celles-ci dans le moniteur Android:

entrer la description de l'image ici

(Je ne sais pas pourquoi cette ligne avec le message d'erreur est là)

  1. Maintenant, essayez 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 ci-dessous charge cette image, exécute l'algorithme de détection de bord canny, puis écrit les résultats dans un fichier .png dans le même répertoire.
Put this code just below the code from the previous step and alter it to match your own files/directories.
 
    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);
  1. Exécutez votre application. Votre émulateur doit créer une image "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é pour l'afficher.


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow