Riconoscere testo e caratteristiche facciali con ML Kit: Android

1. Introduzione

ML Kit è un SDK per dispositivi mobili che porta l'esperienza di machine learning di Google nelle app Android e iOS in un pacchetto potente ma facile da usare. Che tu sia un principiante o un esperto di machine learning, puoi implementare facilmente la funzionalità di cui hai bisogno con poche righe di codice. Per iniziare, non è necessario avere una conoscenza approfondita delle reti neurali o dell'ottimizzazione dei modelli.

Se riscontri problemi (bug del codice, errori grammaticali, formulazione poco chiara e così via) mentre segui questo codelab, segnalali tramite il link Segnala un errore nell'angolo in basso a sinistra del codelab.

Come funziona?

ML Kit semplifica l'applicazione delle tecniche di ML nelle tue app riunendo le tecnologie di ML di Google, come Mobile Vision e TensorFlow Lite, in un unico SDK. Che tu abbia bisogno delle funzionalità in tempo reale dei modelli on-device di Mobile Vision o della flessibilità dei modelli TensorFlow Lite personalizzati, ML Kit è la soluzione che fa per te.

Questo codelab ti guiderà nella creazione della tua app per Android in grado di rilevare automaticamente il testo e i tratti del viso in un'immagine.

Cosa creerai

In questo codelab, creerai un'app per Android con ML Kit. La tua app sarà in grado di:

  • Utilizzare l'API Text Recognition di ML Kit per rilevare il testo nelle immagini
  • Utilizza l'API ML Kit Face Contour per identificare i tratti del viso nelle immagini

Cosa imparerai a fare

  • Come utilizzare l'SDK ML Kit per aggiungere facilmente funzionalità avanzate di machine learning come il riconoscimento del testo e il rilevamento delle caratteristiche del viso

Che cosa ti serve

  • Una versione recente di Android Studio (v3.0 o successive)
  • Emulatore Android Studio o un dispositivo Android fisico
  • Il codice campione
  • Conoscenza di base dello sviluppo Android in Java
  • Conoscenza di base dei modelli di machine learning

Questo codelab è incentrato su ML Kit. Concetti e blocchi di codice non pertinenti sono trattati solo superficialmente e sono forniti solo per operazioni di copia e incolla.

2. Preparazione

Scarica il codice

Fai clic sul seguente link per scaricare tutto il codice per questo codelab:

Decomprimi il file ZIP scaricato. Verrà estratta una cartella principale (mlkit-android-master) con tutte le risorse necessarie. Per questo codelab, ti serviranno solo le risorse nella sottodirectory vision.

La sottodirectory vision nel repository mlkit-android-master contiene due directory:

  • android_studio_folder.pngstarter: codice iniziale su cui si basa questo codelab.
  • android_studio_folder.pngfinal: codice completato per l'app di esempio finita.

3. Controllare le dipendenze per ML Kit

Verifica le dipendenze per ML Kit

Le seguenti righe dovrebbero essere già state aggiunte alla fine del file build.gradle nella directory app del progetto (controlla per confermare):

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'
}

Queste sono le dipendenze specifiche di ML Kit che devi implementare per le funzionalità di questo codelab.

4. Esegui l'app di base

Ora che hai importato il progetto in Android Studio e controllato le dipendenze per ML Kit, puoi eseguire l'app per la prima volta. Avvia l'emulatore Android Studio e fai clic su Esegui ( execute.png) nella barra degli strumenti di Android Studio.

L'app dovrebbe avviarsi sull'emulatore. A questo punto, dovresti vedere un layout di base con un campo a discesa che ti consente di scegliere tra tre immagini. Nella sezione successiva, aggiungerai il riconoscimento del testo alla tua app per identificare il testo nelle immagini.

5. Aggiungere il riconoscimento del testo sul dispositivo

In questo passaggio, aggiungeremo alla tua app la funzionalità di riconoscimento del testo nelle immagini.

Configurare ed eseguire il riconoscimento del testo on-device su un'immagine

Aggiungi quanto segue al metodo runTextRecognition della 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();
                       }
                   });
}

Il codice precedente configura il rilevatore di riconoscimento del testo e chiama la funzione processTextRecognitionResult con la risposta.

Elaborare la risposta del riconoscimento del testo

Aggiungi il seguente codice a processTextRecognitionResult nella classe MainActivity per analizzare i risultati e visualizzarli nella tua app.

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);

           }
       }
   }
}

Esegui l'app sull'emulatore

Ora fai clic su Esegui ( execute.png) nella barra degli strumenti di Android Studio. Una volta caricata l'app, assicurati che Test Image 1(Text) sia selezionato nel campo a discesa e fai clic sul pulsante FIND TEXT.

La tua app ora dovrebbe essere simile all'immagine qui sotto, che mostra i risultati del riconoscimento del testo e i rettangoli di selezione sovrapposti all'immagine originale.

10b12d0e8822eaf5.png

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

Congratulazioni, hai appena aggiunto il riconoscimento del testo sul dispositivo alla tua app utilizzando ML Kit. Il riconoscimento del testo sul dispositivo è ideale per molti casi d'uso, in quanto funziona anche quando l'app non ha connettività a internet ed è abbastanza veloce da essere utilizzato su immagini statiche e su frame video live.

6. Aggiungere il rilevamento del contorno del viso sul dispositivo

In questo passaggio, aggiungeremo alla tua app la funzionalità per riconoscere i contorni dei volti nelle immagini.

Configurare ed eseguire il rilevamento del contorno del viso su un'immagine sul dispositivo

Aggiungi quanto segue al metodo runFaceContourDetection della 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();
                       }
                   });

}

Il codice precedente configura il rilevatore del contorno del viso e chiama la funzione processFaceContourDetectionResult con la risposta.

Elaborare la risposta di rilevamento del contorno del viso

Aggiungi il seguente codice a processFaceContourDetectionResult nella classe MainActivity per analizzare i risultati e visualizzarli nella tua app.

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);
   }
}

Esegui l'app sull'emulatore

Ora fai clic su Esegui ( execute.png) nella barra degli strumenti di Android Studio. Una volta caricata l'app, assicurati che Test Image 2 (Face) sia selezionato nel campo a discesa e fai clic sul pulsante FIND FACE CONTOUR.

Ora la tua app dovrebbe avere l'aspetto dell'immagine qui sotto, che mostra i risultati del rilevamento del contorno del viso e i contorni del viso come punti sovrapposti all'immagine originale.

f9ff2fcbf63f0f3b.png

Congratulazioni, hai appena aggiunto il rilevamento del contorno del viso on-device alla tua app utilizzando ML Kit. Il rilevamento del contorno del volto sul dispositivo è ideale per molti casi d'uso, in quanto funziona anche quando l'app non ha connettività a internet ed è abbastanza veloce da essere utilizzato su immagini statiche e su frame video live.

7. Complimenti!

Hai utilizzato correttamente ML Kit per aggiungere facilmente funzionalità di machine learning avanzate alla tua app.

Argomenti trattati

  • Come aggiungere ML Kit alla tua app per Android
  • Come utilizzare il riconoscimento del testo su dispositivo in ML Kit per trovare il testo nelle immagini
  • Come utilizzare il contorno del viso sul dispositivo in ML Kit per identificare i tratti del viso nelle immagini

Passaggi successivi

  • Utilizza ML Kit nella tua app per Android.

Scopri di più