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 de iOS y 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 del feed de la cámara en tiempo real a tu app para Android existente. 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.
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
del repositorio mlkit-android
contiene el siguiente directorio:
starter: Es el código inicial que compilarás en este codelab.
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'
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. Inicia el emulador de Android Studio y 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.
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
Agrega el siguiente campo a la parte superior de TextAnalyzer.kt
. De esta manera, obtienes un identificador del identificador de texto para usarlo en pasos posteriores.
TextAnalyzer.kt
private val detector = TextRecognition.getClient()
Ejecuta el reconocimiento de texto integrado en el dispositivo en una imagen de Vision ( 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 recognizeTextOnDevice()
en la clase TextAnalyzer para usar el reconocimiento de texto de ML Kit en cada fotograma de imagen.
TextAnalyzer.kt
private fun recognizeTextOnDevice(
image: InputImage
): Task<Text> {
// Pass image to an ML Kit Vision API
return detector.process(image)
.addOnSuccessListener { visionText ->
// Task completed successfully
result.value = visionText.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
recognizeTextOnDevice(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.
Crea una instancia del identificador de idiomas de ML Kit
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 languageIdentification = LanguageIdentification.getClient()
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 si no está definido ("und").
MainViewModel.kt
languageIdentification.identifyLanguage(text)
.addOnSuccessListener {
if (it != "und")
result.value = Language(it)
}
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.
Reemplaza la función translate()
en MainViewModel.kt
por 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.
¡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 en vivo de la cámara y traducirlo a un 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 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.