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 sia alle prime armi o abbia esperienza nel machine learning, puoi implementare facilmente le 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 unendo le tecnologie 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 rende possibile tutto ciò 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. Questo codelab evidenzia anche le best practice sull'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 per il riconoscimento del testo di ML Kit per riconoscere il testo dal feed videocamera in tempo reale. utilizzerà l'API ML Kit Language Identification per identificare la lingua del testo riconosciuto. Infine, l'app tradurrà questo testo in qualsiasi lingua scelta tra le 59 opzioni disponibili, utilizzando l'API ML Kit Translation.
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.
- Riconoscimento del testo, identificazione del linguaggio, API di traduzione e loro funzionalità del kit ML.
- Come utilizzare la libreria CameraX con le API ML Kit.
Che cosa ti serve
- Una versione recente di Android Studio (v4.0 o successiva)
- 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à stati forniti e implementati per te.
2. Preparazione
Scarica il codice
Fai clic sul seguente link per scaricare tutto il codice per questo codelab:
Apri 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:
comando iniziale: codice iniziale che crei 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 iniziale
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 dispositivo e puoi puntare la fotocamera verso vari testi per vedere un feed in diretta. Tuttavia, la funzionalità di riconoscimento del testo non è stata ancora implementata.
5. Aggiungi il riconoscimento del testo
In questo passaggio aggiungeremo alla tua app funzionalità per riconoscere il testo proveniente 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
. È così che ottieni un handle per il riconoscimento del testo da utilizzare nei passaggi successivi. Dobbiamo anche aggiungere il rilevatore come osservatore del ciclo di vita affinché venga chiuso 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 un buffer dalla fotocamera)
La libreria CameraX fornisce uno stream di immagini della fotocamera pronte per l'analisi. 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 che segue mostra come chiamiamo il metodo riportato sopra 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 sull'immagine, altrimenti il feed della videocamera in diretta non sarà in grado di elaborare ulteriori 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 della fotocamera in tempo reale. Inquadra un testo qualsiasi con la fotocamera per confermare. Se la tua app non riconosce alcun testo, prova a "reimpostare" il rilevamento puntando la fotocamera verso uno spazio vuoto prima di puntarla verso un testo.
6. Aggiungi l'identificazione della lingua
Creare un'istanza dell'identificatore di linguaggio del kit ML
MainViewModel.kt
si trova nella cartella principale. Vai al file e aggiungi il campo seguente 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, è 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()
}
Esegui l'identificazione della lingua sul dispositivo sul testo rilevato
Utilizza l'identificatore lingua del kit ML 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 è definito ("und"). Una lingua non definita indica che l'API non è stata in grado di identificare la lingua in base all'elenco di 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. Inquadra un testo qualsiasi con la fotocamera 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. Nota che se il modello di lingua di destinazione scelto non è stato ancora 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 riportata di seguito, che mostra il riconoscimento del testo, i risultati della lingua identificata e il testo tradotto nella lingua scelta. Puoi scegliere una qualsiasi delle 59 lingue disponibili.
8. Complimenti!
Congratulazioni, hai appena aggiunto alla tua app il riconoscimento del testo, l'identificazione della lingua e la traduzione sul dispositivo utilizzando ML Kit. Ora puoi riconoscere il testo e la sua lingua dal feed della videocamera in diretta e tradurlo in tempo reale in una lingua che scegli tu.
Argomenti trattati
- Come aggiungere ML Kit alla tua app per Android
- Come utilizzare il riconoscimento del testo sul dispositivo in ML Kit per riconoscere il testo nelle immagini
- Come utilizzare l'identificazione della lingua on-device 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
- Usa ML Kit e CameraX nella tua app per Android.