Skip to content
This repository has been archived by the owner on Dec 20, 2022. It is now read-only.

Reconocimiento de gestos usando Arduino Nano 33 BLE

Javier Martínez edited this page Nov 4, 2021 · 7 revisions

Introducción

Recorriendo la página oficial de TensorFlow me topé con una sección de demos y tutoriales para todas las plataformas muy completa. Me llamó la atención el tutorial de reconocimiento de gestos y aproveché que tenía ese Arduino en casa para llevarlo a cabo. En está página de la wiki explicaré lo que he hecho en el tutorial y enseñaré mis resultados. Podéis encontrar en este paquete todo el código que usé y por lo tanto probarlo vosotros mismos con el modelo que ya entrené previamente.

Procedimiento

Paso 1. Visualización de los datos del sensor de Arduino

Antes de todo, para asegurarme de que el acelerómetro de nuestro Arduino funcionaba visualicé los datos usando el Serial Plotter del IDE de Arduino mientras lo agitaba. Para ello usé el fichero IMU_Capture.ino del tutorial.

Paso 2. Captura de datos de entrenamiento

Para capturar los datos de entrenamiento usé el Serial Monitor del IDE de Arduino, ejecutando el fichero mencionado anteriormente realizaba el gesto deseado y los datos del movimiento me salían por pantalla en el Serial Monitor. Realicé el movimiento varias veces para recopilar la mayor cantidad de datos posible y después lo pegaba todo en un fichero .csv. Los dos ficheros de datos que generé son punch.csv (puñetazo) y flex.csv (flexión de brazo).

Paso 3. Entrenamiento en TensorFlow

Para realizar el entrenamiento de nuestro modelo el tutorial ofrece un Google Colab con el código necesario para realizar la tarea. Yo lo que hice es ir copiando el código en un script local de Python e intentar que corriera en mi máquina resolviendo los errores que surgieran. Los dos scripts resultantes los puedes encontrar aquí.

El primero de ellos (graph_data.py) sirve para plotear en gráficas los datos de entrenamiento recopilados. A continuación podemos ver un ejemplo con los datos de entrenamiento del punch.

Y el segundo script train.py ya finalmente sirve para entrenar el modelo. Resumiendo está compuesto por los siguientes pasos (que algunos todavía no entiendo del todo bien):

  • Parsear los datos: esto se hace para que la red neuronal pueda usar los datos del fichero csv correctamente, no puede leer directamente de ese fichero.
  • Aleatorizar y dividir los pares de entrada y salida en: 60% para el entrenamiento del modelo, 20% para comprobar que tal se desempeña el modelo y 20% para probar el modelo después del entrenamiento.
  • Construir y entrenar el modelo: para ello se ayuda de Keras.
  • Verificación: en el Google Colab aparecen varias formas de comprobar que todo funciona bien graficando distintos parámetros que todavía no logro entender.
  • Convierte el modelo entrenado a formato de TensorFlow Lite
  • Convierte el modelo anterior en un Header File para Arduino

Paso 4. Clasificación de datos

Una vez más el tutorial nos ofrece un Sketch IMU_Classifier.ino que junto al fichero model.h que hemos generado en el apartado anterior nos dará la solución final a nuestro problema. Este Sketch clasificará nuestros movimientos en punch o flex usando el modelo anteriormente entrenado.