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

1. Einführung

ML Kit ist ein mobiles SDK, das das Fachwissen von Google im Bereich maschinelles Lernen in einem leistungsstarken und dennoch nutzerfreundlichen Paket für Android- und Android-Apps einbringt. Ganz gleich, ob Sie noch keine Erfahrung mit maschinellem Lernen haben – die Funktionalität, die Sie benötigen, lässt sich mit nur wenigen Codezeilen implementieren. Sie brauchen kein tiefes Wissen über neuronale Netzwerke oder Modelloptimierung, um loszulegen.

Wie funktioniert das?

ML Kit erleichtert die Anwendung von ML-Techniken in Ihren Apps, indem es die ML-Technologien von Google wie Mobile Vision und TensorFlow Lite in einem einzigen SDK vereint. Ganz gleich, ob Sie die Echtzeitfunktionen der On-Device-Modelle von Mobile Vision oder die Flexibilität benutzerdefinierter TensorFlow Lite-Modelle benötigen – ML Kit ermöglicht es Ihnen mit nur wenigen Codezeilen.

Dieses Codelab führt dich durch einfache Schritte, um deiner bestehenden Android-App Texterkennung, Spracherkennung und Übersetzung aus dem Echtzeit-Kamerafeed hinzuzufügen. In diesem Codelab werden auch Best Practices für die Verwendung von CameraX mit ML Kit-APIs vorgestellt.

Überblick

In diesem Codelab entwickeln Sie eine Android-App mit ML Kit. Ihre App verwendet die ML Kit Text Recognition API auf dem Gerät, um Text aus dem Echtzeit-Kamerafeed zu erkennen. Mithilfe der ML Kit Language Identification API wird die Sprache des erkannten Texts ermittelt. Abschließend übersetzt Ihre App diesen Text mithilfe der ML Kit Translation API in eine von 59 Optionen in eine beliebige ausgewählte Sprache.

Am Ende sollten Sie ein ähnliches Bild wie in der Abbildung unten sehen.

e2a9b80f1ff442d7.png

Aufgaben in diesem Lab

  • Mit dem ML Kit SDK jede Android-App einfach um Funktionen für maschinelles Lernen ergänzen.
  • ML Kit-Texterkennung, -Spracherkennung, Translation 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 der Android-Entwicklung in Kotlin

In diesem Codelab geht es um ML Kit. Irrelevante Konzepte und Codeblöcke wurden bereits bereitgestellt und für Sie 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 der Stammordner (mlkit-android) mit allen benötigten 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: Code wird gestartet, auf dem Sie in diesem Codelab aufbauen.

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

Importieren Sie das Startprojekt in Android Studio. 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'

4. Start-App ausführen

Nachdem Sie das Projekt in Android Studio importiert und auf 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 und Sie können die Kamera auf verschiedenen Text richten, um einen Livefeed zu sehen. Die Texterkennungsfunktion wurde 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 wird.

ML Kit-Textdetektor instanziieren

Ersetzen Sie TODO oben in TextAnalyzer.kt, um TextRecognition zu instanziieren. Auf diese Weise erhältst du einen Handle zur Texterkennung, den du in späteren Schritten verwenden kannst. Außerdem müssen wir den Detektor als Beobachter des Lebenszyklus hinzufügen, damit er ordnungsgemäß geschlossen werden kann, wenn er nicht mehr benötigt wird.

TextAnalyzer.kt

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

init {
   lifecycle.addObserver(detector)
}

Texterkennung auf einem Eingabebild ausführen (mit Puffer von der Kamera erstellt)

Die CameraX-Bibliothek stellt einen Stream von Bildern der Kamera für die Bildanalyse bereit. Ersetzen Sie die Methode recognizeText() in der Text Analyzer-Klasse, um die ML Kit-Texterkennung 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()
           }
       }
}

Die folgende Zeile zeigt, wie wir die obige Methode aufrufen, um mit der Texterkennung zu beginnen. Fügen Sie am Ende der Methode analyze() die folgende Zeile ein. 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

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

App auf dem 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 in Echtzeit erkennen. Richten Sie die Kamera auf einen beliebigen Text, um den Vorgang zu bestätigen. Wenn deine App keinen Text erkennt, versuche es mit „Zurücksetzen“. der Erkennung, indem Sie die Kamera auf eine leere Stelle richten, bevor Sie sie auf den Text richten.

6. Sprachidentifikation hinzufügen

ML Kit-Sprachkennzeichnung instanziieren

MainViewModel.kt“ befindet sich im Hauptordner. Rufen Sie die Datei auf und fügen Sie das folgende Feld zu MainViewModel.kt hinzu. So erhältst du ein Handle für die Sprachkennung, das im nächsten Schritt verwendet werden soll.

MainViewModel.kt

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

Darüber hinaus sollten Sie sicherstellen, dass die Clients ordnungsgemäß heruntergefahren werden, wenn sie nicht mehr benötigt werden. Dazu überschreiben Sie die Methode onCleared() von ViewModel.

MainViewModel.kt

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

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

Verwenden Sie den ML Kit-Sprach-Identifikator, um die Sprache des erkannten Textes aus dem Bild abzurufen.

Ersetzen Sie TODO in der Definition des Felds sourceLang in MainViewModel.kt durch den folgenden Code. Dieses Snippet ruft die Methode zur Spracherkennung auf und weist das Ergebnis zu, wenn es nicht definiert ist ("und"). 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 dem Gerät ausführen

Klicken Sie jetzt in der Android Studio-Symbolleiste auf Ausführen ( execute.png). Sobald die App geladen wurde, sollte sie Text von der Kamera erkennen und die Sprache des Textes in Echtzeit erkennen. Richten Sie die Kamera auf einen beliebigen Text, um den Vorgang zu bestätigen.

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 Ausgangstext und führt die Übersetzung durch. Wenn das ausgewählte Sprachmodell der Zielsprache noch nicht auf das Gerät heruntergeladen wurde, rufen wir dazu downloadModelIfNeeded() auf 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 das animierte Bild unten mit den Ergebnissen der Texterkennung und der erkannten Sprache sowie dem übersetzten Text in der ausgewählten Sprache aussehen. Sie können eine der 59 Sprachen auswählen.

e2a9b80f1ff442d7.png

8. Glückwunsch!

Herzlichen Glückwunsch! Sie haben Ihrer App gerade mithilfe von ML Kit Texterkennung, Spracherkennung und Übersetzung auf dem Gerät hinzugefügt. Du kannst jetzt Text und die zugehörige Sprache aus dem Live-Kamerafeed erkennen und in Echtzeit in eine von dir ausgewählte Sprache übersetzen.

Behandelte Themen

  • So fügen Sie Ihrer Android-App ML Kit hinzu
  • So verwenden Sie die Texterkennung auf dem Gerät in ML Kit, um Text in Bildern zu erkennen
  • Mit der Spracherkennung auf dem Gerät in ML Kit die Sprache eines Textes erkennen
  • Mit der On-Device-Übersetzung in ML Kit Text dynamisch in 59 Sprachen übersetzen
  • CameraX in Verbindung mit ML Kit APIs verwenden

Nächste Schritte

  • Verwenden Sie ML Kit und CameraX in Ihrer eigenen Android-App.

Weitere Informationen