Riconosci, identifica il linguaggio e traduci il testo con ML Kit e CameraX: Android

ML Kit è un SDK mobile che offre le competenze di machine learning di Google ad Android e alle app per Android in un pacchetto potente, ma facile da utilizzare. Che tu abbia esperienza o meno con il machine learning, puoi implementare facilmente la funzionalità di cui hai bisogno in poche righe di codice. Per iniziare non è necessaria una conoscenza approfondita delle reti neurali o dell'ottimizzazione dei modelli.

Come funziona?

ML Kit semplifica l'applicazione delle tecniche di ML nelle tue app combinando le tecnologie di ML di Google, come Mobile Vision e TensorFlow Lite, in un unico SDK. Che tu abbia bisogno della potenza delle funzionalità in tempo reale dei modelli on-device di Mobile Vision o della flessibilità dei modelli TensorFlow Lite personalizzati, ML Kit lo rende possibile con poche righe di codice.

Questo codelab ti guiderà attraverso semplici passaggi per aggiungere il riconoscimento del testo, l'identificazione della lingua e la traduzione dal feed della fotocamera in tempo reale alla tua app Android esistente. Questo codelab evidenzierà inoltre le best practice per l'utilizzo di CameraX con le API ML Kit.

Che cosa creerai

In questo codelab, creerai un'app per Android con ML Kit. L'app utilizzerà l'API on-device ML Kit Text Recognition per riconoscere il testo dal feed della fotocamera in tempo reale. Utilizzerà l'API ML Kit Language Identification per identificare la lingua del testo riconosciuto. Infine, l'app tradurrà questo testo in una delle 59 lingue disponibili utilizzando l'API Translation di ML Kit.

Alla fine, dovresti vedere qualcosa di simile all'immagine di seguito.

Cosa imparerai

  • Come utilizzare l'SDK ML Kit per aggiungere facilmente funzionalità di machine learning a qualsiasi app per Android.
  • ML Kit, riconoscimento del testo, identificazione della lingua, API di traduzione e relative funzionalità.
  • Come utilizzare la libreria CameraX con le API ML Kit.

Occorrente

  • Una versione recente di Android Studio (v4.0 o successive)
  • Un dispositivo Android fisico
  • Il codice di esempio
  • Conoscenza di base dello sviluppo Android in Kotlin

Questo codelab è incentrato su ML Kit. I concetti e i blocchi di codice non pertinenti sono già forniti e implementati per te.

Scarica il codice

Fai clic sul link seguente per scaricare tutto il codice di questo codelab:

Scarica il codice sorgente

Estrai il file ZIP scaricato. Verrà scompattata una cartella principale (mlkit-android) con tutte le risorse necessarie. Per questo codelab, ti serviranno solo le risorse nella sottodirectory translate.

La sottodirectory translate nel repository mlkit-android contiene la seguente directory:

  • android_studio_folder.pngstarter: il codice di avvio su cui lavorare in questo codelab.

Nel file app/build.gradle, verifica che siano incluse le dipendenze ML Kit e CameraX necessarie:

// 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'

Ora che hai importato il progetto in Android Studio e controllato le dipendenze di ML Kit, puoi eseguire l'app per la prima volta. Avvia l'emulatore Android Studio e fai clic su Esegui (execute.png) nella barra degli strumenti di Android Studio.

L'app dovrebbe avviarsi sul tuo dispositivo e potrai puntare la videocamera su vari testi per vedere un feed in diretta, ma la funzionalità di riconoscimento del testo non è ancora stata implementata.

In questo passaggio aggiungeremo alla tua app la funzionalità di riconoscimento del testo dalla videocamera.

Eseguire l'inizializzazione del Rilevamento testo di ML Kit

Aggiungi il seguente campo nella parte superiore di TextAnalyzer.kt. In questo modo ottieni un handle per il riconoscitore di testo da utilizzare nei passaggi successivi.

TextAnalyzer.kt

private val detector = TextRecognition.getClient()

Eseguire il riconoscimento del testo sul dispositivo su un'immagine Vision ( creata con il buffer della fotocamera)

La libreria CameraX fornisce uno stream di immagini dalla fotocamera pronto per l'analisi delle immagini. Sostituisci il metodo recognizeTextOnDevice() nella classe TextAnalyzer per utilizzare il riconoscimento del testo di ML Kit su ogni frame dell'immagine.

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()
           }
       }
}

La riga seguente mostra come chiamiamo il metodo precedente per iniziare a eseguire il riconoscimento del testo. Aggiungi la seguente riga alla fine del metodo analyze(). Tieni presente che devi chiamare imageProxy.close al termine dell'analisi dell'immagine, altrimenti il feed della videocamera in diretta non potrà elaborare altre immagini per l'analisi.

TextAnalyzer.kt

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

Eseguire l'app sul dispositivo

Ora fai clic su Esegui (execute.png) nella barra degli strumenti di Android Studio. Una volta caricata, l'app dovrebbe iniziare a riconoscere il testo dalla fotocamera in tempo reale. Inquadra con la fotocamera un testo qualsiasi per confermare.

Eseguire l'inizializzazione dell'identificatore lingua di ML Kit

Aggiungi il seguente campo a MainViewModel.kt. In questo modo ottieni un handle per l'identificatore della lingua da utilizzare nel passaggio successivo.

MainViewModel.kt

private val languageIdentification = LanguageIdentification.getClient()

Eseguire l'identificazione della lingua sul dispositivo sul testo rilevato

Utilizza l'identificatore di lingua di ML Kit per ottenere la lingua del testo rilevato dall'immagine.

Sostituisci il TODO nella definizione del campo sourceLang in MainViewModel.kt con il seguente codice. Questo snippet chiama il metodo di identificazione della lingua e assegna il risultato se non è non definito ("und").

MainViewModel.kt

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

Eseguire l'app sul dispositivo

Ora fai clic su Esegui (execute.png) nella barra degli strumenti di Android Studio. Una volta caricata, l'app dovrebbe iniziare a riconoscere il testo dalla fotocamera e a identificare la lingua del testo in tempo reale. Inquadra con la fotocamera un testo qualsiasi per confermare.

Sostituisci la funzione translate() in MainViewModel.kt con il seguente codice. Questa funzione prende il valore della lingua di origine, il valore della lingua di destinazione e il testo di origine ed esegue la traduzione. Tieni presente che se il modello della lingua di destinazione scelta non è ancora stato scaricato sul dispositivo, chiamiamo downloadModelIfNeeded() per farlo e poi procediamo con la traduzione.

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
   }
}

Eseguire l'app sul simulatore

Ora fai clic su Esegui (execute.png) nella barra degli strumenti di Android Studio. Una volta caricata l'app, dovrebbe avere l'aspetto dell'immagine in movimento di seguito, che mostra il riconoscimento del testo e i risultati della lingua identificata, nonché il testo tradotto nella lingua scelta. Puoi scegliere una delle 59 lingue disponibili.

Congratulazioni, hai appena aggiunto alla tua app il riconoscimento del testo, l'identificazione della lingua e la traduzione on-device utilizzando ML Kit. Ora puoi riconoscere il testo e la relativa lingua dal feed in diretta della fotocamera e tradurre il testo in una lingua a tua scelta, il tutto in tempo reale.

Argomenti trattati

  • Come aggiungere ML Kit alla tua app per Android
  • Come utilizzare il riconoscimento del testo on-device in ML Kit per riconoscere il testo nelle immagini
  • Come utilizzare l'identificazione della lingua sul dispositivo in ML Kit per identificare la lingua del testo
  • Come utilizzare la traduzione on-device in ML Kit per tradurre il testo in modo dinamico in 59 lingue
  • Come utilizzare CameraX in combinazione con le API ML Kit

Passaggi successivi

  • Utilizza ML Kit e CameraX nella tua app per Android.

Scopri di più