Reconnaître les caractéristiques de texte et de visages avec ML Kit sur Android

1. Introduction

ML Kit est un SDK mobile qui intègre l'expertise de Google en matière de machine learning dans les applications Android et iOS par le biais d'un package puissant et simple d'utilisation. Que vous soyez débutant ou expérimenté en machine learning, vous pouvez facilement implémenter la fonctionnalité dont vous avez besoin en quelques lignes de code. Il n'est pas nécessaire d'avoir une connaissance approfondie des réseaux neuronaux ou de l'optimisation des modèles pour commencer.

Si vous rencontrez des problèmes (bugs de code, erreurs grammaticales, formulation peu claire, etc.) au cours de cet atelier de programmation, veuillez les signaler via le lien Signaler une erreur situé dans l'angle inférieur gauche de l'atelier de programmation.

Comment ça marche ?

ML Kit permet d'appliquer facilement des techniques de machine learning à vos applications en rassemblant dans un seul SDK les technologies de machine learning de Google, telles que Mobile Vision et TensorFlow Lite. Que vous ayez besoin des fonctionnalités en temps réel des modèles sur l'appareil de Mobile Vision ou de la flexibilité des modèles TensorFlow Lite personnalisés, ML Kit est là pour vous aider.

Cet atelier de programmation vous guidera dans la création de votre propre application Android capable de détecter automatiquement le texte et les traits du visage dans une image.

Objectif de cet atelier

Dans cet atelier de programmation, vous allez créer une application Android avec ML Kit. Cette application pourra :

  • Détecter du texte dans des images à l'aide de l'API de reconnaissance de texte de ML Kit
  • Identifier les traits du visage dans des images à l'aide de l'API de contour du visage de ML Kit

Points abordés

  • Utiliser le SDK ML Kit pour ajouter facilement des fonctionnalités avancées de machine learning, telles que la reconnaissance de texte et la détection des traits du visage

Prérequis

  • Une version récente d'Android Studio (3.0 ou ultérieure)
  • Un émulateur Android Studio ou un appareil Android physique
  • L'exemple de code
  • Connaissances de base sur le développement Android en Java
  • Connaissances de base sur les modèles de machine learning

Cet atelier de programmation est consacré à ML Kit. Les concepts et les blocs de codes non pertinents ne sont pas abordés, et vous sont fournis afin que vous puissiez simplement les copier et les coller.

2. Configuration

Télécharger le code

Cliquez sur le lien ci-dessous pour télécharger l'ensemble du code de cet atelier de programmation :

Décompressez le fichier ZIP téléchargé. Vous accéderez ainsi à un dossier racine (mlkit-android-master) contenant toutes les ressources dont vous aurez besoin. Pour cet atelier de programmation, vous n'aurez besoin que des ressources du sous-répertoire vision.

Le sous-répertoire vision du dépôt mlkit-android-master contient deux répertoires :

  • android_studio_folder.pngstarter : code de démarrage sur lequel s'appuie cet atelier de programmation.
  • android_studio_folder.pngfinal : code complet de l'exemple d'application finale.

3. Vérifier les dépendances de ML Kit

Vérifier les dépendances de ML Kit

Les lignes suivantes doivent déjà être ajoutées à la fin du fichier build.gradle dans le répertoire app de votre projet (vérifiez pour confirmer) :

build.gradle

dependencies {
  // Face features
  implementation 'com.google.mlkit:face-detection:16.0.0'

  // Text features
  implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
}

Il s'agit des dépendances spécifiques de ML Kit dont vous avez besoin pour implémenter les fonctionnalités de cet atelier de programmation.

4. Exécuter l'application de démarrage

Maintenant que vous avez importé le projet dans Android Studio et vérifié les dépendances de ML Kit, vous êtes prêt à exécuter l'application pour la première fois. Démarrez l'émulateur Android Studio, puis cliquez sur Run ( execute.png) dans la barre d'outils Android Studio.

L'application devrait se lancer sur votre émulateur. À ce stade, vous devriez voir une mise en page de base avec un champ de liste déroulante qui vous permet de choisir entre trois images. Dans la section suivante, vous allez ajouter la reconnaissance de texte à votre application pour identifier le texte dans les images.

5. Ajouter la reconnaissance de texte sur l'appareil

Dans cette étape, nous allons ajouter la fonctionnalité à votre application pour reconnaître le texte dans les images.

Configurer et exécuter la reconnaissance de texte sur l'appareil dans une image

Ajoutez les éléments suivants à la méthode runTextRecognition de la classe MainActivity :

MainActivity.java

private void runTextRecognition() {
   InputImage image = InputImage.fromBitmap(mSelectedImage, 0);
   TextRecognizer recognizer = TextRecognition.getClient();
   mTextButton.setEnabled(false);
   recognizer.process(image)
           .addOnSuccessListener(
                   new OnSuccessListener<Text>() {
                       @Override
                       public void onSuccess(Text texts) {
                           mTextButton.setEnabled(true);
                           processTextRecognitionResult(texts);
                       }
                   })
           .addOnFailureListener(
                   new OnFailureListener() {
                       @Override
                       public void onFailure(@NonNull Exception e) {
                           // Task failed with an exception
                           mTextButton.setEnabled(true);
                           e.printStackTrace();
                       }
                   });
}

Le code ci-dessus configure le détecteur de reconnaissance de texte et appelle la fonction processTextRecognitionResult avec la réponse.

Traiter la réponse de reconnaissance de texte

Ajoutez le code suivant à processTextRecognitionResult dans la classe MainActivity pour analyser les résultats et les afficher dans votre application.

MainActivity.java

private void processTextRecognitionResult(Text texts) {
   List<Text.TextBlock> blocks = texts.getTextBlocks();
   if (blocks.size() == 0) {
       showToast("No text found");
       return;
   }
   mGraphicOverlay.clear();
   for (int i = 0; i < blocks.size(); i++) {
       List<Text.Line> lines = blocks.get(i).getLines();
       for (int j = 0; j < lines.size(); j++) {
           List<Text.Element> elements = lines.get(j).getElements();
           for (int k = 0; k < elements.size(); k++) {
               Graphic textGraphic = new TextGraphic(mGraphicOverlay, elements.get(k));
               mGraphicOverlay.add(textGraphic);

           }
       }
   }
}

Exécuter l'application sur l'émulateur

Cliquez maintenant sur Run ( execute.png) dans la barre d'outils Android Studio. Une fois l'application chargée, assurez-vous que Test Image 1(Text) est sélectionné dans le champ de liste déroulante, puis cliquez sur le bouton FIND TEXT (RECHERCHER DU TEXTE).

Votre application devrait maintenant ressembler à l'image ci-dessous, affichant les résultats de la reconnaissance de texte et les cadres de délimitation superposés à l'image d'origine.

10b12d0e8822eaf5.png

Photo: Kai Schreiber / Wikimedia Commons / CC BY-SA 2.0

Félicitations ! Vous venez d'ajouter la reconnaissance de texte sur l'appareil à votre application à l'aide de ML Kit. La reconnaissance de texte sur l'appareil est idéale pour de nombreux cas d'utilisation, car elle fonctionne même lorsque votre application n'est pas connectée à Internet et qu'elle est suffisamment rapide pour être utilisée sur des images fixes ainsi que sur des images vidéo en direct.

6. Ajouter la détection des contours du visage sur l'appareil

Dans cette étape, nous allons ajouter une fonctionnalité à votre application pour reconnaître les contours des visages dans les images.

Configurer et exécuter la détection des contours du visage sur l'appareil dans une image

Ajoutez les éléments suivants à la méthode runFaceContourDetection de la classe MainActivity :

MainActivity.java

private void runFaceContourDetection() {
   InputImage image = InputImage.fromBitmap(mSelectedImage, 0);
   FaceDetectorOptions options =
           new FaceDetectorOptions.Builder()
                   .setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_FAST)
                   .setContourMode(FaceDetectorOptions.CONTOUR_MODE_ALL)
                   .build();

   mFaceButton.setEnabled(false);
   FaceDetector detector = FaceDetection.getClient(options);
   detector.process(image)
           .addOnSuccessListener(
                   new OnSuccessListener<List<Face>>() {
                       @Override
                       public void onSuccess(List<Face> faces) {
                           mFaceButton.setEnabled(true);
                           processFaceContourDetectionResult(faces);
                       }
                   })
           .addOnFailureListener(
                   new OnFailureListener() {
                       @Override
                       public void onFailure(@NonNull Exception e) {
                           // Task failed with an exception
                           mFaceButton.setEnabled(true);
                           e.printStackTrace();
                       }
                   });

}

Le code ci-dessus configure le détecteur de contour du visage et appelle la fonction processFaceContourDetectionResult avec la réponse.

Traiter la réponse de détection des contours du visage

Ajoutez le code suivant à processFaceContourDetectionResult dans la classe MainActivity pour analyser les résultats et les afficher dans votre application.

MainActivity.java

private void processFaceContourDetectionResult(List<Face> faces) {
   // Task completed successfully
   if (faces.size() == 0) {
       showToast("No face found");
       return;
   }
   mGraphicOverlay.clear();
   for (int i = 0; i < faces.size(); ++i) {
       Face face = faces.get(i);
       FaceContourGraphic faceGraphic = new FaceContourGraphic(mGraphicOverlay);
       mGraphicOverlay.add(faceGraphic);
       faceGraphic.updateFace(face);
   }
}

Exécuter l'application sur l'émulateur

Cliquez maintenant sur Run ( execute.png) dans la barre d'outils Android Studio. Une fois l'application chargée, assurez-vous que Test Image 2 (Face) est sélectionné dans le champ de liste déroulante, puis cliquez sur le bouton FIND FACE CONTOUR.

Votre application devrait maintenant ressembler à l'image ci-dessous, affichant les résultats de la détection des contours du visage et les contours du visage sous forme de points superposés à l'image d'origine.

f9ff2fcbf63f0f3b.png

Félicitations ! Vous venez d'ajouter la détection des contours du visage sur l'appareil à votre application à l'aide de ML Kit. La détection des contours du visage sur l'appareil est idéale pour de nombreux cas d'utilisation, car elle fonctionne même lorsque votre application n'est pas connectée à Internet et qu'elle est suffisamment rapide pour être utilisée sur des images fixes ainsi que sur des images vidéo en direct.

7. Félicitations !

Vous avez utilisé ML Kit pour ajouter facilement des fonctionnalités avancées de machine learning à votre application.

Points abordés

  • Ajouter ML Kit à votre application Android
  • Utiliser la reconnaissance de texte sur l'appareil dans ML Kit pour trouver du texte dans des images
  • Utiliser le contour du visage sur l'appareil dans ML Kit pour identifier les traits du visage dans des images

Étapes suivantes

  • Utilisez ML Kit dans votre propre application Android.

En savoir plus