Leitfaden zur Spracherkennung für Android

Mit der Aufgabe „MediaPipe Language Detector“ können Sie die Sprache eines Textabschnitts ermitteln. In dieser Anleitung erfahren Sie, wie Sie den Language Detector mit Android-Apps verwenden. Das in dieser Anleitung beschriebene Codebeispiel ist auf GitHub verfügbar.

In der Demo können Sie sich diese Aufgabe in Aktion ansehen. Weitere Informationen zu den Funktionen, Modellen und Konfigurationsoptionen dieser Aufgabe finden Sie in der Übersicht.

Codebeispiel

Der Beispielcode für die Spracherkennung bietet eine einfache Implementierung dieser Aufgabe. Mit diesem Code können Sie diese Aufgabe testen und mit dem Erstellen Ihres eigenen Spracherkennungsfeatures beginnen. Sie können den Beispielcode für die Spracherkennung auf GitHub ansehen.

Code herunterladen

Die folgende Anleitung zeigt, wie Sie mit dem git-Befehlszeilentool zur Versionsverwaltung eine lokale Kopie des Beispielcodes erstellen können.

So laden Sie den Beispielcode herunter:

  1. Klonen Sie das Git-Repository mit dem folgenden Befehl:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. Konfigurieren Sie optional die Git-Instanz für die Verwendung von Sparse Checkout, sodass Sie nur die Dateien für die Language Detector-Beispielanwendung haben:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/languagedetector/android
    

Eine Anleitung zum Einrichten und Ausführen eines Beispiels mit Android Studio finden Sie in der Anleitung zum Einrichten des Beispielcodes im Einrichtungsleitfaden für Android.

Schlüsselkomponenten

Die folgenden Dateien enthalten den wichtigen Code für die Beispiel-App zur Textklassifizierung:

Einrichtung

In diesem Abschnitt werden die wichtigsten Schritte zum Einrichten Ihrer Entwicklungsumgebung und Codeprojekte speziell für die Verwendung von Language Detector beschrieben. Allgemeine Informationen zum Einrichten der Entwicklungsumgebung für die Verwendung von MediaPipe-Aufgaben, einschließlich der Anforderungen an die Plattformversion, finden Sie im Einrichtungsleitfaden für Android.

Abhängigkeiten

Der Language Detector verwendet die com.google.mediapipe:tasks-text-Bibliotheken. Füge diese Abhängigkeit in die Datei build.gradle deines Android-App-Entwicklungsprojekts ein. Sie können die erforderlichen Abhängigkeiten mit dem folgenden Code importieren:

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

Modell

Die MediaPipe-Spracherkennung erfordert ein trainiertes Modell, das mit dieser Aufgabe kompatibel ist. Weitere Informationen zu verfügbaren trainierten Modellen für Language Detector finden Sie in der Aufgabenübersicht im Abschnitt „Modelle“.

Wählen Sie das Modell aus, laden Sie es herunter und speichern Sie es dann in Ihrem Projektverzeichnis:

<dev-project-root>/src/main/assets

Geben Sie den Pfad des Modells innerhalb des Parameters ModelName an.

Aufgabe erstellen

Sie können eine der createFrom...()-Funktionen verwenden, um die Aufgabe zu erstellen. Die Funktion createFromOptions() akzeptiert Konfigurationsoptionen für den Sprachdetektor. Sie können die Aufgabe auch mit der Factory-Funktion createFromFile() initialisieren. Die Funktion createFromFile() akzeptiert einen relativen oder absoluten Pfad zur Datei des trainierten Modells. Weitere Informationen zum Konfigurieren von Aufgaben finden Sie unter Konfigurationsoptionen.

Der folgende Code zeigt, wie diese Aufgabe erstellt und konfiguriert wird.

// For creating a language detector instance:
LanguageDetectorOptions options =
       LanguageDetectorOptions.builder()
       .setBaseOptions(
          BaseOptions.builder()
            .setModelAssetPath(modelPath)
            .build()
          )
       .build();
LanguageDetector languageDetector = LanguageDetector.createFromOptions(context, options);

Ein Beispiel für das Erstellen einer Aufgabe finden Sie in der Codebeispiel-Klasse initDetector() der Klasse LanguageDetectorHelper.

Konfigurationsoptionen

Diese Aufgabe umfasst die folgenden Konfigurationsoptionen für Android-Apps:

Option Beschreibung Wertebereich Standardwert
maxResults Legt die optionale maximale Anzahl von Sprachvorhersagen mit den besten Bewertungen fest, die zurückgegeben werden sollen. Wenn dieser Wert kleiner als null ist, werden alle verfügbaren Ergebnisse zurückgegeben. Beliebige positive Zahlen -1
scoreThreshold Legt den Schwellenwert für den Vorhersagewert fest, der den in den Modellmetadaten angegebenen Grenzwert überschreibt (falls vorhanden). Ergebnisse unter diesem Wert werden abgelehnt. Beliebige Gleitkommazahl Nicht festgelegt
categoryAllowlist Legt die optionale Liste der zulässigen Sprachcodes fest. Wenn das Feld nicht leer ist, werden Sprachvorhersagen herausgefiltert, deren Sprachcode nicht in diesem Dataset enthalten ist. Diese Option und categoryDenylist schließen sich gegenseitig aus und die Verwendung beider Werte führt zu einem Fehler. Beliebige Strings Nicht festgelegt
categoryDenylist Legt die optionale Liste der unzulässigen Sprachcodes fest. Wenn das Feld nicht leer ist, werden Sprachvorhersagen herausgefiltert, deren Sprachcode in diesem Satz enthalten ist. Diese Option und categoryAllowlist schließen sich gegenseitig aus und die Verwendung beider Werte führt zu einem Fehler. Beliebige Strings Nicht festgelegt

Daten vorbereiten

Language Detector arbeitet mit Textdaten (String). Die Aufgabe übernimmt die Vorverarbeitung der Dateneingabe, einschließlich Tokenisierung und Tensor-Vorverarbeitung. Die gesamte Vorverarbeitung erfolgt in der detect()-Funktion. Es ist keine zusätzliche Vorverarbeitung des Eingabetexts im Voraus erforderlich.

String inputText = "Some input text for the language detector";

Task ausführen

Der Language Detector verwendet die Methode LanguageDetector.detect(), um Eingabetext zu verarbeiten und die Sprache des Textes vorherzusagen. Sie sollten zum Ausführen der Erkennung einen separaten Ausführungsthread verwenden, um zu verhindern, dass der Thread der Android-Benutzeroberfläche durch Ihre Anwendung blockiert wird.

Der folgende Code zeigt, wie die Verarbeitung mit dem Aufgabenmodell unter Verwendung eines separaten Ausführungsthreads ausgeführt wird.

// Predict the language of the input text.
fun classify(text: String) {
    executor = ScheduledThreadPoolExecutor(1)

    executor.execute {
        val results = languageDetector.detect(text)
        listener.onResult(results)
    }
}

Ein Beispiel für das Ausführen einer Aufgabe finden Sie in der Codebeispiel-Klasse detect() der Klasse LanguageDetectorHelper.

Ergebnisse verarbeiten und anzeigen

Der Sprachdetektor gibt eine LanguageDetectorResult aus, die aus einer Liste von Sprachvorhersagen und den Wahrscheinlichkeiten für diese Vorhersagen besteht. Die Sprachkategorien sind im Modell definiert. Detaillierte Informationen zu dem von Ihnen verwendeten Modell finden Sie in der Aufgabenübersicht im Abschnitt „Modelle“.

Im Folgenden sehen Sie ein Beispiel für die Ausgabedaten dieser Aufgabe:

LanguageDetectorResult:
  LanguagePrediction #0:
    language_code: "fr"
    probability: 0.999781

Dieses Ergebnis erhalten Sie, indem Sie das Modell für den Eingabetext ausführen: "Il y a beaucoup de bouches qui parlent et fort peu de têtes qui pensent.".

Ein Beispiel für die Anzeige von Ergebnissen finden Sie in der Codebeispiel-Klasse ResultsAdapter und der inneren Klasse ViewHolder.