Mit ML Kit und CameraX die Sprache erkennen, die Sprache erkennen und Text übersetzen: Android

1. Einführung

ML Kit ist ein mobiles SDK, mit dem Sie die Technologie für das maschinelle Lernen von Google in einem leistungsstarken und dennoch benutzerfreundlichen Paket einfach auf Android- und Android-Apps anwenden können. Ganz gleich, ob Sie neu im Bereich des maschinellen Lernens sind oder bereits Erfahrung haben – Sie können die benötigten Funktionen ganz einfach mit nur wenigen Codezeilen implementieren. Sie benötigen kein tiefes Wissen über neuronale Netze oder Modelloptimierung, um loszulegen.

Wie funktioniert das?

Mit ML Kit können Sie ML-Techniken ganz einfach in Ihre Apps einbinden, da die ML-Technologien von Google wie Mobile Vision und TensorFlow Lite in einem einzigen SDK zusammengefasst sind. Ganz gleich, ob Sie die Echtzeitfunktionen der On-Device-Modelle von Mobile Vision oder die Flexibilität benutzerdefinierter TensorFlow Lite-Modelle benötigen – mit ML Kit ist das mit nur wenigen Codezeilen möglich.

In diesem Codelab wird in einfachen Schritten gezeigt, wie Sie Texterkennung, Spracherkennung und Übersetzung aus einem Echtzeit-Kamerabild in Ihre vorhandene Android-App einfügen. Außerdem werden Best Practices für die Verwendung von CameraX mit ML Kit-APIs vorgestellt.

Überblick

In diesem Codelab erstellen Sie eine Android-App mit ML Kit. Ihre App verwendet die On-Device-API zur Texterkennung von ML Kit, um Text aus dem Echtzeit-Kamerabild zu erkennen. Dabei wird die ML Kit Language Identification API verwendet, um die Sprache des erkannten Texts zu ermitteln. Schließlich wird dieser Text mit der ML Kit Translation API in eine von 59 Sprachen übersetzt.

Am Ende sollte die Ausgabe in etwa so aussehen wie im Bild unten.

e2a9b80f1ff442d7.png

Lerninhalte

  • So fügen Sie mit dem ML Kit SDK ganz einfach Funktionen für maschinelles Lernen in eine beliebige Android-App ein.
  • ML Kit-APIs für Texterkennung, Spracherkennung und Übersetzung sowie ihre Funktionen.
  • So verwenden Sie die CameraX-Bibliothek mit ML Kit APIs.

Voraussetzungen

  • Eine aktuelle Version von Android Studio (ab Version 4.0)
  • Ein physisches Android-Gerät
  • Der Beispielcode
  • Grundkenntnisse der Android-Entwicklung in Kotlin

In diesem Codelab geht es um ML Kit. Irrelevante Konzepte und Codeblöcke sind bereits für Sie vorhanden und implementiert.

2. Einrichtung

Code herunterladen

Klicken Sie auf den folgenden Link, um den gesamten Code für dieses Codelab herunterzuladen:

Entpacken Sie die heruntergeladene ZIP-Datei. Dadurch wird ein Stammordner (mlkit-android) mit allen erforderlichen Ressourcen entpackt. Für dieses Codelab benötigen Sie nur die Ressourcen im Unterverzeichnis translate.

Das Unterverzeichnis translate im Repository mlkit-android enthält das folgende Verzeichnis:

  • android_studio_folder.pngstarter: Der Startcode, auf dem Sie in diesem Codelab aufbauen.

3. Projekt importieren und ML Kit- und CameraX-Abhängigkeiten prüfen

Importieren Sie das Starterprojekt in Android Studio. Prüfen Sie, ob die erforderlichen ML Kit- und CameraX-Abhängigkeiten in der Datei app/build.gradle enthalten sind:

// CameraX dependencies
def camerax_version = "1.0.0-beta05"
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
implementation "androidx.camera:camera-view:1.0.0-alpha12"

// ML Kit dependencies
implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
implementation 'com.google.mlkit:language-id:16.0.0'
implementation 'com.google.mlkit:translate:16.0.0'

4. Start-App ausführen

Nachdem Sie das Projekt in Android Studio importiert und die ML Kit-Abhängigkeiten geprüft haben, können Sie die App zum ersten Mal ausführen. Klicken Sie in der Android Studio-Symbolleiste auf Ausführen ( execute.png).

Die App sollte auf Ihrem Gerät gestartet werden. Sie können die Kamera auf verschiedene Texte richten, um einen Livestream zu sehen. Die Texterkennungsfunktion ist jedoch noch nicht implementiert.

bd1489441c334de3.png

5. Texterkennung hinzufügen

In diesem Schritt fügen wir Ihrer App Funktionen hinzu, mit denen Text von der Videokamera erkannt werden kann.

ML Kit-Texterkennung instanziieren

Ersetzen Sie TODO oben in TextAnalyzer.kt, um TextRecognition zu instanziieren. So erhalten Sie ein Handle für die Texterkennung, das Sie in späteren Schritten verwenden können. Außerdem müssen wir den Detektor als Lifecycle-Observer hinzufügen, damit er richtig geschlossen wird, wenn er nicht mehr benötigt wird.

TextAnalyzer.kt

private val detector = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)

init {
   lifecycle.addObserver(detector)
}

Texterkennung für ein Eingabebild ausführen (mit Puffer von der Kamera erstellt)

Die CameraX-Bibliothek stellt einen Stream von Bildern von der Kamera bereit, die für die Bildanalyse verwendet werden können. Ersetzen Sie die recognizeText()-Methode in der TextAnalyzer-Klasse, um die Texterkennung von ML Kit für jeden Bildframe zu verwenden.

TextAnalyzer.kt

private fun recognizeText(
   image: InputImage
): Task<Text> {
   // Pass image to an ML Kit Vision API
   return detector.process(image)
       .addOnSuccessListener { text ->
           // Task completed successfully
           result.value = text.text
       }
       .addOnFailureListener { exception ->
           // Task failed with an exception
           Log.e(TAG, "Text recognition error", exception)
           val message = getErrorMessage(exception)
           message?.let {
               Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
           }
       }
}

In der folgenden Zeile sehen Sie, wie wir die oben genannte Methode aufrufen, um die Texterkennung zu starten. Fügen Sie am Ende der Methode analyze() die folgende Zeile hinzu. Sie müssen imageProxy.close aufrufen, sobald die Analyse des Bildes abgeschlossen ist. Andernfalls können keine weiteren Bilder aus dem Live-Kamerafeed analysiert werden.

TextAnalyzer.kt

recognizeText(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
   imageProxy.close()
}

App auf Ihrem Gerät ausführen

Klicken Sie jetzt in der Android Studio-Symbolleiste auf Ausführen ( execute.png). Sobald die App geladen ist, sollte sie in Echtzeit Text von der Kamera erkennen. Richten Sie die Kamera auf einen beliebigen Text, um die Bestätigung zu erhalten. Wenn Ihre App keinen Text erkennt, versuchen Sie, die Erkennung zurückzusetzen, indem Sie die Kamera auf eine leere Stelle richten, bevor Sie sie auf Text richten.

6. Spracherkennung hinzufügen

ML Kit-Sprachbezeichner instanziieren

MainViewModel.kt befindet sich im Hauptordner. Rufen Sie die Datei auf und fügen Sie MainViewModel.kt das folgende Feld hinzu. So erhalten Sie einen Handle für die Sprach-ID, die Sie im nächsten Schritt verwenden können.

MainViewModel.kt

private val languageIdentifier = LanguageIdentification.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)

Außerdem sollten Sie darauf achten, dass die Clients ordnungsgemäß heruntergefahren werden, wenn sie nicht mehr benötigt werden. Überschreiben Sie dazu die onCleared()-Methode von ViewModel.

MainViewModel.kt

override fun onCleared() {
   languageIdentifier.close()
   translators.evictAll()
}

Spracherkennung auf dem Gerät für den erkannten Text ausführen

Mit dem ML Kit Language Identifier können Sie die Sprache des erkannten Texts im Bild ermitteln.

Ersetzen Sie das TODO in der Felddefinition sourceLang in MainViewModel.kt durch den folgenden Code. In diesem Snippet wird die Methode zur Spracherkennung aufgerufen und das Ergebnis zugewiesen, wenn es nicht undefiniert („und“) ist. Eine nicht definierte Sprache bedeutet, dass die API die Sprache anhand der Liste der unterstützten Sprachen nicht identifizieren konnte.

MainViewModel.kt

val sourceLang = Transformations.switchMap(sourceText) { text ->
   val result = MutableLiveData<Language>()
   languageIdentifier.identifyLanguage(text)
       .addOnSuccessListener { languageCode ->
           if (languageCode != "und")
               result.value = Language(languageCode)
       }
   result
}

App auf Ihrem Gerät ausführen

Klicken Sie jetzt in der Android Studio-Symbolleiste auf Ausführen ( execute.png). Sobald die App geladen ist, sollte sie in Echtzeit Text von der Kamera erkennen und die Sprache des Texts identifizieren. Richten Sie die Kamera auf einen beliebigen Text, um die Bestätigung zu erhalten.

7. Übersetzung hinzufügen

Ersetzen Sie die Funktion translate() in MainViewModel.kt durch den folgenden Code. Diese Funktion verwendet den Wert für die Ausgangssprache, den Wert für die Zielsprache und den Quelltext und führt die Übersetzung durch. Wenn das ausgewählte Zielsprachenmodell noch nicht auf das Gerät heruntergeladen wurde, rufen wir downloadModelIfNeeded() auf, um dies zu tun, und fahren dann mit der Übersetzung fort.

MainViewModel.kt

private fun translate(): Task<String> {
   val text = sourceText.value
   val source = sourceLang.value
   val target = targetLang.value
   if (modelDownloading.value != false || translating.value != false) {
       return Tasks.forCanceled()
   }
   if (source == null || target == null || text == null || text.isEmpty()) {
       return Tasks.forResult("")
   }
   val sourceLangCode = TranslateLanguage.fromLanguageTag(source.code)
   val targetLangCode = TranslateLanguage.fromLanguageTag(target.code)
   if (sourceLangCode == null || targetLangCode == null) {
       return Tasks.forCanceled()
   }
   val options = TranslatorOptions.Builder()
       .setSourceLanguage(sourceLangCode)
       .setTargetLanguage(targetLangCode)
       .build()
   val translator = translators[options]
   modelDownloading.setValue(true)

   // Register watchdog to unblock long running downloads
   Handler().postDelayed({ modelDownloading.setValue(false) }, 15000)
   modelDownloadTask = translator.downloadModelIfNeeded().addOnCompleteListener {
       modelDownloading.setValue(false)
   }
   translating.value = true
   return modelDownloadTask.onSuccessTask {
       translator.translate(text)
   }.addOnCompleteListener {
       translating.value = false
   }
}

App im Simulator ausführen

Klicken Sie jetzt in der Android Studio-Symbolleiste auf Ausführen ( execute.png). Nachdem die App geladen wurde, sollte sie wie im folgenden Bild aussehen. Dort sind die Texterkennung, die Ergebnisse der erkannten Sprache und der übersetzte Text in der ausgewählten Sprache zu sehen. Sie können eine der 59 Sprachen auswählen.

e2a9b80f1ff442d7.png

8. Glückwunsch!

Herzlichen Glückwunsch! Sie haben Ihrer App mit ML Kit gerade die Texterkennung auf dem Gerät, die Spracherkennung und die Übersetzung hinzugefügt. Sie können jetzt Text und seine Sprache im Live-Kamerafeed erkennen und diesen Text in Echtzeit in eine von Ihnen ausgewählte Sprache übersetzen lassen.

Behandelte Themen

  • ML Kit in Ihre Android-App einbinden
  • Texterkennung auf dem Gerät in ML Kit verwenden, um Text in Bildern zu erkennen
  • Sprache von Text mit der Spracherkennung auf dem Gerät in ML Kit erkennen
  • Text mit der On-Device-Übersetzung in ML Kit dynamisch in 59 Sprachen übersetzen
  • CameraX in Verbindung mit ML Kit APIs verwenden

Nächste Schritte

  • ML Kit und CameraX in Ihrer eigenen Android-App verwenden

Weitere Informationen