Inhaltsverzeichnis:
- Lieferungen
- Schritt 1: Schaltplan
- Schritt 2: Erstellen des Datensatzes für das Hustenerkennungsgerät
- Schritt 3: Mit Mobiltelefon verbinden
- Schritt 4:
- Schritt 5: Trainieren des Modells und Optimieren des Codes
- Schritt 6:
- Schritt 7: Code
Video: Hustendetektor im Taschenformat - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:15
COVID19 ist wirklich eine historische Pandemie, die die ganze Welt sehr stark betrifft, und die Menschen bauen viele neue Geräte, um dagegen anzukämpfen. Wir haben auch eine automatische Desinfektionsmaschine und eine Thermopistole für die berührungslose Temperaturprüfung gebaut. Heute werden wir ein weiteres Gerät bauen, um im Kampf gegen das Coronavirus zu helfen. Es handelt sich um ein Hustenerkennungssystem, das zwischen Geräuschen und Hustengeräuschen unterscheiden kann und helfen kann, Corona-Verdächtige zu finden. Dafür werden Techniken des maschinellen Lernens eingesetzt.
In diesem Tutorial bauen wir ein Hustenerkennungssystem mit Arduino 33 BLE Sense und Edge Impulse Studio. Es kann in Echtzeit-Audio zwischen normalen Hintergrundgeräuschen und Husten unterscheiden. Wir haben Edge Impulse Studio verwendet, um einen Datensatz mit Husten- und Hintergrundgeräusch-Samples zu trainieren und ein hochoptimiertes TInyML-Modell zu erstellen, das ein Hustengeräusch in Echtzeit erkennen kann.
Lieferungen
Hardware
- Arduino 33 BLE Sense
- LEDJumper
- Drähte
Software
- Edge Impulse Studio
- Arduino-IDE
Schritt 1: Schaltplan
Schaltplan zur Hustenerkennung mit Arduino 33 BLE Sense ist oben angegeben. 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.
Schritt 2: Erstellen des Datensatzes für das Hustenerkennungsgerät
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 Geräusche sammeln, damit es zwischen Husten und anderen Geräuschen unterscheiden kann. Wir erstellen einen Datensatz mit zwei Klassen „Husten“und „Lärm“. Um einen Datensatz zu erstellen, erstellen Sie ein Edge Impulse-Konto, verifizieren Sie Ihr Konto und starten Sie dann ein neues Projekt. Sie können die Samples mit Ihrem Handy, Ihrem Arduino-Board laden oder einen Datensatz in Ihr Edge-Impuls-Konto importieren. Am einfachsten laden Sie die Samples mit Ihrem Mobiltelefon in Ihr Konto. 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“.
Schritt 3: Mit Mobiltelefon verbinden
Klicken Sie nun im nächsten Fenster auf „Use your Mobile Phone“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. Um die Proben zu laden, klicken Sie auf „Datenerfassung“. Geben Sie nun auf der Seite Datenerfassung den Labelnamen ein, wählen Sie das Mikrofon als Sensor aus und geben Sie die Probenlänge ein. Klicken Sie auf „Sampling starten“, um mit dem Sampling einer 40-Sek.-Probe zu beginnen. Anstatt sich zum Husten zu zwingen, können Sie Online-Hustenproben unterschiedlicher Länge verwenden. Nehmen Sie insgesamt 10 bis 12 Hustenproben unterschiedlicher Länge auf.
Schritt 4:
Nachdem Sie die Hustenproben hochgeladen haben, setzen Sie nun das Label auf „Lärm“und sammeln weitere 10 bis 12 Geräuschproben.
Diese Beispiele sind für das Training des Moduls, in den nächsten Schritten werden wir die Testdaten sammeln. Die Testdaten sollten mindestens 30 % der Trainingsdaten ausmachen. Sammeln Sie also die 3 Stichproben "Lärm" und 4 bis 5 Stichproben "Husten". Anstatt Ihre Daten zu sammeln, können Sie unseren Datensatz mit dem Edge in Ihr Edge Impulse-Konto importieren Impulse CLI-Uploader. 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 herunter (Dataset Link) und entpacken Sie die Datei in Ihren Projektordner. Öffnen Sie die Eingabeaufforderung, navigieren Sie zum Speicherort des Datasets und führen Sie die folgenden Befehle aus:
edge-impulse-uploader --cleanedge-impulse-uploader --kategorie training training/*.json
edge-impulse-uploader --kategorie training training/*.cbor
edge-impulse-uploader --category testing testing/*.json edge-impulse-uploader --category testing testing/*.cbor
Schritt 5: Trainieren des Modells und Optimieren des Codes
Da der Datensatz fertig ist, werden wir jetzt einen Impuls für Daten setzen. 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 Block Audio (MFCC). Klicken Sie anschließend auf „Lernblock hinzufügen“und wählen Sie den Block Neural Network (Keras) aus. Klicken Sie anschließend auf „Impuls speichern“.
Gehen Sie im nächsten Schritt auf die MFCC-Seite und klicken Sie dann auf „Funktionen generieren“. Es generiert MFCC-Blöcke für alle unsere Audiofenster.
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 „Mindestkonfidenzbewertung“in „0,70“. Klicken Sie anschließend auf die Schaltfläche „Training starten“. Es beginnt mit dem Training Ihres Modells.
import tensorflow as tffrom tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D from tensorflow.keras.optimizers import Adams from import.constraintsker MaxNorm # model architecture 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))) # dies steuert die Lernrate opt = Adam(lr=0,005, beta_ 1=0.9, beta_2=0.999) # trainiere das neuronale Netzwerk model.compile(loss='categorical_crossentropy', Optimizer=opt, metrics=['accuracy']) model.fit(X_train, Y_train, batch_size=32, epochs=9, validierungsdaten=(X_test, Y_test), ausführlich=2)
Schritt 6:
Nach dem Training des Modells zeigt es die Trainingsleistung an. Für mich war die Genauigkeit 96,5% und der Verlust 0,10, das ist gut, um fortzufahren.
Da unser Hustenerkennungsmodell nun 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-Bibliothek". Scrollen Sie nun nach unten und klicken Sie auf "Build", um den Vorgang zu starten. Dadurch wird eine Arduino-Bibliothek für Ihr Projekt erstellt.
Fügen Sie nun die Bibliothek in Ihrer Arduino IDE hinzu. Öffnen Sie dazu die Arduino IDE und klicken Sie dann auf Sketch > Include Library > Add. ZIP library. Laden Sie dann ein Beispiel, indem Sie auf Datei > Beispiele > Ihr Projektname - Edge Impulse > nano_ble33_sense_microphone gehen. Wir werden einige Änderungen am Code vornehmen, damit wir einen Warnton erzeugen können, wenn der Arduino Husten erkennt. Dafür ist ein Summer mit Arduino verbunden und jedes Mal, wenn Husten erkannt wird, blinkt die LED dreimal. Die Änderungen werden in den Funktionen void loop() vorgenommen, in denen die Geräusch- und Hustenwerte ausgegeben werden. Im Originalcode werden sowohl die Etiketten als auch ihre Werte zusammen gedruckt. for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) { ei_printf(" %s: %.5f\n", result.classification[ix].label, result.classification[ix].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 sinkt, bedeutet dies, dass der Hustenwert über 0,50 liegt und das Geräusch erzeugt wird. Ersetzen Sie den ursprünglichen for loop()-Code durch diesen: for (size_t ix = 1; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) { Serial.print(result.classification[ix].value); float Daten = result.classification[ix].value; Wenn (Daten < 0,50) {Serial.print ("Husten erkannt"); Alarm(); } } Nachdem Sie die Änderungen vorgenommen haben, laden Sie den Code in Ihr Arduino hoch. Öffnen Sie den seriellen Monitor mit 115200 Baud.
So kann also 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.
Schritt 7: Code
Bitte finden Sie die angehängte Datei, Und wenn es dir gefallen hat, vergiss nicht, mich unten im Wettbewerb zu bewerten.
Empfohlen:
Einen Bristlebot im Taschenformat herstellen – wikiHow
Wie man einen Bristlebot im Taschenformat herstellt: In diesem Instructable zeige ich, wie ich meine Version eines Borstlebots mache. Es ist klein, einfach zu machen und verwendet sehr wenig Materialien. Vorteile: -Sehr wenig Materialien -einfach zu machen -Spaß beim Spielen Nachteile: -Neigt sich im Kreis zu drehen -Sie müssen die