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

Detección de Tos con TinyML en Arduino Nano para Detección Temprana de Gripe

Componentes y Suministros

Componente Cantidad
Arduino Nano 33 BLE Sense 1

Aplicaciones y Servicios Online

Descripción del Proyecto

Existe una enorme necesidad de soluciones económicas y fácilmente desplegables para la detección temprana de COVID-19 y otras gripes. Junto con la ONU, Hackster, Edge Impulse y muchos otros, lanzamos recientemente el "UN Covid Detect & Protect Challenge" para crear soluciones fácilmente desplegables para la prevención y detección de gripe en países en desarrollo. En este tutorial mostramos cómo usar Edge Impulse machine learning en un Arduino Nano BLE Sense para detectar la presencia de tos en audio en tiempo real. Construimos un dataset de muestras de tos y ruido de fondo, y aplicamos un modelo TinyML altamente optimizado, para construir un sistema de detección de tos que se ejecuta en tiempo real en menos de 20 kB de RAM en el Nano BLE Sense. Este mismo enfoque se aplica a muchas otras aplicaciones de reconocimiento de patrones de audio embebido, como cuidado de ancianos, seguridad y monitorización de máquinas. Este proyecto y dataset fue iniciado originalmente por Kartik Thakore para ayudar en el esfuerzo contra el COVID-19.

Primeros Pasos

Este tutorial requiere:

Usaremos Edge Impulse, una plataforma de desarrollo online para machine learning en dispositivos edge. Cree una cuenta gratuita registrándose aquí. Inicie sesión y dé un nombre a su nuevo proyecto haciendo clic en el título. Llamaremos al nuestro "Arduino Cough Tutorial".

Recopilación del Dataset

El primer paso en cualquier proyecto de machine learning es recopilar un dataset que represente muestras conocidas de datos que queremos poder igualar en nuestro dispositivo Arduino. Para empezar, hemos creado un pequeño dataset con 10 minutos de audio en dos clases: "tos" y "ruido". Mostraremos cómo importar este dataset a su proyecto Edge Impulse, añadir sus propias muestras o incluso empezar su propio dataset desde cero.

Nota: Forzarse a toser es muy duro para las cuerdas vocales, ¡tenga cuidado al recopilar datos y probar!

  1. Descargue nuestro dataset de tos y extraiga el archivo en su PC: https://cdn.edgeimpulse.com/datasets/cough.zip
  2. Importe el dataset usando Edge Impulse CLI Uploader. Instale Edge Impulse CLI siguiendo las instrucciones de instalación.
  3. Abra una terminal, navegue a la carpeta donde extrajo el archivo y ejecute:
$ edge-impulse-uploader --clean
$ edge-impulse-uploader --category training training/*
$ edge-impulse-uploader --category testing testing/*

Se le pedirá su usuario, contraseña y proyecto de Edge Impulse. Las muestras del dataset serán visibles en la página Adquisición de datos. Al hacer clic en una muestra, puede ver su aspecto y escuchar el audio.

10 minutos de datos de tos y ruido son suficientes para empezar. Opcionalmente, puede ampliar el dataset con sus propias muestras. Puede recopilar nuevas muestras directamente desde dispositivos en la página Adquisición de datos. Las muestras de audio en formato WAV también pueden subirse usando Edge Impulse CLI Uploader.

La forma más fácil es recopilar datos de audio usando su móvil. Vaya a la página Dispositivos y haga clic en "+ Conectar un nuevo dispositivo". Seleccione "Usar su móvil". Esto generará un código QR único para abrir una aplicación web en el navegador de su teléfono. Escanee el código QR y abra el enlace.

La aplicación web se conectará con su proyecto Edge Impulse. En la sección "Grabar nuevos datos", escriba una etiqueta "tos" o "ruido", asegúrese de que "Micrófono" está seleccionado como Sensor y haga clic en "Iniciar muestreo". Su teléfono recopilará una muestra de audio y la añadirá a su dataset.

La recopilación directa desde la placa Nano BLE Sense también es compatible. Siga estas instrucciones para instalar el firmware y daemon de Edge Impulse. Una vez conectado el dispositivo, puede recopilar muestras igual que con el móvil.

Crear su Impulso

Seleccionaremos bloques de procesamiento de señal y machine learning en la página Crear impulso. El impulso comienza vacío, con bloques Raw data y Output feature. Mantenga la configuración por defecto: ventana de 1000 ms e incremento de ventana de 500 ms. Esto significa que nuestros datos de audio se procesarán de 1 segundo en 1 segundo, comenzando cada 0.5 segundos. Una ventana pequeña ahorra memoria en el dispositivo embebido, pero requiere muestras de tos sin grandes pausas entre toses.

  1. Haga clic en "Añadir bloque de procesamiento" y seleccione Audio (MFCC).
  2. Haga clic en "Añadir bloque de aprendizaje" y seleccione Red Neuronal (Keras).
  3. Haga clic en "Guardar impulso".

El bloque de audio extraerá un espectrograma para cada ventana de audio, y el bloque de red neuronal se entrenará para clasificar el espectrograma como "tos" o "ruido" basado en nuestro dataset de entrenamiento.

Generaremos características del dataset de entrenamiento en la página MFCC. Esta página muestra el espectrograma extraído para cada ventana de 1 segundo de cualquier muestra del dataset. Puede dejar los parámetros por defecto.

Haga clic en "Generar características" para procesar todo el dataset de entrenamiento. Esto tardará un par de minutos.

Configure y entrene la red neuronal en la página Clasificador NN. La red neuronal por defecto funciona bien para sonidos continuos como agua corriendo. La detección de tos es más compleja, así que configuraremos una red más rica usando convolución 2D a través del espectrograma de cada ventana. La convolución 2D procesa el espectrograma de audio de forma similar a la clasificación de imágenes.

Presione la esquina superior derecha de "Configuración de red neuronal" y seleccione "Cambiar a modo Keras (experto)". Reemplace la "Arquitectura de red neuronal" con el siguiente código y establezca "Calificación mínima de confianza" en "0.70". Luego haga clic en "Iniciar entrenamiento". El entrenamiento tardará unos segundos.

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.constraints import MaxNorm

model = Sequential()
model.add(InputLayer(input_shape=(X_train.shape[1], ), name='x_input'))
model.add(Reshape((int(X_train.shape[1] / 13), 13, 1), input_shape=(X_train.shape[1], )))
model.add(Conv2D(10, kernel_size=5, activation='relu', padding='same', kernel_constraint=MaxNorm(3)))
model.add(AveragePooling2D(pool_size=2, padding='same'))
model.add(Conv2D(5, kernel_size=5, activation='relu', padding='same', kernel_constraint=MaxNorm(3)))
model.add(AveragePooling2D(pool_size=2, padding='same'))
model.add(Flatten())
model.add(Dense(classes, activation='softmax', name='y_pred', kernel_constraint=MaxNorm(3)))

opt = Adam(lr=0.005, beta_1=0.9, beta_2=0.999)
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
model.fit(X_train, Y_train, batch_size=32, epochs=9, validation_data=(X_test, Y_test), verbose=2)

La página mostrará el rendimiento del entrenamiento y el rendimiento en dispositivo.

Entrenamiento y Pruebas

La página Clasificación en vivo permite probar el algoritmo con los datos de prueba existentes o transmitiendo audio desde su móvil o dispositivo Arduino. Elija cualquier muestra de prueba y presione "Cargar muestra". Esto clasificará la muestra y mostrará los resultados.

También puede probar con datos en vivo. Refresque la página del navegador en su móvil, seleccione su dispositivo en "Clasificar nuevos datos" y presione "Iniciar muestreo". Igualmente puede transmitir muestras desde su Nano BLE Sense cuando está conectado al proyecto via edge-impulse-daemon.

Despliegue

Puede desplegar fácilmente el algoritmo de detección de tos en el móvil. Vaya a la ventana del navegador en su teléfono, refresque y presione "Cambiar a modo clasificación". Esto construirá automáticamente el proyecto en un paquete WebAssembly y lo ejecutará en su teléfono continuamente (¡no se requiere nube después de eso, incluso modo avión!).

Para desplegar en el Nano BLE Sense, vaya a la página Despliegue. Seleccione "Arduino Nano 33 BLE Sense" bajo "Construir firmware" y haga clic en "Construir".

Esto construirá un firmware completo para el Nano BLE Sense incluyendo su último algoritmo. Siga las instrucciones en pantalla para flashear su placa Arduino con el binario.

Una vez flasheado el Arduino, abra un puerto serie al dispositivo mientras está conectado por USB a 115,200 baudios. Una vez abierto el puerto serie, presione Enter para obtener un prompt y luego:

> AT+RUNIMPULSE
Inferencing settings:
 Interval: 0.06 ms.
 Frame size: 16000
 Sample length: 1000 ms.
 No. of classes: 2
Starting inferencing, press 'b' to break
Recording...
Recording done
Predictions (DSP: 495 ms., Classification: 84 ms., Anomaly: 0 ms.):
 cough: 0.01562
 noise: 0.98438
Starting inferencing in 2 seconds...
Recording...
Recording done
Predictions (DSP: 495 ms., Classification: 84 ms., Anomaly: 0 ms.):
 cough: 0.86719
 noise: 0.13281
Starting inferencing in 2 seconds...
Recording...
Recording done
Predictions (DSP: 495 ms., Classification: 84 ms., Anomaly: 0 ms.):
 cough: 0.01562
 noise: 0.98438

Trabajo Futuro

El límite es el cielo con TinyML, sensores y Edge Impulse en Arduino. Algunas ideas:

Proceso de manufactura

  1. Sensor K30 CO₂: Monitorización en tiempo real de la calidad del aire interior
  2. Facilitar la comunicación sordo‑ciego usando 1Sheeld y Arduino
  3. Alcancía Inteligente: Controla un Aceptador de Monedas con Arduino Nano
  4. Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
  5. Integración del sensor de huella capacitivo DFRobot (ID809) con Arduino o ESP8266
  6. Proyecto HMI Interactivo con Nextion, Arduino Mega y Múltiples Sensores
  7. Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino
  8. Evaluación de la salud de plantas con TinyML: Guía práctica
  9. Sistema de monitorización de incendios forestales en tiempo real con alertas SMS
  10. Medición Precisa de Radiación Solar con Arduino UNO y Shield Ethernet
  11. Sistema Radar Compacto con Arduino Nano, Sensor HC-SR04 y Pantalla 1.8"