- Composants requis
- Schéma
- Création de l'ensemble de données pour la machine de détection de la toux
- Entraîner le modèle et peaufiner le code
COVID19 est vraiment une pandémie historique qui affecte très gravement le monde entier et les gens construisent beaucoup de nouveaux appareils pour lutter contre elle. Nous avons également construit une machine de désinfection automatique et un pistolet thermique pour le dépistage de la température sans contact. Aujourd'hui, nous allons construire un autre appareil pour aider à lutter contre le coronavirus. Il s'agit d'un système de détection de la toux, qui peut faire la distinction entre le bruit et le son de la toux et peut aider à trouver un suspect Corona. Il utilisera des techniques d'apprentissage automatique pour cela.
Dans ce tutoriel, nous allons créer un système de détection de la toux en utilisant Arduino 33 BLE Sense et Edge Impulse Studio. Il peut faire la différence entre le bruit de fond normal et la toux dans l'audio en temps réel. Nous avons utilisé Edge Impulse Studio pour former un ensemble de données d'échantillons de toux et de bruit de fond et créer un modèle TInyML hautement optimisé, capable de détecter un son de toux en temps réel.
Composants requis
Matériel
- Arduino 33 BLE Sense
- LED
- Fils de cavalier
Logiciel
- Edge Impulse Studio
- IDE Arduino
Nous avons couvert un tutoriel détaillé sur Arduino 33 BLE Sense.
Schéma
Le schéma de circuit pour la détection de la toux à l'aide de Arduino 33 BLE Sense est donné ci-dessous. La partie Fritzing pour Arduino 33 BLE n'était pas disponible, j'ai donc utilisé Arduino Nano car les deux ont le même brochage.
Le fil positif de la LED est connecté à la broche numérique 4 du sens Arduino 33 BLE et le fil négatif est connecté à la broche GND d'Arduino.
Création de l'ensemble de données pour la machine de détection de la toux
Comme mentionné précédemment, nous utilisons Edge Impulse Studio pour former notre modèle de détection de la toux. Pour cela, nous devons collecter un ensemble de données contenant les échantillons de données que nous aimerions pouvoir reconnaître sur notre Arduino. Étant donné que le but est de détecter la toux, vous devrez collecter des échantillons de cela et d'autres échantillons pour le bruit, afin qu'il puisse distinguer la toux des autres bruits.
Nous allons créer un jeu de données avec deux classes «toux» et «bruit». Pour créer un ensemble de données, créez un compte Edge Impulse, vérifiez votre compte, puis démarrez un nouveau projet. Vous pouvez charger les échantillons en utilisant votre mobile, votre carte Arduino ou vous pouvez importer un ensemble de données dans votre compte Edge Impulse. Le moyen le plus simple de charger les échantillons dans votre compte consiste à utiliser votre téléphone mobile. Pour cela, vous devez connecter votre mobile à Edge Impulse.
Pour connecter votre téléphone mobile, cliquez sur « Appareils » puis sur « Connecter un nouvel appareil» .
Maintenant, dans la fenêtre suivante, cliquez sur « Utiliser votre téléphone mobile» , et un code QR apparaîtra. Scannez le code QR avec votre téléphone mobile à l'aide de Google Lens ou d'une autre application de scanner de code QR.
Cela connectera votre téléphone au studio Edge Impulse.
Une fois votre téléphone connecté à Edge Impulse Studio, vous pouvez désormais charger vos échantillons. Pour charger les échantillons, cliquez sur « Acquisition de données» . Maintenant, sur la page Acquisition de données, entrez le nom de l'étiquette, sélectionnez le microphone comme capteur et entrez la longueur de l'échantillon. Cliquez sur « Démarrer l'échantillonnage» pour démarrer l'échantillonnage d'un échantillon de 40 secondes. Au lieu de vous forcer à tousser, vous pouvez utiliser des échantillons de toux en ligne de différentes longueurs. Enregistrez un total de 10 à 12 échantillons de toux de différentes longueurs.
Après avoir téléchargé les échantillons de toux, définissez maintenant l'étiquette sur «bruit» et collectez 10 à 12 autres échantillons de bruit.
Ces exemples sont destinés à la formation du module, dans les étapes suivantes, nous collecterons les données de test. Les données de test doivent représenter au moins 30% des données d'entraînement, alors collectez les 3 échantillons de «bruit» et 4 à 5 échantillons de «toux».
Au lieu de collecter vos données, vous pouvez importer notre ensemble de données dans votre compte Edge Impulse à l'aide du logiciel de téléchargement Edge Impulse CLI.
Pour installer CLI Uploader, commencez par télécharger et installer Node.js sur votre ordinateur portable. Après cela, ouvrez l'invite de commande et entrez la commande ci-dessous:
npm install -g edge-impulse-cli
Téléchargez maintenant le jeu de données (Dataset Link) et extrayez le fichier dans le dossier de votre projet. Ouvrez l'invite de commande et accédez à l'emplacement de l'ensemble de données et exécutez les commandes ci-dessous:
edge-impulse-uploader --clean edge-impulse-uploader --category training training / *. json edge-impulse-uploader --category training training / *. cbor edge-impulse-uploader --category testing testing / *. json edge-impulse-uploader - test de test de catégorie / *. cbor
Entraîner le modèle et peaufiner le code
Comme l'ensemble de données est prêt, nous allons maintenant créer une impulsion pour les données. Pour cela, rendez-vous sur la page « Créer une impulsion ».
Maintenant sur la page « Créer une impulsion» , cliquez sur « Ajouter un bloc de traitement» . Dans la fenêtre suivante, sélectionnez le bloc Audio (MFCC). Après cela, cliquez sur « Ajouter un bloc d'apprentissage» et sélectionnez le bloc Réseau neuronal (Keras). Cliquez ensuite sur « Save Impulse» .
À l'étape suivante, allez sur la page MFCC puis cliquez sur « Générer des fonctionnalités» . Il générera des blocs MFCC pour toutes nos fenêtres audio.
Ensuite, allez à la page « NN Classifier» et cliquez sur les trois points dans le coin supérieur droit des « Paramètres du réseau neuronal» et sélectionnez « Passer en mode Keras (expert)» .
Remplacez l'original par le code suivant et remplacez la « cote de confiance minimale» par «0,70». Cliquez ensuite sur le bouton « Démarrer la formation» . Il commencera à entraîner votre modèle.
import tensorflow as tf depuis tensorflow.keras.models import Sequential depuis tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D depuis tensorflow.keras.optimizers Adam de tensorflow.keras.constraints import import MaxNorm # model architecture model = Sequential () model.add (InputLayer (input_shape = (X_train.shape,), name = 'x_input')) model.add (Reshape ((int (X_train.shape / 13), 13, 1), input_shape = (X_train.shape,))) 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))) # ceci contrôle le taux d'apprentissage opt = Adam (lr = 0,005, beta_1 = 0,9, beta_2 = 0,999) # former le réseau neuronal model.compile (loss = 'categorical_crossentropy', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, epochs = 9, validation_data = (X_test, Y_test), verbeux = 2)verbeux = 2)verbeux = 2)
Après l'entraînement du modèle, il montrera les performances d'entraînement. Pour moi, la précision était de 96,5% et la perte de 0,10, c'est bien de procéder.
Maintenant que notre modèle de détection de la toux est prêt, nous allons déployer ce modèle en tant que bibliothèque Arduino. Avant de télécharger le modèle en tant que bibliothèque, vous pouvez tester les performances en accédant à la page « Classification en direct ».
Accédez à la page « Déploiement » et sélectionnez « Bibliothèque Arduino» . Faites maintenant défiler vers le bas et cliquez sur «Construire» pour démarrer le processus. Cela créera une bibliothèque Arduino pour votre projet.
Ajoutez maintenant la bibliothèque dans votre IDE Arduino. Pour cela, ouvrez l'IDE Arduino, puis cliquez sur Sketch> Inclure la bibliothèque> Add.ZIP library.
Ensuite, chargez un exemple en allant dans Fichier> Exemples> Nom de votre projet - Edge Impulse> nano_ble33_sense_microphone.
Nous apporterons quelques modifications au code afin de pouvoir émettre un son d'alerte lorsque l'Arduino détecte une toux. Pour cela, un buzzer est interfacé avec Arduino et chaque fois qu'il détecte une toux, la LED clignote trois fois.
Les modifications sont effectuées dans les fonctions void loop () où il imprime les valeurs de bruit et de toux. Dans le code d'origine, il imprime les étiquettes et leurs valeurs ensemble.
for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Nous allons enregistrer les valeurs de bruit et de toux dans différentes variables et comparer les valeurs de bruit. Si la valeur du bruit passe en dessous de 0,50, cela signifie que la valeur de la toux est supérieure à 0,50 et que le son sera émis. Remplacez le code original for loop () par ceci:
for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); float Data = result.classification.value; if (Données <0,50) {Serial.print ("Toux détectée"); alarme(); }}
Après avoir effectué les modifications, téléchargez le code dans votre Arduino. Ouvrez le moniteur série à 115200 bauds.
Voici donc comment une machine de détection de la toux peut être construite, ce n'est pas une méthode très efficace pour trouver un suspect COVID19, mais cela peut bien fonctionner dans certaines zones surpeuplées.
Une vidéo de travail complète avec bibliothèque et code est donnée ci-dessous: