1. Introduzione
ML Kit è un SDK per dispositivi mobili che porta l'esperienza di Google nel machine learning su Android e nelle app per 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 con 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. 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 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.
Cosa creerai
In questo codelab, creerai un'app per Android con ML Kit. La tua 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, la tua app tradurrà questo testo in una delle 59 lingue disponibili utilizzando l'API ML Kit Translation.
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 ML Kit Text Recognition, Language Identification e Translation 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 o successive)
- 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.
2. Preparazione
Scarica il codice
Fai clic sul seguente link per scaricare tutto il codice per questo codelab:
Decomprimi il file ZIP scaricato. Verrà estratta 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:
starter: codice iniziale su cui si basa 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 controllato 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 avviarsi sul tuo dispositivo e puoi puntare la videocamera su vari testi per vedere un feed in diretta, ma la funzionalità di riconoscimento del testo non è ancora stata implementata.

5. Aggiungere il riconoscimento del testo
In questo passaggio, aggiungeremo funzionalità alla tua app per riconoscere il testo della videocamera.
Istanzia il rilevatore di testo ML Kit
Sostituisci TODO nella parte superiore di TextAnalyzer.kt per creare un'istanza di TextRecognition. In questo modo ottieni un handle per il riconoscitore di 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)
}
Eseguire il riconoscimento del testo su un'immagine di input (creata con il buffer della fotocamera)
La libreria CameraX fornisce un flusso di immagini dalla fotocamera 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 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 una volta completata l'analisi dell'immagine, altrimenti il feed della videocamera in diretta non sarà in grado di elaborare altre immagini per l'analisi.
TextAnalyzer.kt
recognizeText(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
imageProxy.close()
}
Eseguire l'app sul 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 in tempo reale. Inquadra con la fotocamera 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. Aggiungere l'identificazione della lingua
Istanziare l'identificatore 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 ottieni 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()
}
Eseguire l'identificazione della lingua sul dispositivo sul testo rilevato
Utilizza lo strumento di identificazione della lingua di ML Kit per ottenere la lingua del testo rilevato nell'immagine.
Sostituisci 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 non definita indica che l'API non è riuscita a 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
}
Eseguire l'app sul 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 identificare la lingua del testo in tempo reale. Inquadra con la fotocamera un testo qualsiasi per confermare.
7. Aggiungi traduzione
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
}
}
Esegui l'app sul simulatore
Ora fai clic su Esegui (
) nella barra degli strumenti di Android Studio. Una volta caricata l'app, dovrebbe apparire come l'immagine in movimento riportata di seguito, che mostra il riconoscimento del testo, i risultati della lingua identificata e il testo tradotto nella lingua scelta. Puoi scegliere una delle 59 lingue.

8. Complimenti!
Congratulazioni, hai appena aggiunto il riconoscimento del testo, l'identificazione della lingua e la traduzione su dispositivo alla tua app utilizzando ML Kit. Ora puoi riconoscere il testo e la relativa lingua dal feed della videocamera in diretta e tradurlo in tempo reale nella lingua che preferisci.
Argomenti trattati
- Come aggiungere ML Kit alla tua app per Android
- Come utilizzare il riconoscimento del testo su dispositivo in ML Kit per riconoscere il testo nelle immagini
- Come utilizzare l'identificazione della lingua su 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 insieme alle API ML Kit
Passaggi successivi
- Utilizza ML Kit e CameraX nella tua app per Android.