1. Introduzione
ML Kit è un SDK mobile che porta l'esperienza di Google nel machine learning alle app per Android e Android in un pacchetto potente, ma facile da usare. 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 è necessario avere una conoscenza approfondita delle reti neurali o l'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 seguente.
Cosa imparerai a fare
- 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.
Che cosa ti serve
- Una versione recente di Android Studio (v4.0 e successive)
- Un dispositivo Android fisico
- Il codice di esempio
- Conoscenza di base dello sviluppo Android in Kotlin
Questo codelab è incentrato su ML Kit. Concetti e blocchi di codice non pertinenti sono già stati forniti e implementati per te.
2. Preparazione
Scarica il codice
Fai clic sul link seguente per scaricare tutto il codice di questo codelab:
Estrai il file ZIP scaricato. Verrà aperta una cartella principale (mlkit-android
) con tutte le risorse di cui hai bisogno. Per questo codelab, ti serviranno solo le risorse nella sottodirectory translate
.
La sottodirectory translate
nel repository mlkit-android
contiene la seguente directory:
starter: il codice di avvio su cui lavorare 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 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'
4. Esegui l'app di avvio
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 potrai puntare la videocamera su vari testi per vedere un feed in diretta, ma la funzionalità di riconoscimento del testo non è ancora stata implementata.
5. Aggiungi il riconoscimento del testo
In questo passaggio aggiungeremo alla tua app la funzionalità di riconoscimento del testo dalla videocamera.
Creare un'istanza per 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 riconoscimento del testo da utilizzare nei passaggi successivi. Inoltre, dobbiamo 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 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
al termine dell'analisi dell'immagine, altrimenti il feed della videocamera in diretta non potrà 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 verso uno spazio vuoto prima di puntarla verso il testo.
6. Aggiungere l'identificazione della lingua
Eseguire l'inizializzazione dell'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 della lingua da utilizzare nel passaggio successivo.
MainViewModel.kt
private val languageIdentifier = LanguageIdentification.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
Inoltre, è opportuno anche assicurarti che i client vengano arrestati correttamente quando non sono più necessari. Per farlo, sostituisci il metodo onCleared()
di ViewModel
.
MainViewModel.kt
override fun onCleared() {
languageIdentifier.close()
translators.evictAll()
}
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 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"). Una lingua non definita indica 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
}
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 identificare la lingua del testo in tempo reale. Per confermare, inquadra con la fotocamera un testo qualsiasi.
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 di lingua 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 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.
8. Complimenti!
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 insieme alle API ML Kit
Passaggi successivi
- Utilizza ML Kit e CameraX nella tua app per Android.