Guida al rilevamento della lingua per Android

L'attività MediaPipe Language Detector consente di identificare la lingua di una porzione di testo. Queste istruzioni mostrano come utilizzare il rilevatore della lingua con le app per Android. L'esempio di codice descritto in queste istruzioni è disponibile su GitHub.

Puoi vedere questa attività in azione visualizzando la demo. Per ulteriori informazioni sulle funzionalità, sui modelli e sulle opzioni di configurazione di questa attività, consulta la Panoramica.

Esempio di codice

Il codice di esempio per il rilevatore di lingue fornisce una semplice implementazione di questa attività come riferimento. Questo codice consente di testare l'attività e iniziare a creare la tua funzionalità di rilevamento del linguaggio. Puoi sfogliare il codice di esempio del rilevatore di lingua su GitHub.

Scarica il codice

Le seguenti istruzioni mostrano come creare una copia locale del codice di esempio utilizzando lo strumento a riga di comando per il controllo della versione git.

Per scaricare il codice di esempio:

  1. Clona il repository git utilizzando il seguente comando:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. Facoltativamente, configura l'istanza Git in modo da utilizzare il pagamento sparse, in modo da avere solo i file per l'app di esempio Language Detector:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/languagedetector/android
    

Per istruzioni su come configurare ed eseguire un esempio con Android Studio, consulta le istruzioni per la configurazione del codice di esempio nella Guida alla configurazione per Android.

Componenti chiave

I seguenti file contengono il codice fondamentale per l'app di esempio di classificazione del testo:

Configurazione

In questa sezione vengono descritti i passaggi chiave per configurare l'ambiente di sviluppo e codificare i progetti in modo specifico per l'utilizzo del rilevatore della lingua. Per informazioni generali sulla configurazione dell'ambiente di sviluppo per l'utilizzo delle attività di MediaPipe, inclusi i requisiti di versione della piattaforma, consulta la Guida alla configurazione per Android.

Dipendenze

Il rilevatore della lingua utilizza le librerie com.google.mediapipe:tasks-text. Aggiungi questa dipendenza al file build.gradle del tuo progetto di sviluppo di app Android. Puoi importare le dipendenze richieste con il seguente codice:

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

Modello

L'attività MediaPipe Language Detector richiede un modello addestrato compatibile con questa attività. Per ulteriori informazioni sui modelli addestrati disponibili per il rilevatore di linguaggio, consulta la sezione Modelli della panoramica delle attività.

Seleziona e scarica il modello, quindi archivialo all'interno della directory del progetto:

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

Specifica il percorso del modello all'interno del parametro ModelName.

Creare l'attività

Puoi utilizzare una delle funzioni createFrom...() per creare l'attività. La funzione createFromOptions() accetta le opzioni di configurazione per il rilevatore della lingua. Puoi anche inizializzare l'attività utilizzando la funzione di fabbrica di createFromFile(). La funzione createFromFile() accetta un percorso relativo o assoluto al file del modello addestrato. Per ulteriori informazioni sulla configurazione delle attività, consulta Opzioni di configurazione.

Il codice seguente mostra come creare e configurare questa attività.

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

Per un esempio di come creare un'attività, consulta la funzione initDetector() della classe LanguageDetectorHelper di esempio.

Opzioni di configurazione

Questa attività prevede le seguenti opzioni di configurazione per le app per Android:

Nome opzione Descrizione Intervallo di valori Valore predefinito
maxResults Imposta il numero massimo facoltativo di previsioni relative alla lingua con il punteggio più alto da restituire. Se questo valore è inferiore a zero, vengono restituiti tutti i risultati disponibili. Eventuali numeri positivi -1
scoreThreshold Imposta la soglia del punteggio di previsione che sostituisce quella fornita nei metadati del modello (se presenti). I risultati inferiori a questo valore vengono rifiutati. Qualsiasi elemento in virgola mobile Non impostata
categoryAllowlist Consente di impostare l'elenco facoltativo di codici lingua consentiti. Se il campo non è vuoto, le previsioni relative alle lingue il cui codice non è presente in questo set verranno filtrate. Questa opzione si escludono a vicenda con categoryDenylist e l'uso di entrambi genera un errore. Qualsiasi stringa Non impostata
categoryDenylist Consente di impostare l'elenco facoltativo di codici lingua non consentiti. Se il campo non è vuoto, le previsioni delle lingue il cui codice è incluso in questo set verranno omesse. Questa opzione si escluda a vicenda con categoryAllowlist e l'utilizzo di entrambe genera un errore. Qualsiasi stringa Non impostata

Preparazione dei dati

Rilevamento della lingua funziona con i dati di testo (String). L'attività gestisce la pre-elaborazione dell'input dei dati, tra cui la tokenizzazione e la pre-elaborazione tensor. L'intera pre-elaborazione viene gestita all'interno della funzione detect(). Non è necessaria ulteriore pre-elaborazione del testo di input.

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

Esegui l'attività

Il rilevatore della lingua utilizza il metodo LanguageDetector.detect() per elaborare il testo di input e prevedere la sua lingua. Dovresti utilizzare un thread di esecuzione separato per l'esecuzione del rilevamento in modo da evitare di bloccare il thread dell'interfaccia utente Android con la tua app.

Il codice seguente mostra come eseguire l'elaborazione con il modello di attività utilizzando un thread di esecuzione separato.

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

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

Per un esempio di come eseguire un'attività, consulta la funzione detect() di esempio di codice LanguageDetectorHelper.

Gestire e visualizzare i risultati

Il rilevatore della lingua restituisce un valore LanguageDetectorResult che consiste in un elenco di previsioni della lingua insieme alle probabilità di queste previsioni. Le categorie di lingue sono definite nel modello. Consulta la sezione Modelli della panoramica delle attività per maggiori dettagli sul modello in uso.

Di seguito è riportato un esempio dei dati di output di questa attività:

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

Eseguindo il modello sul testo di input, si ottiene questo risultato: "Il y a beaucoup de bouches qui parlent et fort peu de têtes qui pensent.".

Puoi vedere un esempio di come visualizzare i risultati nell'esempio di codice della classe ResultsAdapter e nella classe interna ViewHolder.