1. Introducción
El Kit de AA es un SDK para dispositivos móviles que lleva la experiencia de Google en el aprendizaje automático a las aplicaciones para Android en un paquete eficaz, pero 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 funciones 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á a través de pasos simples para agregar el reconocimiento de texto, la identificación de idioma y la traducción 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 Text Recognition on-device de ML Kit 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 de entre 59 opciones con la API de traducción 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 reconocimiento de texto, identificación de idioma y traducción de ML Kit, y sus funciones
- 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 por 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: Inicio del código en el que se basa 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 un feed en vivo, pero aún no se implementó la función de reconocimiento de texto.
5. Agregar reconocimiento de texto
En este paso, agregaremos funcionalidad a tu app para reconocer texto de la cámara de video.
Crea una instancia del detector de texto de ML Kit
Reemplaza TODO
en la parte superior de TextAnalyzer.kt
para crear una instancia de TextRecognition
. De esta manera, obtienes un identificador del reconocedor de texto para usarlo en pasos posteriores. También debemos agregar el detector como observador de 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 el búfer de la cámara)
La biblioteca de CameraX proporciona una transmisión de imágenes de la cámara lista 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 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 el 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. Agrega la identificación de idioma
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
. De esta manera, obtienes un identificador del idioma para usarlo en el siguiente paso.
MainViewModel.kt
private val languageIdentifier = LanguageIdentification.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
Además, debes asegurarte de que los clientes se cierren 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 integrado en el dispositivo en el texto detectado
Usa el identificador de idioma de ML Kit para obtener el idioma del texto detectado de la imagen.
Reemplaza el 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 en caso de que no sea indefinido ("und"). Un idioma no definido significa que la API no pudo identificarlo en función de 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 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. 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
}
}
Ejecuta 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 siguiente imagen en movimiento, que muestra el reconocimiento de texto y los resultados del idioma identificado, y el texto traducido al idioma elegido. Puedes elegir cualquiera de los 59 idiomas.
8. ¡Felicitaciones!
¡Felicitaciones! Acabas de agregar el reconocimiento de texto, la identificación de idiomas y la traducción en el dispositivo a tu app con ML Kit. Ahora puedes reconocer el texto y su idioma desde el feed de la cámara en vivo y traducirlo a un idioma que elijas en tiempo real.
Temas abordados
- Cómo agregar ML Kit a tu app para Android
- Cómo usar el reconocimiento de texto integrado en el dispositivo en ML Kit para reconocer texto en imágenes
- Cómo usar la identificación de idiomas integrada en el dispositivo en ML Kit para identificar el idioma de un 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.