Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

TinyML-Language Detector basado en Edge Impulse y Arduino

Componentes y suministros

Arduino Nano 33 BLE Sense
× 1
National Control Devices PCA9685 Válvula proporcional de controlador FET de 8 canales, 8 W y 12 V Controlador con interfaz I2C
× 1
Micro-servo motor SG90
× 3
Clip de batería de 9V
× 1

Herramientas y máquinas necesarias

Impresora 3D (genérica)
Soldador (genérico)

Aplicaciones y servicios en línea

Edge Impulse Studio
Arduino IDE
Autodesk Fusion 360

Acerca de este proyecto

Descripción general

La idea detrás de este proyecto es crear un clasificatorio de idiomas, utilizando una red neuronal / aprendizaje profundo implementado en un microcontrolador. El dispositivo identificará una palabra para los idiomas italiano, inglés y Francia. Las palabras a reconocer son " si "para el italiano", oui "para los franceses y" "para el inglés. El dispositivo está escuchando continuamente y una vez que se reconoce una de las 3 palabras, aparece la bandera del idioma asociado.

El proyecto se basa en los dos componentes principales, el microcontrolador Arduino Nano 33 BLE Sense y la plataforma de desarrollo Edge Impulse Studio.

La implementación del proyecto siguió estos pasos:

  • Muestreo / creación del conjunto de datos
  • Diseñe el modelo
  • Entrenamiento del modelo
  • Probando el modelo
  • Personalizar para el hardware
  • Implementación del modelo y su personalización
  • Construya el dispositivo final (el hardware alrededor del modelo).

Muestreo / creación del conjunto de datos

El conjunto de datos está compuesto por el registro de las 3 palabras (oui, si, sí) de forma global que duran aproximadamente 30 minutos (10 minutos para cada palabra).

Para cada palabra se creó un archivo de sonido continuo, donde la misma palabra se repetía continuamente, luego, usando la aplicación Audacity, el archivo se dividió en varios archivos, cada uno de los cuales tenía una duración de un segundo. Cada archivo contiene un ejemplo de la palabra.

Luego, estos archivos se cargaron en Edge Impulse y se etiquetaron de acuerdo con la palabra.

Además de estos archivos, se cargó otro conjunto de archivos de grabación con una duración de 1 segundo y se etiquetó como ruido de fondo.

Globalmente, los datos de entrenamiento se componían de 33 minutos (10 minutos para cada palabra y los 3 minutos para el ruido de fondo)

Diseña el modelo

El modelo se implementó aprovechando la plataforma de impulso de borde, donde la mayoría de los algoritmos necesarios ya estaban definidos con hoyuelos.

El primer paso para crear el modelo es transformar el sonido en una serie temporal. Luego, la serie de tiempo se particiona con un tamaño de ventana de tiempo predefinido.

(Esta primera transformación se muestra en el lado rojo de la imagen de abajo).

El segundo paso es utilizar la técnica de procesamiento de señales, en este caso el MFCC (Mel Frequency Cepstral Coefficients), para extraer las características de la serie temporal que mejor caracterizan a cada una de las 4 clases (3 palabras + el fondo).

A continuación, se muestra un ejemplo de la transformación MFCC y sus coeficientes.

La convolución de la serie de tiempo y los coeficientes se utiliza para alimentar una red neuronal. Finalmente, la salida de las redes neuronales proporciona una probabilidad de pertenencia para cada clase.

A continuación, se muestra una descripción general de la implementación de la red neuronal y su rendimiento de clasificación.

Capacitación:personalización para Arduino Nano 33 BLE Sense

Para el entrenamiento y para la personalización del modelo final, una nueva opción está disponible en Edge Impulse Studio llamada " EON Tuner ". Permite elegir la arquitectura óptima para una aplicación integrada de aprendizaje automático.

Ejecuta muchas instancias de posibles modelos en paralelo, cada instancia con una configuración diferente (técnica digital de señal diferente y arquitecturas de redes neuronales diferentes).

Esta opción requiere solo un par de información para ejecutarse:

  • El " objetivo "que representa el tipo de modelo (en este caso" Detección de palabras clave ")
  • El hardware donde se ejecuta la aplicación (en este caso, " Arduino Nano 33 BLE Sense (Cortex-M4F 64MHz) ".

Para cada instancia, proporciona las pocas métricas de rendimiento de clasificación, el tiempo que lleva el cálculo, la cantidad de memoria RAM y el espacio del sistema de archivos utilizado en el sistema de archivos del microcontrolador.

Para este proyecto, seleccionamos las 5 mejores instancias por la precisión de clasificación y de ellas se eligió la más rápida.

Probando

La prueba se realizó mediante la recopilación de un nuevo conjunto de archivos del registrador y verificando la calidad de la clasificación.

Una vez se verificó que la clasificación fuera precisa. Pasamos al siguiente paso de la implementación, la implementación final.

Implementación

La implementación gracias al estudio de impulso de borde fue bastante sencilla.

Se seleccionó la opción de la biblioteca Arduino de las opciones de implementación. Eso proporciona un archivo arduino C estándar del modelo, que se puede personalizar para nuestras necesidades.

Una vez que la construcción concluye con el impulso de borde, se crea un archivo zip y se descarga en la máquina local, y solo necesita ser importado en Arduino Ide para la personalización final.

Código

El código está disponible en el enlace. El código se basa en el código descargado de edge-impulse con algunas personalizaciones, que se enumeran a continuación.

1. Se agregó la biblioteca Adafruit_PWMServoDriver.h para conducir los servos adjuntos a las banderas.

2. Se definió la función servos_selector para coordinar los servos de acuerdo con los resultados de la clasificación.

  void servos_selector (int iter) {
time_now =millis ();
delta =time_now - time_was;
if (delta> 2000) {
time_was =time_now;
switch (iter) {
case 0:
pwm.setPWM (0, 0, 350);
delay (500);
pwm.setPWM ( 0, 0, 200);
pwm.setPWM (1, 0, 200);
pwm.setPWM (2, 0, 200);
ruptura;
caso 1:
pwm.setPWM (1, 0, 350);
Serial.println ("2222");
retraso (500);
pwm.setPWM (0, 0, 200 );
pwm.setPWM (1, 0, 200);
pwm.setPWM (2, 0, 200);
romper;
caso 2:
pwm .setPWM (2, 0, 350);
Serial.println ("333");
retraso (500);
pwm.setPWM (0, 0, 200);
pwm.setPWM (1, 0, 200);
pwm.setPWM (2, 0, 200);
descanso;
}
}
}

3. Finalmente, se agregó una condición IF que invoca el servos_select función basada en " result.classification "objeto.

  for (size_t ix =0; ix  ei_printf ("% s:% .5f \ n", result.classification [ix] .label, 
result.classification [ix] .value);
}

#if EI_CLASSIFIER_HAS_ANOMALY ==1
ei_printf ("puntuación de anomalía:% .3f \ n", resultado.anomalía);
#endif
print_results =0;
}
if (result.classification [1] .value> 0.80) {
servos_selector (0);
}
else if (result.classification [2] .value> 0.80) {
servos_selector (1);
}
else if (result.classification [3] .value> 0.80) {
servos_selector (2);
}
}

Circuitos eléctricos

El circuito eléctrico se basa en el microcontrolador Arduino Nano 33 BLE Sense y utiliza un PCA9685 para controlar los 3 servos.

La carga de trabajo del PCA9685 es compatible con una batería externa de 9v.

Eso es todo.

Código

código
https://github.com/EnzoCalogero/Tensorflow_Lite_embeded/tree/main/nano_sense_EdgeImpulse/language_detection/nano_ble33_sense_microphone_continuous

Piezas y carcasas personalizadas

Esquemas

languagedetection_9RxXhRX5sj.fzz

Proceso de manufactura

  1. Juego de giroscopio Arduino con MPU-6050
  2. Dados digitales Arduino
  3. Iron Man
  4. Encuéntrame
  5. Control del humidificador Arduino
  6. Sonda usando arduino y visualización en procesamiento IDE
  7. MobBob:Robot Arduino DIY controlado por un teléfono inteligente Android
  8. Luz de escritorio reactiva de audio Arduino
  9. NeoMatrix Arduino Pong
  10. Joystick de Arduino
  11. Podómetro (Arduino 101)