1. Introduzione
ML Kit è un SDK per dispositivi mobili che porta l'esperienza di machine learning di Google nelle app Android e Android in un pacchetto potente ma facile da usare. Che tu sia un principiante o un esperto di machine learning, puoi implementare facilmente la funzionalità di cui hai bisogno in poche righe di codice. Per iniziare, non è necessario avere 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 riunendo le tecnologie di ML di Google, come Mobile Vision e TensorFlow Lite, in un unico SDK. Se hai 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 videocamera in tempo reale alla tua app per Android esistente. Questo codelab metterà in evidenza anche 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 di riconoscimento del testo di ML Kit per riconoscere il testo dal feed della videocamera in tempo reale. Utilizzerà l'API di identificazione della lingua di ML Kit per identificare la lingua del testo riconosciuto. Infine, l'app tradurrà questo testo in una delle 59 lingue scelte utilizzando l'API Translation di ML Kit.
Alla fine, dovresti vedere qualcosa di simile all'immagine qui sotto.

Cosa imparerai a fare
- Come utilizzare l'SDK ML Kit per aggiungere facilmente funzionalità di machine learning a qualsiasi app per Android.
- API di riconoscimento del testo, identificazione della lingua e traduzione di ML Kit e le relative funzionalità.
- Come utilizzare la libreria CameraX con le API ML Kit.
Che cosa ti serve
- Una versione recente di Android Studio (v4.0+)
- Un dispositivo Android fisico
- Il codice campione
- Conoscenza di base dello sviluppo Android in Kotlin
Questo codelab è incentrato su ML Kit. Concetti e blocchi di codice non pertinenti sono già forniti e implementati per te.
2. Preparazione
Scarica il codice
Fai clic sul seguente link per scaricare tutto il codice per questo codelab:
Decomprimi il file ZIP scaricato. Verrà decompressa una cartella principale (mlkit-android) con tutte le risorse di cui avrai bisogno. Per questo codelab, avrai bisogno solo delle risorse nella sottodirectory translate.
La sottodirectory translate nel repository mlkit-android contiene la seguente directory:
starter : codice iniziale su cui basarti in questo codelab.
3. Importa il progetto e verifica le dipendenze di ML Kit e CameraX
Importa il progetto iniziale in Android Studio. Nel file app/build.gradle, verifica che siano incluse le dipendenze necessarie di ML Kit e CameraX:
// 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. Esegui l'app di base
Ora che hai importato il progetto in Android Studio e hai verificato le dipendenze di ML Kit, puoi eseguire l'app per la prima volta. Fai clic su Esegui (
) nella barra degli strumenti di Android Studio.
L'app dovrebbe essere avviata sul tuo dispositivo e puoi puntare la videocamera su vari testi per visualizzare un feed pubblicato, ma la funzionalità di riconoscimento del testo non è ancora stata implementata.

5. Aggiungi il riconoscimento del testo
In questo passaggio, aggiungeremo la funzionalità alla tua app per riconoscere il testo dalla videocamera.
Crea un'istanza del rilevatore di testo di ML Kit
Sostituisci il TODO nella parte superiore di TextAnalyzer.kt per creare un'istanza di TextRecognition. In questo modo puoi ottenere un handle per il riconoscimento del testo da utilizzare nei passaggi successivi. Dobbiamo anche aggiungere il rilevatore come osservatore del ciclo di vita per chiuderlo correttamente quando non è più necessario.
TextAnalyzer.kt
private val detector = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
init {
lifecycle.addObserver(detector)
}
Esegui il riconoscimento del testo su un'immagine di input (creata con il buffer della fotocamera)
La libreria CameraX fornisce uno stream di immagini dalla videocamera pronto per l'analisi delle immagini. Sostituisci il metodo recognizeText() nella classe TextAnalyzer per utilizzare il riconoscimento del testo di ML Kit su ogni frame dell'immagine.
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()
}
}
}
La riga seguente mostra come chiamiamo il metodo sopra riportato per avviare il riconoscimento del testo. Aggiungi la seguente riga alla fine del metodo analyze(). Tieni presente che devi chiamare imageProxy.close una volta completata l'analisi dell'immagine, altrimenti il feed videocamera live non sarà in grado di elaborare altre immagini per l'analisi.
TextAnalyzer.kt
recognizeText(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
imageProxy.close()
}
Esegui l'app sul tuo dispositivo
Ora fai clic su Esegui (
) nella barra degli strumenti di Android Studio. Una volta caricata l'app, dovrebbe iniziare a riconoscere il testo dalla videocamera in tempo reale. Punta la fotocamera su un testo qualsiasi per confermare. Se l'app non riconosce alcun testo, prova a "reimpostare" il rilevamento puntando la videocamera su uno spazio vuoto prima di puntarla sul testo.
6. Aggiungi l'identificazione della lingua
Crea un'istanza dell'identificatore di lingua di ML Kit
MainViewModel.kt si trova nella cartella principale. Vai al file e aggiungi il seguente campo a MainViewModel.kt. In questo modo puoi ottenere un handle per l'identificatore di lingua da utilizzare nel passaggio successivo.
MainViewModel.kt
private val languageIdentifier = LanguageIdentification.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
Inoltre, devi assicurarti che i client vengano chiusi correttamente quando non sono più necessari. Per farlo, esegui l'override del metodo onCleared() di ViewModel.
MainViewModel.kt
override fun onCleared() {
languageIdentifier.close()
translators.evictAll()
}
Esegui l'identificazione della lingua on-device 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 è indefinito ("und"). Una lingua indefinita significa che l'API non è stata in grado di identificare la lingua in base all' elenco delle lingue supportate.
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
}
Esegui l'app sul tuo dispositivo
Ora fai clic su Esegui (
) nella barra degli strumenti di Android Studio. Una volta caricata l'app, dovrebbe iniziare a riconoscere il testo dalla fotocamera e a identificarne la lingua in tempo reale. Punta la fotocamera su un testo qualsiasi per confermare.
7. Aggiungi la traduzione
Sostituisci la funzione translate() in MainViewModel.kt con il seguente codice. Questa funzione accetta 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 linguistico di destinazione scelto 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
}
}
Esegui l'app sul simulatore
Ora fai clic su Esegui (
) nella barra degli strumenti di Android Studio. Una volta caricata l'app, dovrebbe essere simile all'immagine animata qui sotto, che mostra i risultati del riconoscimento del testo e della lingua identificata e il testo tradotto nella lingua scelta. Puoi scegliere una delle 59 lingue.

8. Complimenti!
Complimenti, hai appena aggiunto il riconoscimento del testo, l'identificazione della lingua e la traduzione sul dispositivo alla tua app utilizzando ML Kit. Ora puoi riconoscere il testo e la sua lingua dal feed videocamera live e tradurlo in una lingua a tua scelta 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 dinamicamente il testo 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.