1. Introducción
ML Kit es un SDK para dispositivos móviles que lleva la experiencia de Google en aprendizaje automático a las apps para Android y Android en un paquete potente y fácil de usar. Independientemente de si eres nuevo o tienes experiencia en el aprendizaje automático, puedes implementar fácilmente la funcionalidad que necesitas con solo unas pocas líneas de código. No es necesario tener conocimientos profundos sobre redes neuronales ni sobre optimización de modelos para comenzar.
¿Cómo funciona?
ML Kit facilita la aplicación de técnicas de AA en tus apps incorporando tecnologías de AA de Google, como Mobile Vision y TensorFlow Lite, en un solo SDK. Ya sea que necesites la potencia de las capacidades en tiempo real de los modelos en el dispositivo de Mobile Vision o la flexibilidad de los modelos personalizados de TensorFlow Lite, ML Kit lo hace posible con solo unas pocas líneas de código.
En este codelab, te guiaremos por unos simples pasos para agregar reconocimiento de texto, identificación de idiomas y traducción del feed de la cámara en tiempo real a tu app para Android existente. En este codelab, también se destacarán las prácticas recomendadas para usar CameraX con las APIs de ML Kit.
Qué compilarás
En este codelab, compilarás una app para Android con ML Kit. Tu app usará la API de reconocimiento de texto del Kit de AA en el dispositivo para reconocer texto del feed de la cámara en tiempo real. Usará la API de Language Identification del Kit de AA para identificar el idioma del texto reconocido. Por último, tu app traducirá este texto a cualquier idioma elegido entre 59 opciones con la API de Translation del ML Kit.
Al final, deberías ver algo similar a la siguiente imagen.
Qué aprenderás
- Cómo usar el SDK del ML Kit para agregar fácilmente capacidades de aprendizaje automático a cualquier app para Android.
- APIs de Translation, de reconocimiento de texto, de identificación de idiomas y de Translation, y sus capacidades.
- Cómo usar la biblioteca de CameraX con las APIs de ML Kit
Requisitos
- Una versión reciente de Android Studio (v4.0 y versiones posteriores)
- Un dispositivo Android físico
- El código de muestra
- Conocimientos básicos sobre el desarrollo de Android en Kotlin
Este codelab se enfoca en el ML Kit. Ya se proporcionaron e implementaron para ti los conceptos y los bloques de código que no son relevantes.
2. Cómo prepararte
Descarga el código
Haz clic en el siguiente vínculo a fin de descargar todo el código de este codelab:
Descomprime el archivo zip descargado. Se descomprimirá una carpeta raíz (mlkit-android
) con todos los recursos que necesitarás. Para este codelab, solo necesitarás los recursos del subdirectorio translate
.
El subdirectorio translate
en el repositorio mlkit-android
contiene el siguiente directorio:
starter: Inicio del código en el que se basa este codelab
3. Importa el proyecto y verifica las dependencias del ML Kit y CameraX
Importa el proyecto inicial a Android Studio. En el archivo app/build.gradle
, verifica que se incluyan las dependencias necesarias del ML Kit y 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. Ejecuta la app de partida
Ahora que importaste el proyecto a Android Studio y verificaste las dependencias del ML Kit, está todo listo para ejecutar la app por primera vez. Haz clic en Run ( ) en la barra de herramientas de Android Studio.
La app debería iniciarse en tu dispositivo y puedes apuntar la cámara a distintos textos para ver un feed en vivo, pero la función de reconocimiento de texto aún no se implementó.
5. Agregar reconocimiento de texto
En este paso, agregaremos a tu app funcionalidad para reconocer texto de la cámara de video.
Crea una instancia del detector de texto del Kit de AA
Reemplaza TODO
en la parte superior de TextAnalyzer.kt
para crear una instancia de TextRecognition
. Así es como obtienes un controlador para el reconocedor de texto para usarlo en pasos posteriores. También necesitamos agregar el detector como un observador del ciclo de vida para cerrarlo correctamente cuando ya no sea necesario.
TextAnalyzer.kt
private val detector = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
init {
lifecycle.addObserver(detector)
}
Cómo ejecutar el reconocimiento de texto en una imagen de entrada (creada con el búfer de la cámara)
La biblioteca de CameraX proporciona un flujo de imágenes de la cámara listas para el análisis de imágenes. Reemplaza el método recognizeText()
en la clase TextAnalyzer para usar el reconocimiento de texto del ML Kit en cada marco de imagen.
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 siguiente línea muestra cómo llamamos al método anterior para comenzar a realizar el reconocimiento de texto. Agrega la siguiente línea al final del método analyze()
. Ten en cuenta que debes llamar a imageProxy.close
una vez que se complete el análisis de la imagen; de lo contrario, el feed de la cámara en vivo no podrá procesar más imágenes para su análisis.
TextAnalyzer.kt
recognizeText(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
imageProxy.close()
}
Cómo ejecutar la app en tu dispositivo
Ahora, haz clic en Run ( ) en la barra de herramientas de Android Studio. Una vez que se cargue la app, debería comenzar a reconocer texto de la cámara en tiempo real. Apunta la cámara a cualquier texto para confirmar. Si la app no reconoce ningún texto, intenta "restablecer" la detección apuntando la cámara a un espacio en blanco antes de apuntar la cámara al texto.
6. Agregar identificación de idioma
Crea una instancia del identificador de idioma del ML Kit
MainViewModel.kt
se encuentra en la carpeta principal. Navega al archivo y agrega el siguiente campo a MainViewModel.kt
. Así es como obtienes un controlador para el identificador de idioma que usarás en el siguiente paso.
MainViewModel.kt
private val languageIdentifier = LanguageIdentification.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
Además, también debes asegurarte de que los clientes se cierren de forma correcta cuando ya no sean necesarios. Para ello, anula el método onCleared()
de ViewModel
.
MainViewModel.kt
override fun onCleared() {
languageIdentifier.close()
translators.evictAll()
}
Ejecuta la identificación de idioma integrada en el dispositivo en el texto detectado
Usa el identificador de idioma del Kit de AA para obtener el idioma del texto detectado en la imagen.
Reemplaza TODO
en la definición del campo sourceLang
en MainViewModel.kt
por el siguiente código. Este fragmento llama al método de identificación de idioma y asigna el resultado si no es indefinido ("und"). Un idioma indefinido significa que la API no pudo identificar el idioma según la lista de idiomas compatibles.
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
}
Cómo ejecutar la app en tu dispositivo
Ahora, haz clic en Run ( ) en la barra de herramientas de Android Studio. Una vez que se cargue la app, debería comenzar a reconocer texto de la cámara e identificar su idioma en tiempo real. Apunta la cámara a cualquier texto para confirmar.
7. Agregar traducción
Reemplaza la función translate()
en MainViewModel.kt
con el siguiente código. Esta función toma el valor del idioma de origen, el valor del idioma de destino y el texto de origen y realiza la traducción. Observa que, si el modelo de idioma de destino elegido aún no se descargó en el dispositivo, llamaremos a downloadModelIfNeeded()
para hacerlo y, luego, procederemos con la traducción.
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
}
}
Ejecuta la app en el simulador
Ahora, haz clic en Run ( ) en la barra de herramientas de Android Studio. Cuando se cargue la app, debería verse como la siguiente imagen en movimiento, que mostrará el reconocimiento de texto, los resultados de idiomas identificados y el texto traducido al idioma elegido. Puedes elegir cualquiera de los 59 idiomas.
8. ¡Felicitaciones!
¡Felicitaciones! Acabas de agregar reconocimiento de texto, identificación de idiomas y traducción en el dispositivo a tu app con ML Kit. Ahora puedes reconocer texto y su idioma en el feed de la cámara en vivo y traducirlo al idioma que quieras, todo en tiempo real.
Temas abordados
- Cómo agregar el Kit de AA a tu app para Android
- Cómo usar el reconocimiento de texto integrado en el dispositivo con el ML Kit para reconocer texto en imágenes
- Cómo usar la identificación de idiomas integrada en el dispositivo con el ML Kit para identificar el idioma del texto
- Cómo usar la traducción integrada en el dispositivo en ML Kit para traducir texto de forma dinámica a 59 idiomas
- Cómo usar CameraX junto con las APIs de ML Kit
Próximos pasos
- Usa ML Kit y CameraX en tu propia app para Android.