Machine Learning para desarrolladores/as Android

1. Introducción
2. ¿Qué es el machine learning?
3. ¿Qué herramientas de machine learning existen para los desarrolladores Android? ¿Y qué nos ofrecen?
4. ML Kit
5. Firebase ML
6. Diferencias entre ML Kit y Firebase ML
7. TensorFlow Lite y los modelos personalizados
8. Conclusiones

Hoy en día, con el auge de la inteligencia artificial en los últimos años, conceptos como el machine learning (aprendizaje automático) está en boca de todos/as. Pero no es algo nuevo, de hecho, lleva coexistiendo con nosotros/as mucho tiempo.

Como desarrollador Android es interesante conocer qué herramientas de machine learning existen y qué podemos hacer con ellas en nuestras aplicaciones móviles, pero antes de ver las principales herramientas, contestemos una pregunta ¿Qué es el machine learning?

¿Qué es el machine learning?

El machine learning es una rama de la inteligencia artificial que se centra en el desarrollo de algoritmos y técnicas que permitan a sistemas computacionales aprender y mejorar automáticamente a partir de datos y experiencias, sin ser programadas para una tarea específica. Es decir, entrenar a una máquina para que aprendan a realizar tareas basándose en patrones a partir de unos datos.

Los usos más comunes del machine learning suelen ser:

  • Análisis predictivos: Estudias de resultados basados en datos históricos.
  • Filtrado de contenido: Motores de búsqueda, redes sociales para recomendar contenido relevante. Por ejemplo, recomendaciones de Netflix.
  • Asistente virtuales y chatbots: Siri, Google Assistant, Alexa se basan en ML para comprender y responder respuestas.
  • Reconocimiento de patrones: Reconocimiento de voz, fácil y de escritura.
  • Medicina y diagnósticos: Análisis de imágenes médicas para diagnosticar enfermedades, prever riesgos de salud y personalizar tratamientos.

¿Qué herramientas de machine learning existen para los desarrolladores Android? ¿Y qué nos ofrecen?

Vamos a imaginar el siguiente caso práctico, el proyecto Android donde trabajamos trata de una aplicación para alumnos y profesores donde se pueden gestionar eventos, calendarios, exámenes, notas, avisos, etc.

El cliente de dicho proyecto nos pregunta sobre la viabilidad de agregar a la app una opción de reconocimiento de texto, de tal forma que si el profesor escribe en la pizarra apuntes los alumnos puedan desde una foto del mismo y convertir dicha imagen a text para guardarlo posteriormente y poder consultarlo en el app cuando lo necesiten. Además, quieren añadir la opción de traducir al inglés o no, todo el contenido a la hora de guardarlo.

Lo primero que podemos pensar, si no conocemos bien lo que nos ofrecen las herramientas de machine learning para Android, es que es una tarea casi imposible. ¿Cómo convertir de imagen a texto?, ¿O cómo podría dar la opción de traducir todo un texto que acaba de recoger de una imagen?

Pues aquí es donde entran las diferentes plataformas o herramientas de machine learning. Las principales plataformas para dispositivos móviles de machine learning son ML Kit y Firebase ML, y en un plano un poco más avanzado TensorFlow Lite.

ML Kit

ML Kit está diseñado por Google, y aprovecha todas las tecnologías de machine learning propias de la compañía. Esta plataforma de machine learning está destinada a desarrolladores de apps para dispositivos móviles.

Todo el procesamiento se realiza en el dispositivo esto lo hace más rápido y permite casos de usos real como el procesar imágenes desde la cámara. Al estar integrado dentro del dispositivo permite que funcione sin conexión.

Es muy fácil de usar, ya que todo el concepto de entretenimiento de modelo e integración está abstraído en una API adaptadas para app.

ML Kit nos ofrece:

  • API VISION:
    • Escaneo de códigos de barra
    • Detección de rostros
    • Detección de malla facial
    • Reconocimiento de texto
    • Etiquetado de imagen
    • Detección y seguimiento de objetos
    • Reconocimiento de tinta digital
    • Detección de poses
    • Segmentación de selfies
    • Segmentación de temas
    • Escáner de documentos
  • API NATURAL LANGUAGE
    • Identificación de idiomas
    • Traducción
    • Respuestas inteligentes
    • Extracción de entidades

Volvamos a nuestro caso práctico, después de analizar lo que nos ofrece ML Kit ¿qué API podríamos usar para integrar el reconocimiento de texto de la pizarra y su posterior traducción? Observamos que tanto Text recognition v2 y Translation se ajustan a nuestras necesidades.

Por un lado, Text recognition nos permite reconocer texto en diferentes idiomas y recuperarlo, y Translation nos permite traducciones en tiempo real desde el texto obtenido en el punto anterior. Veamos cómo implementar una de estas API en nuestro proyecto Android.

En primer lugar, agregamos las dependencias para la biblioteca de ML Kit en este caso de translate:

Creamos un objeto Translator y lo configuramos con los idiomas fuente y destino. NOTA: Si no sabes el idioma de entrada podríamos usar la API de detección de idioma que también nos provee ML Kit

Nos aseguramos de que se ha descargado el modelo necesario para nuestra traducción

Una vez nos aseguramos de que el modelo se ha descargado correctamente pasamos la cadena de texto a traducir y obtendremos el resultado ya traducido.

Puedes ver más información de las API en: https://developers.google.com/ml-kit

Firebase ML

Firebase ML utiliza la infraestructura en la nube de Google para realizar operaciones de machine learning. A grandes rasgos esto significa que son los servidores de Google Cloud los que se encargan del procesamiento de los modelos.

Esta plataforma ofrece servicios basados en la nube de machine learning fáciles de implementar en nuestras aplicaciones móviles. De este modo nos aprovechamos de la potencia de la infraestructura de Google Cloud. Un factor importante y diferenciador respecto a ML Kit, además del ejecutarlo en la nube y/o dispositivo, sería la capacidad que tiene Firebase ML para alojar e implementar modelos personalizados.

Otro factor a tener en cuenta es el precio, en el PLAN SPARK (gratuito) de Firebase se incluye la integración con modelos personalizados, pero no con la API de Cloud Vision, es decir habría que tener activos un PLAN BLAZE que tiene aproximadamente un coste de 1,5$ por cada 1000 consultas a dicha API.

Una vez hemos estudiado y analizado las opciones de Firebase ML y volvemos a nuestro caso práctico podemos observar que Firebase ML no nos ofrece nada diferente a lo que ya podíamos hacer con ML Kit. Incluso si indagamos en la documentación podemos observar que para el Recognize Text nos informa de que la SDK está obsoleta y nos recomienda usar ML Kit. Ojo esto no significa que Firebase ML esté obsoleto frente a ML Kit, solo que para ciertos casos hay APIs que dejan de estar disponibles.

Para más información de Firebase ML: https://firebase.google.com/docs/ml?hl=es

Diferencias entre ML Kit y Firebase ML

Llegados a este punto, donde hemos conocido ML Kit y Firebase ML, nos pueden surgir ciertas dudas para diferenciar ambas plataformas.

A grosso modo, Firebase ML y ML Kit no son más que capas de abstracción de todas las funciones del machine learning diseñados para ejecutarse en dispositivos móviles, que de una forma u otra realizan el mismo trabajo.

Pero ¿qué en qué se diferencian?

Con esta tabla podemos ver de forma más clara que diferencia a ambas plataformas, aunque el resultado final sea el mismo, el camino hacía conseguirlo difiere y debemos de ver cuál se adapta más a las necesidades de cada proyecto.

Ahora situándonos en nuestro caso práctico del principio, si tuviéramos que elegir entre ML Kit y Firebase ML ¿con cuál os quedarías? Bajo mi criterio me quedaría con ML Kit, sobre todo porque no tiene costes adicionales, permitiría que los usuarios puedan hacer uso de él incluso sin conexión y la más importante, porque el modelo de Recognition Text que nos ofrece Firebase ML está obsoleto.

De todas formas, siempre es interesante conocer todas las opciones que tenemos, su ventajas y desventajas y exponerlas al cliente para qué sea consciente en todo momento de las características de cada plataforma.

TensorFlow Lite y los modelos personalizados

En puntos anteriores de este artículo he mencionado varias veces las palabras “modelos personalizados” pero ¿qué son? Un modelo personalizado se define como un modelo que ha sido entrenado específicamente para resolver un problema o tarea en particular en un dominio en concreto con datos determinados.

Debemos de tener en cuenta que los conceptos de modelo personalizado ya exigen a los desarrolladores/as a tener conocimientos de machine learning, puesto que las características principales para crear modelos personalizados son:

  • Recopilación y formalización de datos
  • Entrenamiento del modelo con los datos
  • Adaptación de la tarea
  • Optimización
  • Iteración y aprendizaje
  • Flexibilidad y adaptabilidad

A diferencia de plataformas como las vistas anteriormente, la capa de abstracción entre el desarrollador y la tarea de machine learning desaparece, pero llegados a este punto es un buen momento para hablar de TensorFlow Lite.

TensorFlow Lite es una biblioteca basada en TensorFlow pero más ligera, específicamente diseñada para dispositivos móviles y sistemas integrados. Permite ejecutar modelos de machine learning en el dispositivo, pero espera ¿esto no lo podíamos hacer ya con ML Kit? correcto, pero a diferencia TensorFlow Lite permite personalizar o crear modelos.

Si retomamos nuestro caso práctico, en las tareas de reconocimiento de texto y traducción no tenemos la necesidad de entrenar ningún modelo. Los modelos ya pre-entrenados e integrados en ML Kit nos son más que suficientes para abarcar nuestras necesidades.

Podríamos hacer una funcionalidad de registro de asistencia de alumnos basadas en el reconocimiento facial. Obviamente no nos vale un modelo pre entrenado para reconocer caras solamente, puesto que queremos confirmar en cada caso que el alumno en cuestión es él. Para ello deberíamos de entrenar el modelo con las fotos de los alumnos en cuestión. Esto se podría hacer creando un modelo personalizado en base al reconocimiento facial e integrarlo en nuestra aplicación. Y para ello usamos TensorFlow Lite. Además, cabe destacar en este punto, y aquí cobrará más sentido, que Firebase ML permite alojar y lanzar modelos personalizados creados por TensorFlow Lite.

Podríamos hacer una funcionalidad de registro de asistencia de alumnos basadas en el reconocimiento facial. Obviamente no nos vale un modelo pre entrenado para reconocer caras solamente, puesto que queremos confirmar en cada caso que el alumno en cuestión es él. Para ello deberíamos de entrenar el modelo con las fotos de los alumnos en cuestión. Esto se podría hacer creando un modelo personalizado en base al reconocimiento facial e integrarlo en nuestra aplicación. Y para ello usamos TensorFlow Lite. Además, cabe destacar en este punto, y aquí cobrará más sentido, que Firebase ML permite alojar y lanzar modelos personalizados creados por TensorFlow Lite.

 

Conclusiones

Estas son algunas de las plataformas de machine learning orientadas a dispositivos móviles que debemos de conocer como desarrolladores Android para saber cómo afrontar los retos de integración en nuestras apps. Es importante destacar que existen otras basadas en servicios en la nube como puede ser OpenAI, AWS o AZURE, que poseen SDK integradas en el lenguaje Java o Kotlin para el caso de Android, o servicios basados en API REST y que podrían permitirnos abarcar los casos de nuestro caso práctico entre otros muchos.

Y también hay que hacer una mención especial la API de Gemini para desarrolladores Android, que salió no hace mucho tiempo atrás desde la redacción de este artículo, y provee a los desarrolladores Android de un SDK cliente para integrar la IA Generativa de Google, Gemini. Una alternativa a la que no podemos quitarle el ojo de encima a futuros, y que creará disruptivas en el concepto del machine learning para dispositivos Android.

Para más información sobre alguna de estas plataformas puedes visitar:

También me gustaría hacer mención a una herramienta web que desde Google nos proveen de recomendaciones de qué plataforma y modelo utilizar según nuestras necesidades.

Como podemos observar en la imagen si seleccionamos ANDROID / IOS > VISION > TEXT RECOGNITION la recomendación es usar ML Kit Text Recognition

Esto nos puede servir de ayuda cuando no tengamos muy claro que plataforma/modelo utilizar o si no sabemos si la plataforma nos puede ofrecer ese servicio.

Puedes probar en: https://developers.google.com/learn/topics/on-device-ml

En definitiva, con el auge de las inteligencias artificiales generativas, el constante crecimiento a nivel del hardware en los dispositivos móviles, la necesidad de que nuestras apps integran funcionalidades de machine learning nos llevan a tener que conocer con qué plataformas y herramientas tenemos, qué nos ofrecen y cómo diferenciar según los requisitos cual es la que más se adapta a nuestras necesidades.

Anterior

Despliegue de PHP en Azure con AzureDevops

Siguiente

Conversaciones inspiradoras O2O. Alberto García- VP Engineer

Talento O2O

¿Te apetece formar parte de nuestro equipo?

Mira las oportunidades