Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Détection de la toux avec TinyML sur Arduino

Composants et fournitures

Arduino Nano 33 BLE Sense
× 1

Applications et services en ligne

Edge Impulse Studio

À propos de ce projet

Il existe un énorme besoin de solutions peu coûteuses et facilement déployables pour la détection précoce du COVID-19 et d'autres grippes. En collaboration avec l'ONU, Hackster, Edge Impulse et bien d'autres, nous avons récemment lancé le UN Covid Detect &Protect Challenge visant à créer des solutions facilement déployables pour la prévention et la détection de la grippe dans les pays en développement. Dans ce didacticiel, nous montrons comment utiliser l'apprentissage automatique Edge Impulse sur un Arduino Nano BLE Sense pour détecter la présence de toux en temps réel. Nous avons construit un ensemble de données d'échantillons de toux et de bruit de fond, et appliqué un modèle TInyML hautement optimisé, pour créer un système de détection de toux qui s'exécute en temps réel dans moins de 20 Ko de RAM sur le Nano BLE Sense. Cette même approche s'applique à de nombreuses autres applications de correspondance de motifs audio intégrées, par exemple les soins aux personnes âgées, la sécurité et la surveillance des machines. Ce projet et cet ensemble de données ont été initialement lancés par Kartik Thakore pour aider à l'effort COVID-19.

Commencer

Ce tutoriel a les exigences suivantes :

  • Compréhension de base du développement logiciel et d'Arduino
  • Arduino IDE ou CLI installé
  • Téléphone mobile Android ou iOS
  • Arduino Nano BLE Sense ou carte Cortex-M4+ équivalente avec un microphone (en option)

Nous utiliserons Edge Impulse, une plate-forme de développement en ligne pour l'apprentissage automatique sur les appareils de périphérie. Créez un compte gratuit en vous inscrivant ici. Connectez-vous à votre compte et donnez un nom à votre nouveau projet en cliquant sur le titre. Nous appelons le nôtre le « Tutoriel contre la toux Arduino ».

Collecte de l'ensemble de données

La première étape de tout projet d'apprentissage automatique consiste à collecter un ensemble de données qui représente des échantillons connus de données que nous aimerions pouvoir faire correspondre sur notre appareil Arduino. Pour commencer, nous avons créé un petit ensemble de données avec 10 minutes d'audio en deux classes, « toux » et « bruit ». Nous montrerons comment importer cet ensemble de données dans votre projet Edge Impulse, ajouter vos propres échantillons ou même démarrer votre propre ensemble de données à partir de zéro. Cet ensemble de données est petit et comporte un nombre limité d'échantillons de toux et de bruit de fond doux. Ainsi, l'ensemble de données n'est approprié que pour l'expérimentation, et le modèle produit dans ce didacticiel est capable de différencier uniquement un bruit de fond faible et une petite plage de toux. Nous vous encourageons à étendre l'ensemble de données avec une gamme plus large de toux, de bruit de fond et d'autres classes comme la parole humaine pour améliorer les performances.

Remarque : Vous forcer à tousser est très dur pour vos cordes vocales, soyez prudent lorsque vous collectez des données et effectuez des tests !

Téléchargez d'abord notre jeu de données sur la toux et extrayez le fichier sur votre PC à l'emplacement de votre choix :https://cdn.edgeimpulse.com/datasets/cough.zip

Vous pouvez importer cet ensemble de données dans votre projet Edge Impulse à l'aide de Edge Impulse CLI Uploader. Installez la CLI Edge Impulse en suivant ces instructions d'installation.

Ouvrez un terminal ou une invite de commande et accédez au dossier dans lequel vous avez extrait le fichier.

Exécuter :

$ edge-impulse-uploader --clean
$ edge-impulse-uploader --category training training/*
$ edge-impulse-uploader --category testing testing/*

Vous serez invité à saisir votre nom d'utilisateur Edge Impulse, votre mot de passe et le projet dans lequel vous souhaitez ajouter l'ensemble de données. Les échantillons de jeux de données seront désormais visibles sur l'Acquisition de données page. En cliquant sur un échantillon, nous pouvons voir à quoi ressemble l'échantillon et entendre l'audio en cliquant sur le bouton de lecture sous chaque graphique.

10 minutes d'échantillons de données sur la toux et le bruit suffisent pour commencer. Vous pouvez éventuellement étendre l'ensemble de données avec vos propres échantillons de toux et de bruit de fond. Nous pouvons collecter de nouveaux échantillons de données directement à partir des appareils de l'Acquisition de données page. Des échantillons audio au format WAV peuvent également être téléchargés à l'aide de Edge Impulse CLI Uploader.

Le moyen le plus simple de commencer est de collecter des données audio à l'aide de votre téléphone portable (tutoriel complet ici). Accédez aux Appareils page, et cliquez sur le bouton « + Connecter un nouvel appareil » en haut à droite. Sélectionnez « Utilisez votre téléphone mobile ». Cela produira un code QR unique pour ouvrir une application Web sur le navigateur de votre téléphone. Prenez une photo du code QR et sélectionnez pour ouvrir le lien.

L'application Web se connectera à votre projet Edge Impulse et devrait ressembler à ceci :

Nous pouvons désormais collecter des échantillons de données audio directement depuis le téléphone à partir de l'Acquisition de données page de Edge Impulse. Dans la section « Enregistrer les nouvelles données », saisissez une étiquette « toux » ou « bruit », assurez-vous que « Microphone » est sélectionné comme capteur, puis cliquez sur « Démarrer l'échantillonnage ». Votre téléphone va maintenant collecter un échantillon audio et l'ajouter à votre ensemble de données.

La collecte de données audio directement à partir de la carte Nano BLE Sense est également prise en charge. Suivez ces instructions pour installer le firmware et le démon Edge Impulse. Une fois l'appareil connecté à Edge Impulse, vous pouvez collecter des échantillons de données comme avec votre téléphone portable ci-dessus.

Créer votre impulsion

Ensuite, nous sélectionnerons des blocs de traitement du signal et d'apprentissage automatique, sur Créer une impulsion page. L'impulsion commencera en blanc, avec des blocs de fonctionnalités de données brutes et de sortie. Conservez les paramètres par défaut d'une taille de fenêtre de 1000 ms et d'une augmentation de fenêtre de 500 ms. Cela signifie que nos données audio seront traitées 1 s à la fois, en commençant toutes les 0,5 s. L'utilisation d'une petite fenêtre permet d'économiser de la mémoire sur l'appareil intégré, mais signifie que nous avons besoin d'échantillons de données sur la toux sans interruption importante entre les toux.

Cliquez sur « Ajouter un bloc de traitement » et sélectionnez Audio (MFCC) bloquer. Cliquez ensuite sur « Ajouter un bloc d'apprentissage » et sélectionnez le Réseau de neurones (Keras) bloquer. Cliquez sur « Enregistrer l'impulsion ». Le bloc audio extraira un spectrogramme pour chaque fenêtre audio, et le bloc de réseau neuronal sera entraîné pour classer le spectrogramme en tant que « toux » ou « bruit » en fonction de notre ensemble de données d'entraînement. Votre impulsion résultante ressemblera à ceci :

Ensuite, nous allons générer des fonctionnalités à partir de l'ensemble de données d'entraînement sur le MFCC page. Cette page montre à quoi ressemble le spectrogramme extrait pour chaque fenêtre d'une seconde à partir de l'un des échantillons de jeu de données. Nous pouvons laisser les paramètres à leurs valeurs par défaut.

Cliquez ensuite sur le bouton « Générer des fonctionnalités », qui traite ensuite l'ensemble des données d'entraînement avec ce bloc de traitement. Cela crée l'ensemble complet de fonctionnalités qui seront utilisées pour former notre réseau neuronal à l'étape suivante. Appuyez sur le bouton « Générer des fonctionnalités » pour démarrer le traitement, cela prendra quelques minutes.

Nous pouvons maintenant procéder à la configuration et à l'entraînement de notre réseau de neurones sur le classificateur NN page. Le réseau de neurones par défaut fonctionne bien pour les sons continus comme l'eau qui coule. La détection de la toux est plus compliquée, nous allons donc configurer un réseau plus riche en utilisant la convolution 2D à travers le spectrogramme de chaque fenêtre. La convolution 2D traite le spectrogramme audio de la même manière que la classification d'images. Appuyez sur le coin supérieur droit de la section « Paramètres du réseau neuronal » et sélectionnez « Passer en mode Keras (expert) ».

Remplacez la définition « Architecture de réseau neuronal » par le code suivant et définissez le paramètre « Indice de confiance minimal » sur « 0,70 ». Cliquez ensuite sur le bouton « Démarrer la formation ». L'entraînement prendra quelques secondes.

importer tensorflow en tant que tf
depuis tensorflow.keras.models importer Sequential
depuis tensorflow.keras.layers importer Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalisation, Conv2D, MaxPooling2D, AveragePooling2D
depuis tensorflow.keras.optimizers importer Adam
depuis tensorflow.keras.constraints importer MaxNorm
# architecture du modèle
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_co nstraint=MaxNorm(3)))
# ceci contrôle le taux d'apprentissage
opt =Adam(lr=0.005, beta_1=0.9, beta_2=0.999)
# entraîne le réseau de neurones
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) , verbeux=2)

La page affichera les performances d'entraînement et les performances sur l'appareil, qui devraient ressembler à ceci en fonction de votre ensemble de données :

Notre algorithme de détection de toux Arduino est maintenant prêt à être essayé !

Formation et tests

Le Classement en direct La page nous permet de tester l'algorithme à la fois avec les données de test existantes fournies avec l'ensemble de données ou en diffusant des données audio à partir de votre téléphone mobile ou de votre appareil Arduino. Nous pouvons commencer par un test simple en choisissant l'un des échantillons de test et en appuyant sur « Charger l'échantillon ». Cela classera l'échantillon de test et affichera les résultats :

Nous pouvons également tester l'algorithme avec des données en direct. Commencez avec votre téléphone mobile en actualisant la page du navigateur que nous avons ouverte plus tôt sur votre téléphone. Sélectionnez ensuite votre appareil dans la section « Classifier les nouvelles données » et appuyez sur « Démarrer l'échantillonnage ». Vous pouvez également diffuser des échantillons audio à partir de votre Nano BLE Sense lorsqu'il est connecté au projet via le démon edge-impulse comme dans l'étape de collecte de données.

Déploiement

Nous pouvons facilement déployer notre algorithme de détection de la toux sur le téléphone mobile. Accédez à la fenêtre du navigateur de votre téléphone et actualisez, puis appuyez sur le bouton « Passer en mode de classification ». Cela va automatiquement construire le projet dans un package WebAssembly et l'exécuter sur votre téléphone en continu (aucun cloud requis après cela, même passer en mode avion !)

Ensuite, nous pouvons déployer l'algorithme sur le Nano BLE Sense en allant dans le Déploiement page. Sélectionnez « Arduino Nano 33 BLE Sense » sous « Build firmware », puis cliquez sur « Build ».

Cela créera un firmware complet pour le Nano BLE Sense, y compris votre dernier algorithme. Suivez les instructions à l'écran pour flasher votre carte Arduino avec le binaire.

Une fois l'Arduino flashé, nous pouvons ouvrir un port série sur l'appareil pendant qu'il est branché en USB à 115 200 bauds. Une fois le port série ouvert, appuyez sur Entrée pour obtenir une invite, puis :

> AT+RUNIMPULSE
Paramètres d'inférence :
Intervalle :0,06 ms.
Taille de la trame :16000
Longueur de l'échantillon :1000 ms.
No. de classes :2
Démarrer l'inférence, appuyer sur 'b' pour rompre
Enregistrement...
Enregistrement effectué
Prédictions (DSP :495 ms., Classification :84 ms., Anomalie :0 ms.) :
toux :0,01562
bruit :0,98438
Démarrage de l'inférence en 2 secondes...
Enregistrement...
Enregistrement effectué
Prédictions (DSP :495 ms., Classification :84 ms., Anomalie :0 ms.) :
toux :0,01562
bruit :0,98438
Démarrage de l'inférence en 2 secondes...
Enregistrement...
Enregistrement effectué
Prédictions (DSP :495 ms., Classification :84 ms., Anomalie :0 ms.) :
toux :0,86719
bruit :0,13281
Démarrage de l'inférence en 2 secondes...
Enregistrement...
Enregistrement effectué
Prédictions (DSP :495 ms., Classification :84 ms., Anomalie :0 ms.) :
toux :0,01562
bruit :0,98438

Travail futur

Le ciel est la limite avec TinyML, les capteurs et Edge Impulse sur Arduino, voici quelques idées pour la suite des travaux :

  • Étendez l'ensemble de données par défaut avec vos propres bruits de toux et de fond, n'oubliez pas de vous recycler régulièrement et de tester. Vous pouvez configurer des tests unitaires sur la page Tests pour vous assurer que le modèle fonctionne toujours au fur et à mesure de son extension.
  • Ajoutez une nouvelle classe et des données pour les sons humains qui ne toussent pas, comme le bruit de fond, les bâillements, etc.
  • Commencez avec un nouvel ensemble de données, en collectant des échantillons audio pour détecter quelque chose de nouveau. Astuce :Vous pouvez télécharger uniquement les données de classe de bruit de cet ensemble de données pour commencer !
  • À partir de ces instructions, déployez-vous dans la bibliothèque Arduino dans le cadre d'un croquis Arduino pour afficher la détection de la toux à l'aide de la LED ou d'un écran
  • Utilisez d'autres capteurs comme l'accéléromètre à 3 axes du Nano BLE Sense en suivant ce didacticiel.

Processus de fabrication

  1. Surveillance du CO2 avec le capteur K30
  2. Communication sourds-aveugles avec 1Sheeld/Arduino
  3. Contrôler l'accepteur de pièces avec Arduino
  4. Arduino avec Bluetooth pour contrôler une LED !
  5. Capteur d'empreintes digitales capacitif avec un Arduino ou ESP8266
  6. Jouer avec Nextion Display
  7. Bras robotique contrôlé par Nunchuk (avec Arduino)
  8. Détermination de la santé des plantes avec TinyML
  9. Système de surveillance et de détection des incendies de forêt (avec alertes SMS)