Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android Things

Android Things y Aprendizaje Automático

by
Length:MediumLanguages:
This post is part of a series called Android Things.
Android Things: Understanding and Writing Drivers
Android Things: Creating a Cloud-Connected Doorman

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

Android Things te permite hacer impresionantes dispositivos IoT con código simple, pero una de las cosas que puede hacer a un dispositivo extraordinario es el aprendizaje automático. Mientras que hay algunos servicios disponibles en línea que te permitirán cargar información y revolverán resultados, poder usar aprendizaje automático de manera local y sin conexión puede ser increíblemente útil.

En este artículo, compartiré algunas de mis experiencias usando el clasificador de imagen TensorFlow, comenzando con el ejemplo Android Things TensorFlow de Google.

¿Por Qué Usar Aprendizaje Automático?

El aprendizaje automático puede ayudar a resolver problemas que aplicaciones convencionales no pueden. Para proporcionar contexto, recorramos un simple ejemplo en donde el aprendizaje automático puede ser utilizado con un dispositivo IoT para  mejorar la vida diaria.

Aquí en Colorado, no es poco común ver artículos de noticias sobre vida silvestre saliendo de las montañas y caminando por el centro:

News story of a moose in downtown Boulder Colorado

U osos trepando árboles en la universidad local:

News article of a bear at CU Boulder in Colorado

¡Incluso un amigo publico un video de un oso afuera de su hogar!

Snapshot from a video of a bear outside of a home

Mientras que estas situaciones son usualmente resueltas sin problema, hay información pública disponible de la División de Parques y Vida Silvestre del Estado de Colorado que detalla conflictos entre humanos y osos negros, y actividades/rangos de varias especies de vida silvestre. Viendo la información de conflictos entre humanos y osos negros en Google Earth, podemos encontrar áreas en donde los encuentros con osos pueden ser un riesgo para la seguridad pública.

Colorado bear-human conflict map

Además, mientras estaba leyendo sobre información de vida silvestre en el estado, un amigo publicó una imagen de su carro teniendo un accidente involucrando a un alce durante su bajada a Durango, CO. De acuerdo a Registro de Choques del Departamento de Transporte de Colorado (CDOT), solo más de 4,000 accidentes involucrando vida silvestre ocurrieron a lo largo de un año en Colorado, con cerca de 150 lesiones y una fatalidad. En todos los Estados Unidos, este número salta entre 725,000 y 1,500,000 accidentes con cerca de 200 fatalidades humanas por año, de acuerdo a la hoja de hechos de los Defensores de la Vida Silvestre.

Car after hitting an elk near Durango Colorado

¿Así que cómo podemos usar aprendizaje automático para ayudar a solucionar este problema? Con reconocimiento de imagen, podemos crear un dispositivo activado por movimiento que pueda capturar una imagen con un Raspberry Pi y después analizarla para detectar un animal silvestre potencialmente peligroso.

Usando la muestra de Google, podemos crear un dispositivo Android Things que tome fotografías con un Raspberry Pi y clasifique el contenido de esas imágenes contra miles de etiquetas posibles. Pero estas etiquetas no empatan exactamente lo que necesitaríamos para usar.

Entrenando a TensorFlow para usar nuestras propias imágenes y etiquetas, podemos crear un dispositivo que pueda identificar a un alce u oso negro, y después realizar una acción si uno es detectado. Esto nos permite hacer un dispositivo que pueda salvar vidas potencialmente, mientras que aún sea simple de crear.

Creando Un Clasificador Personalizado de Imagen TensorFlow

Después de que has instalado y ejecutado la muestra TensorFlow de Google para Android Things, es tiempo de comenzar a modificarla. La primera cosa que querrás hacer es asegurar que TensorFlow está en tu computadora y funcionando. Esto puede ser bastante complejo, y la manera más sencilla que encontré para hacerlo funcionar apropiadamente a través del proceso entero de generar archivos entrenados es instalar y usar Docker. Este programa te permitirá ejecutar máquinas virtuales en tu computadora que están pre-configuradas para TensorFlow.

Una vez que has instalado Docker y lo tienes ejecutando en tu computadora, deberías abrir sus preferencias y establecer uso de memoria para tus máquinas virtuales. Establecí la mía para usar 7GB de memoria, lo cuál puede ser más de lo que necesitas, pero pasé días intentando que TensorFlow creara apropiadamente los gráficos entrenados requeridos sin fallar antes de darme cuanta que la máquina virtual se estaba quedando sin memoria.

Lo que estaremos haciendo en este ejemplo es re-entrenando el ejemplo existente de aprendizaje automático para usar nuestros propios datos, ya que esto es mucho más rápido que entrenar un nuevo conjunto de datos desde cero. Para una explicación más detalladas de lo que estamos haciendo, puedes echar un vistazo a la documentación oficial de TensorFlow.

Docker advanced settings screen

Una vez que has instalado Docker y lo has iniciado en tu propia máquina, necesitarás ejecutarlo desde una terminal y jalar una imagen. Para este ejemplo estoy ejecutando bajo macOS, así que los comandos podrían ser un poco diferentes para tu plataforma.

Cuando todo ha terminado de configurarse, deberías tener un cursos en tu terminal similar a este:

En este punto necesitarás un conjunto de imágenes con las qué entrenar a TensorFlow. Usé el complemento de Chrome Fatkun Batch Download Image para descargar imágenes devueltas desde una búsqueda Google en masa. Cuando tienes el complemento instalado, puedes buscar lo que quieras clasificar y comenzar a seleccionar imágenes que quisieras guardar.

Chrome plugin screen for downloading bulk images

Para hacer el nombrado un poco más fácil, también podrías querer ir a la sección Más Opciones y dejar que el complemento renombre las imágenes mientras las descarga.

Bulk image download rename setting

Después necesitarás mover las imágenes que estás usando a una carpeta en tf_files bajo tu directorio de inicio, el cuál es una carpeta que creamos mientras iniciamos nuestra máquina docker. Para este ejemplo, mi directorio de imágenes se llama TensorFlowTrainingImages. Cada elemento clasificable debería tener su propia carpeta dentro de ese directorio, como se muestra abajo.

TensorFlow training images folder structure

Una vez que tus directorios están configurados, puedes comenzar a re-entrenar con el siguiente comando desde tu terminal Docker:

El comando de arriba generará cuellos de botella, que son esencialmente datos usados por el pase de datos de clasificación final, y un archivo de etiquetas y gráfico que son usados para clasificación.

Desde este punto en adelante, las operaciones que ejecutamos con TensorFlow pueden tomar desde unos cuantos minutos hasta más de una hora, dependiendo de la velocidad de tu computadora. Esto podría ser un buen momento para hacer café o dar una caminata rápida.

Mientras el comando de re-entrenamiento se ejecuta, deberías ver mucha salida en tu terminal similar a esto:

Una vez que tus cuellos de botella han sido generados, tendrás un archivo graph.pb y un archivo labels.txt que representan tus datos. Mientras que estos formatos funcionan muy bien cuando se ejecuta clasificación en tu computadora, estos tienden a no funcionar cuando se colocan en una aplicación Android. Necesitarás optimizarlos.

Comienza ejecutando el siguiente comando. Acepta todos los valores por defecto.

Una vez que la configuración ha terminado, ejecuta el siguiente comando para configurar la herramienta de configuración. Este paso tomó cerca de una hora en mi máquina, ¡así que la paciencia es clave!

Una vez que tu herramienta de optimización es construida, puedes usarla para optimizar tu archivo graph.

Ahora que tu graph optimizado está generado, puedes encontrarlo con tus etiquetas en la carpeta tf_files en tu directorio de inicio.

Contents of TensorFlow directory after generating machine learning data

Agregando Tu Clasificador Personalizado a la Muestra Android Things

¡Felicidades! Generar el gráfico y etiquetas TensorFlow es la parte difícil, y podría tomar unas modificaciones para generar apropiadamente. Ahora que los tienes, es tiempo de editar el proyecto de muestra de Android Things para usar tus propios datos. Primero, ve al archivo build.gradle de app y remueve la siguiente sección, asó como su declaración de complemento:

El código de arriba descarga el gráfico y etiquetas de muestra de Google y los agrega al directorio assets. Ya que hemos generado los propios, no necesitamos preocuparnos de esos y podemos borrar esas líneas.

Después, abre el archivo TensorFlowImageClassifier.java. Deberías ver unas cuantas variables declaradas hacia la parte superior del archivo, con un comentario largo sobre lo que necesitará ser cambiado si estás usando tus propios gráficos que fueron generados de un laboratorio de código (que es lo suficientemente cercano a lo que hicimos arriba).

Cambia la última parte de MODEL_FILE y LABEL_FILE para empatar el nombre de tu gráfico y etiqueta optimizados.

De vuelta al comentario largo en la fuente original, continuemos y editemos el archivo para empatar las recomendaciones de Google.

Notarás que estamos estableciendo NUM_CLASSES a 4. Este es el número de elementos disponibles para nuestro algoritmo de aprendizaje automático para clasificar. Puedes cambiar esto para empatar el número de categorías de clasificación con las que entrenaste.

Para concluir las cosas, mueve tu archivo graph optimizado y etiquetas al directorio app/src/main/assets. Una vez que eso está hecho, puedes instalar la aplicación de muestra en un Raspberry Pi con una módulo de cámara y probarlo. Abajo está una imagen que capturé con el dispositivo:

Picture of a bear taken with Android Things device

y los resultados que fueron enviados a Firebase (con algunas ligeras modificaciones a la aplicación de muestra).

Output data from machine learning classification of image
Como puedes ver, ¡el dispositivo identificó exitosamente al oso negro en la imagen!

Conclusión

En este tutorial obtuviste una breve introducción a usar TensorFlow para aprendizaje automático e integrarlo a una aplicación Android Things. Como has visto, el aprendizaje automático es una herramienta poderosa que puede ser usada para solucionar varios problemas con los que una aplicación convencional podría tener dificultades. Cuando se combinan aprendizaje automático con el Internet de las Cosas, puedes crear algunos dispositivos impresionantes y útiles que interactúan con el mundo a su alrededor.

Usando lo que has aprendido de este artículo, y otros en la serie Android Things, ¡puedes construir algunas nuevas aplicaciones y dispositivos realmente asombrosos!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.