- Erforderliche Komponenten
- Schaltplan
- Erstellen des Datensatzes für die Hustenerkennungsmaschine
- Modell trainieren und Code optimieren
COVID19 ist wirklich eine historische Pandemie, die die ganze Welt sehr stark betrifft, und die Menschen bauen viele neue Geräte, um damit zu kämpfen. Wir haben auch eine automatische Desinfektionsmaschine und eine Wärmepistole für die berührungslose Temperaturabschirmung gebaut. Heute werden wir ein weiteres Gerät bauen, um den Kampf gegen Coronavirus zu unterstützen. Es handelt sich um ein Hustenerkennungssystem, das zwischen Geräuschen und Hustengeräuschen unterscheiden und dabei helfen kann, Corona-Verdächtige zu finden. Dafür werden maschinelle Lerntechniken verwendet.
In diesem Tutorial erstellen wir ein Hustenerkennungssystem mit Arduino 33 BLE Sense und Edge Impulse Studio. Es kann zwischen normalem Hintergrundgeräusch und Husten in Echtzeit-Audio unterscheiden. Wir haben Edge Impulse Studio verwendet, um einen Datensatz mit Husten- und Hintergrundgeräuschproben zu trainieren und ein hochoptimiertes TInyML-Modell zu erstellen, das Hustengeräusche in Echtzeit erkennen kann.
Erforderliche Komponenten
Hardware
- Arduino 33 BLE Sense
- LED
- Überbrückungsdrähte
Software
- Edge Impulse Studio
- Arduino IDE
Wir haben ein detailliertes Tutorial zu Arduino 33 BLE Sense behandelt.
Schaltplan
Das Schaltbild für die Hustenerkennung mit Arduino 33 BLE Sense ist unten angegeben. Das Fritzing-Teil für Arduino 33 BLE war nicht verfügbar, daher habe ich Arduino Nano verwendet, da beide die gleiche Pinbelegung haben.
Die positive Leitung der LED ist mit dem digitalen Pin 4 von Arduino 33 BLE sense verbunden, und die negative Leitung ist mit dem GND-Pin von Arduino verbunden.
Erstellen des Datensatzes für die Hustenerkennungsmaschine
Wie bereits erwähnt, verwenden wir Edge Impulse Studio, um unser Hustenerkennungsmodell zu trainieren. Dazu müssen wir einen Datensatz sammeln, der die Datenproben enthält, die wir auf unserem Arduino erkennen möchten. Da das Ziel darin besteht, den Husten zu erkennen, müssen Sie einige Proben davon und einige andere Proben für Lärm sammeln, damit zwischen Husten und anderen Geräuschen unterschieden werden kann.
Wir werden einen Datensatz mit zwei Klassen "Husten" und "Lärm" erstellen. Um ein Dataset zu erstellen, erstellen Sie ein Edge Impulse-Konto, überprüfen Sie Ihr Konto und starten Sie ein neues Projekt. Sie können die Samples mit Ihrem Handy oder Ihrem Arduino-Board laden oder einen Datensatz in Ihr Edge-Impulse-Konto importieren. Der einfachste Weg, die Proben in Ihr Konto zu laden, ist die Verwendung Ihres Mobiltelefons. Dazu müssen Sie Ihr Handy mit Edge Impulse verbinden.
Um Ihr Mobiltelefon zu verbinden, klicken Sie auf " Geräte " und dann auf " Neues Gerät verbinden" .
Klicken Sie nun im nächsten Fenster auf " Verwenden Sie Ihr Mobiltelefon" und ein QR-Code wird angezeigt. Scannen Sie den QR-Code mit Ihrem Mobiltelefon mit Google Lens oder einer anderen QR-Code-Scanner-App.
Dadurch wird Ihr Telefon mit Edge Impulse Studio verbunden.
Wenn Ihr Telefon mit Edge Impulse Studio verbunden ist, können Sie jetzt Ihre Samples laden. Klicken Sie zum Laden der Proben auf ' Datenerfassung' . Geben Sie nun auf der Seite Datenerfassung den Etikettennamen ein, wählen Sie das Mikrofon als Sensor aus und geben Sie die Probenlänge ein. Klicken Sie auf " Probenahme starten" , um die Probenahme für eine 40-Sekunden-Probe zu starten. Anstatt sich zum Husten zu zwingen, können Sie Online-Hustenproben unterschiedlicher Länge verwenden. Nehmen Sie insgesamt 10 bis 12 unterschiedlich lange Hustenproben auf.
Setzen Sie nach dem Hochladen der Hustenproben das Etikett auf "Rauschen" und sammeln Sie weitere 10 bis 12 Rauschproben.
Diese Beispiele dienen zur Schulung des Moduls. In den nächsten Schritten werden die Testdaten gesammelt. Die Testdaten sollten mindestens 30% der Trainingsdaten betragen. Sammeln Sie daher die 3 Proben „Lärm“ und 4 bis 5 Proben „Husten“.
Anstatt Ihre Daten zu sammeln, können Sie unseren Datensatz mit dem Edge Impulse CLI Uploader in Ihr Edge Impulse-Konto importieren.
Um den CLI-Uploader zu installieren, laden Sie zunächst Node.js herunter und installieren Sie es auf Ihrem Laptop. Öffnen Sie danach die Eingabeaufforderung und geben Sie den folgenden Befehl ein:
npm install -g edge-impulse-cli
Laden Sie nun den Datensatz (Dataset Link) herunter und extrahieren Sie die Datei in Ihren Projektordner. Öffnen Sie die Eingabeaufforderung, navigieren Sie zum Speicherort des Datensatzes und führen Sie die folgenden Befehle aus:
Kantenimpuls -Uploader - sauberer Kantenimpuls -Uploader - Kategorietraining / *. json Kantenimpuls-Uploader - Kategorietraining / *. cbor Kantenimpuls -Uploader - Kategorietestprüfung / *. json Kantenimpuls-Uploader - Kategorie Testprüfung / *. cbor
Modell trainieren und Code optimieren
Sobald der Datensatz fertig ist, werden wir jetzt einen Impuls für Daten erzeugen. Gehen Sie dazu auf die Seite ' Impuls erstellen '.
Klicken Sie nun auf der Seite " Impuls erstellen" auf " Verarbeitungsblock hinzufügen" . Wählen Sie im nächsten Fenster den Audio-Block (MFCC) aus. Klicken Sie anschließend auf " Lernblock hinzufügen" und wählen Sie den Keras-Block (Neural Network) aus. Klicken Sie dann auf " Impuls speichern" .
Gehen Sie im nächsten Schritt zur MFCC-Seite und klicken Sie auf " Features generieren" . Es werden MFCC-Blöcke für alle unsere Audiofenster generiert.
Gehen Sie danach zur Seite ' NN Classifier' und klicken Sie auf die drei Punkte in der oberen rechten Ecke der ' Neural Network Settings' und wählen Sie ' Switch to Keras (Expert) Mode' .
Ersetzen Sie das Original durch den folgenden Code und ändern Sie die ' Mindestvertrauensbewertung' in '0,70'. Klicken Sie dann auf die Schaltfläche " Training starten" . Es beginnt mit dem Training Ihres Modells.
Tensorflow als tf aus tensorflow.keras.models importieren Sequentiell aus tensorflow.keras.layers importieren Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D aus tensorflow.keras.optimizers Adam aus tensorflow.keras.conin importieren import MaxNorm # Modellarchitektur 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, Aktivierung = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, padding = 'same')) model.add (Conv2D (5, kernel_size = 5, Aktivierung = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D () pool_size = 2,padding = 'same')) model.add (Flatten ()) model.add (Dense (Klassen, Aktivierung = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3)) # steuert die Lernrate opt = Adam (lr = 0,005, beta_1 = 0,9, beta_2 = 0,999) # trainiere das neuronale Netzwerkmodell = 9, Validierungsdaten = (X_test, Y_test), ausführlich = 2)ausführlich = 2)ausführlich = 2)
Nach dem Training des Modells wird die Trainingsleistung angezeigt. Für mich betrug die Genauigkeit 96,5% und der Verlust 0,10, was gut ist, um fortzufahren.
Sobald unser Hustenerkennungsmodell fertig ist, werden wir dieses Modell als Arduino-Bibliothek bereitstellen. Bevor Sie das Modell als Bibliothek herunterladen, können Sie die Leistung auf der Seite " Live-Klassifizierung " testen.
Gehen Sie zur Seite ' Bereitstellung ' und wählen Sie ' Arduino Library' . Scrollen Sie nun nach unten und klicken Sie auf "Erstellen" , um den Vorgang zu starten. Dadurch wird eine Arduino-Bibliothek für Ihr Projekt erstellt.
Fügen Sie nun die Bibliothek in Ihre Arduino IDE ein. Öffnen Sie dazu die Arduino IDE und klicken Sie auf Sketch> Include Library> Add.ZIP library.
Laden Sie dann ein Beispiel, indem Sie zu Datei> Beispiele> Ihr Projektname - Edge Impulse> nano_ble33_sense_microphone gehen.
Wir werden einige Änderungen am Code vornehmen, damit wir einen Alarmton auslösen können, wenn der Arduino Husten erkennt. Zu diesem Zweck ist ein Summer mit Arduino verbunden, und wenn Husten erkannt wird, blinkt die LED dreimal.
Die Änderungen werden in void loop () -Funktionen vorgenommen, in denen die Rausch- und Hustenwerte gedruckt werden. Im Originalcode werden sowohl die Etiketten als auch ihre Werte zusammen gedruckt.
für (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }}
Wir werden sowohl die Geräusch- als auch die Hustenwerte in verschiedenen Variablen speichern und die Geräuschwerte vergleichen. Wenn der Geräuschwert unter 0,50 fällt, bedeutet dies, dass der Hustenwert mehr als 0,50 beträgt und das Geräusch erzeugt wird. Ersetzen Sie das Original für loop () Code durch:
für (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); float Data = result.classification.value; if (Daten <0,50) {Serial.print ("Husten erkannt"); Alarm(); }}
Laden Sie nach den Änderungen den Code in Ihr Arduino hoch. Öffnen Sie den seriellen Monitor bei 115200 Baud.
Auf diese Weise kann ein Hustenerkennungsgerät gebaut werden. Es ist keine sehr effektive Methode, um einen COVID19-Verdächtigen zu finden, aber es kann in einem überfüllten Bereich gut funktionieren.
Ein vollständiges Arbeitsvideo mit Bibliothek und Code finden Sie unten: