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

ML Kit ist ein mobiles SDK, das die Expertise von Google im Bereich maschinelles Lernen in einem leistungsstarken und dennoch benutzerfreundlichen Paket für Android- und Android-Apps verfügbar macht. Egal, ob Sie neu im Bereich maschinelles Lernen sind oder bereits Erfahrung haben, Sie können die benötigten Funktionen ganz einfach mit wenigen Codezeilen implementieren. Sie benötigen keine fundierten Kenntnisse über neuronale Netze oder Modelloptimierung, um loszulegen.

Wie funktioniert das?

Mit ML Kit können Sie ML-Techniken ganz einfach in Ihren Apps anwenden, da die ML-Technologien von Google wie Mobile Vision und TensorFlow Lite in einem einzigen SDK zusammengefasst sind. Ganz gleich, ob Sie die Leistungsfähigkeit der 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 zeigen wir Ihnen Schritt für Schritt, wie Sie Ihrer vorhandenen Android-App Texterkennung, Spracherkennung und Übersetzung aus einem Echtzeit-Kamerafeed hinzufügen. Außerdem werden Best Practices für die Verwendung von CameraX mit ML Kit APIs erläutert.

Was Sie erstellen

In diesem Codelab erstellen Sie eine Android-App mit ML Kit. Ihre App verwendet die On-Device API der ML Kit Text Recognition, um Text aus dem Echtzeit-Kamerafeed zu erkennen. Dazu wird die ML Kit Language Identification API verwendet, um die Sprache des erkannten Texts zu identifizieren. Anschließend übersetzt Ihre App diesen Text mithilfe der ML Kit Translation API in eine von 59 möglichen Sprachen.

Am Ende sollte das Bild in etwa so aussehen:

Lerninhalte

  • Mit dem ML Kit SDK können Sie jeder Android-App ganz einfach Funktionen für maschinelles Lernen hinzufügen.
  • ML Kit-Texterkennung, Spracherkennung, Übersetzungs-APIs und ihre Funktionen
  • CameraX-Bibliothek mit ML Kit APIs verwenden

Voraussetzungen

  • Eine aktuelle Version von Android Studio (Version 4.0 oder höher)
  • Ein physisches Android-Gerät
  • Beispielcode
  • Grundkenntnisse in der Android-Entwicklung mit Kotlin

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

Code herunterladen

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

Quellcode herunterladen

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.

Prüfen Sie in der Datei app/build.gradle, ob die erforderlichen ML Kit- und CameraX-Abhängigkeiten 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'

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. Starten Sie den Android Studio-Emulator und klicken Sie in der Android Studio-Symbolleiste auf Ausführen (execute.png).

Die App sollte auf Ihrem Gerät gestartet werden und Sie können die Kamera auf verschiedenen Text richten, um einen Livefeed zu sehen. Die Texterkennungsfunktion wurde jedoch noch nicht implementiert.

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

ML Kit-Texterkennung instanziieren

Fügen Sie das folgende Feld oben in TextAnalyzer.kt hinzu. So erhalten Sie einen Handle für den Texterkennungsdienst, den Sie in späteren Schritten verwenden können.

TextAnalyzer.kt

private val detector = TextRecognition.getClient()

On-Device-Texterkennung auf einem Vision-Bild ausführen ( mit dem Buffer der Kamera erstellt)

Die CameraX-Bibliothek stellt einen Stream von Bildern von der Kamera bereit, der für die Bildanalyse verwendet werden kann. Ersetzen Sie die Methode recognizeTextOnDevice() in der Klasse „TextAnalyzer“, um die ML Kit-Texterkennung auf jedem Bildframe anzuwenden.

TextAnalyzer.kt

private fun recognizeTextOnDevice(
   image: InputImage
): Task<Text> {
   // Pass image to an ML Kit Vision API
   return detector.process(image)
       .addOnSuccessListener { visionText ->
           // Task completed successfully
           result.value = visionText.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 wird gezeigt, wie die obige Methode aufgerufen wird, um die Texterkennung zu starten. Fügen Sie am Ende der Methode analyze() die folgende Zeile hinzu. Hinweis: Sie müssen imageProxy.close aufrufen, sobald die Analyse des Bildes abgeschlossen ist. Andernfalls können über den Live-Kamerafeed keine weiteren Bilder zur Analyse verarbeitet werden.

TextAnalyzer.kt

recognizeTextOnDevice(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 Text in Echtzeit von der Kamera erkennen. Richten Sie die Kamera zur Bestätigung auf einen beliebigen Text.

ML Kit-Sprachbezeichner instanziieren

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.

MainViewModel.kt

private val languageIdentification = LanguageIdentification.getClient()

On-Device-Spracherkennung für den erkannten Text ausführen

Verwenden Sie die ML Kit Language Identifier, um die Sprache des erkannten Texts aus dem Bild abzurufen.

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, sofern es nicht undefiniert ist („und“).

MainViewModel.kt

languageIdentification.identifyLanguage(text)
   .addOnSuccessListener {
       if (it != "und")
           result.value = Language(it)
   }

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 Text von der Kamera erkennen und die Sprache des Texts in Echtzeit identifizieren. Richten Sie die Kamera zur Bestätigung auf einen beliebigen Text.

Ersetzen Sie die Funktion translate() in MainViewModel.kt durch den folgenden Code. Diese Funktion führt die Übersetzung aus, indem sie den Wert der Ausgangssprache, den Wert der Zielsprache und den Quelltext verwendet. Wenn das Modell für die ausgewählte Zielsprache noch nicht auf das Gerät heruntergeladen wurde, wird downloadModelIfNeeded() aufgerufen, um dies zu tun. Anschließend wird mit der Übersetzung fortgefahren.

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). Nach dem Laden sollte die App jetzt wie im bewegten Bild unten aussehen. Hier sind die Ergebnisse der Texterkennung und der erkannten Sprache sowie der übersetzte Text in der ausgewählten Sprache zu sehen. Sie können eine der 59 Sprachen auswählen.

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

Behandelte Themen

  • ML Kit zur Android-App hinzufügen
  • On-Device-Texterkennung in ML Kit verwenden, um Text in Bildern zu erkennen
  • On-Device-Spracherkennung in ML Kit verwenden, um die Sprache von Text zu ermitteln
  • On-Device-Übersetzung in ML Kit verwenden, um Text dynamisch in 59 Sprachen zu übersetzen
  • CameraX in Verbindung mit ML Kit APIs verwenden

Nächste Schritte

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

Weitere Informationen