1. Introducción
ML Kit es un SDK para dispositivos móviles que lleva la experiencia de aprendizaje automático de Google 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 necesites con solo unas pocas líneas de código. No es necesario que tengas un profundo conocimiento sobre redes neuronales o en 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 integrados 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, se te guiará por los pasos sencillos para agregar Text Recognition, Language Identification y Translation desde el 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 ML Kit Text Recognition on-device para reconocer texto del feed de la cámara en tiempo real. Usará la API de Language Identification de ML Kit 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 de ML Kit.
Al final, deberías ver algo similar a la siguiente imagen.

Qué aprenderás
- Cómo usar el SDK de ML Kit para agregar fácilmente capacidades de aprendizaje automático a cualquier app para Android
- APIs de ML Kit Text Recognition, Language Identification y 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 o posterior)
- 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 ML Kit. Los conceptos y los bloques de código no relevantes ya se proporcionan y se implementan para ti.
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. Esto 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 del repositorio mlkit-android contiene el siguiente directorio:
starter: Código inicial que usarás como base para compilar en este codelab
3. Importa el proyecto y verifica las dependencias de ML Kit y CameraX
Importa el proyecto inicial en Android Studio. En el archivo app/build.gradle, verifica que se incluyan las dependencias necesarias de 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 de ML Kit, tienes 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 varios textos para ver una transmisión en vivo, pero la función de reconocimiento de texto aún no se implementó.

5. Agrega reconocimiento de texto
En este paso, agregaremos funcionalidad a tu app para que reconozca el texto de la cámara de video.
Crea una instancia del detector de texto de ML Kit
Reemplaza el TODO en la parte superior de TextAnalyzer.kt para crear una instancia de TextRecognition. Así es como obtienes un identificador del reconocedor de texto para usarlo en pasos posteriores. También debemos agregar el detector como 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)
}
Ejecuta el reconocimiento de texto en una imagen de entrada (creada con un búfer de la cámara)
La biblioteca de CameraX proporciona un flujo de imágenes de la cámara listo para el análisis de imágenes. Reemplaza el método recognizeText() en la clase TextAnalyzer para usar el reconocimiento de texto de ML Kit en cada fotograma de la 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()
}
}
}
En la siguiente línea, se 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 el análisis.
TextAnalyzer.kt
recognizeText(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
imageProxy.close()
}
Ejecuta 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 apuntarla al texto.
6. Cómo agregar la identificación de idiomas
Crea una instancia del identificador de idiomas de 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 identificador de idioma para usarlo 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 apaguen correctamente 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 de ML Kit para obtener el idioma del texto detectado en la imagen.
Reemplaza el TODO en la definición del campo sourceLang en MainViewModel.kt con el siguiente código. Este fragmento llama al método de identificación de idioma y asigna el resultado si no está indefinido ("und"). Un idioma no definido significa que la API no pudo identificar el idioma según la lista de idiomas admitidos.
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
}
Ejecuta 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 el texto de la cámara y a identificar el idioma del texto 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. Ten en cuenta que, si el modelo de idioma de destino elegido aún no se descargó en el dispositivo, llamamos a downloadModelIfNeeded() para hacerlo y, luego, continuamos 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
}
}
Cómo ejecutar la app en el simulador
Ahora haz clic en Run (
) en la barra de herramientas de Android Studio. Una vez que se cargue la app, debería verse como la imagen en movimiento que se muestra a continuación, con los resultados del reconocimiento de texto y el idioma identificado, 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 desde el feed de la cámara en vivo, y traducir este texto al idioma que elijas, todo en tiempo real.
Temas abordados
- Cómo agregar ML Kit a tu app para Android
- Cómo usar el reconocimiento de texto en el dispositivo de ML Kit para reconocer texto en imágenes
- Cómo usar la identificación de idiomas en el dispositivo en ML Kit para identificar el idioma del texto
- Cómo usar la traducción 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.