Innholdsfortegnelse:

Pocket Sized Host Detector: 7 trinn
Pocket Sized Host Detector: 7 trinn

Video: Pocket Sized Host Detector: 7 trinn

Video: Pocket Sized Host Detector: 7 trinn
Video: Exploring Our New House at 3AM!!! Real Haunted House?!?! (Pool Ghost) 2024, November
Anonim
Lommestørr hoste detektor
Lommestørr hoste detektor

COVID19 er virkelig en historisk pandemi som påvirker hele verden veldig dårlig, og folk bygger mange nye enheter for å bekjempe den. Vi har også bygget en automatisk saneringsmaskin og termisk pistol for kontaktløs temperaturvisning. I dag skal vi bygge en enhet til for å bekjempe koronaviruset. Det er et hostedeteksjonssystem, som kan skille mellom støy og hostelyd og kan hjelpe til med å finne Corona -mistenkt. Den vil bruke maskinlæringsteknikker for det.

I denne opplæringen skal vi bygge et hostedeteksjonssystem ved hjelp av Arduino 33 BLE Sense og Edge Impulse Studio. Det kan skille mellom normal bakgrunnsstøy og hoste i sanntidslyd. Vi brukte Edge Impulse Studio til å trene et datasett med hoste- og bakgrunnsstøyprøver og bygge en svært optimalisert TInyML-modell, som kan oppdage en hostelyd i sanntid.

Rekvisita

Maskinvare

  • Arduino 33 BLE Sense
  • LED -jumper
  • Ledninger

Programvare

  • Edge Impulse Studio
  • Arduino IDE

Trinn 1: Kretsdiagram

Kretsdiagram
Kretsdiagram
Kretsdiagram
Kretsdiagram

Kretsdiagram for hostedeteksjon ved bruk av Arduino 33 BLE Sense er gitt ovenfor. Fritzing del for Arduino 33 BLE var ikke tilgjengelig, så jeg brukte Arduino Nano ettersom begge har samme pin-out.

Den positive ledningen til LED er koblet til den digitale pinnen 4 i Arduino 33 BLE sense og den negative ledningen er koblet til GND -pinnen til Arduino.

Trinn 2: Opprette datasettet for hostedeteksjonsmaskin

Opprette datasettet for hostedeteksjonsmaskin
Opprette datasettet for hostedeteksjonsmaskin

Som nevnt tidligere bruker vi Edge Impulse Studio til å trene vår hostedeteksjonsmodell. For det må vi samle et datasett som har prøver av data som vi ønsker å kunne gjenkjenne på Arduino. Siden målet er å oppdage hosten, må du samle noen prøver av det og noen andre prøver for støy, slik at det kan skille mellom hoste og andre lyder. Vi vil lage et datasett med to klasser “hoste” og “støy”. For å opprette et datasett, opprett en Edge Impulse -konto, bekreft kontoen din og start deretter et nytt prosjekt. Du kan laste inn prøvene ved å bruke mobilen, Arduino -kortet, eller du kan importere et datasett til kantimpuls -kontoen din. Den enkleste måten å laste inn prøvene på kontoen din er ved å bruke mobiltelefonen. For det må du koble mobilen din med Edge Impulse. For å koble til mobiltelefonen din, klikk på 'Enheter' og klikk deretter på 'Koble til en ny enhet'.

Trinn 3: Koble til mobiltelefon

Koble til mobiltelefon
Koble til mobiltelefon

Klikk på "Bruk mobiltelefonen" i det neste vinduet, og en QR -kode vises. Skann QR -koden med mobiltelefonen din ved hjelp av Google Lens eller en annen QR -kodeskannerapp.

Dette vil koble telefonen din til Edge Impulse studio.

Når telefonen er koblet til Edge Impulse Studio, kan du nå laste inn prøvene dine. For å laste inn prøvene, klikk på "Datainnsamling". Skriv inn etikettnavnet på siden Datainnsamling, velg mikrofonen som sensor, og skriv inn prøvelengden. Klikk på "Start prøvetaking" for å starte prøvetaking av en prøve på 40 sekunder. I stedet for å tvinge deg til å hoste, kan du bruke online hosteprøver av forskjellige lengder. Registrer totalt 10 til 12 hosteprøver av forskjellige lengder.

Trinn 4:

Bilde
Bilde
Bilde
Bilde

Etter å ha lastet opp hosteprøver, sett nå etiketten til "støy" og samle ytterligere 10 til 12 støyprøver.

Disse prøvene er for trening av modulen, i de neste trinnene vil vi samle inn testdata. Testdata bør være minst 30% av treningsdataene, så saml de 3 prøvene med 'støy' og 4 til 5 prøver av 'hoste'. I stedet for å samle dataene dine, kan du importere datasettet vårt til Edge Impulse -kontoen din ved å bruke Edge Last opp Impulse CLI. For å installere CLI -opplasteren må du først laste ned og installere Node.js på den bærbare datamaskinen. Etter det åpner du ledeteksten og skriver inn kommandoen nedenfor:

npm installere -g edge-impulse-cli

Last ned nå datasettet (Dataset Link) og trekk ut filen i prosjektmappen. Åpne ledeteksten og naviger til datasettstedet og kjør kommandoene nedenfor:

edge-impulse-uploader --cleanedge-impulse-uploader --kategori treningstrening/*. json

edge-impulse-uploader --kategori treningstrening/*. cbor

edge-impulse-uploader --category testing testing/*. json edge-impulse-uploader --category testing testing/*. cbor

Trinn 5: Trening av modellen og justering av koden

Etter hvert som datasettet er klart, vil vi nå lage en impuls for data. Gå til siden "Opprett impuls" for det.

Klikk på "Legg til en behandlingsblokk" på siden "Opprett impuls". I det neste vinduet velger du Audio (MFCC) -blokken. Etter det klikker du på "Legg til en læringsblokk" og velger Neural Network (Keras) -blokken. Klikk deretter på "Save Impulse".

I det neste trinnet, gå til MFCC -siden og klikk deretter på "Generer funksjoner". Det vil generere MFCC -blokker for alle lydvinduene våre.

Deretter går du til siden "NN Classifier" og klikker på de tre prikkene i øvre høyre hjørne av "Innstillinger for nevrale nettverk" og velger "Bytt til Keras (ekspert) -modus".

Erstatt originalen med følgende kode og endre "Minimum konfidensvurdering" til "0,70". Klikk deretter på "Start trening" -knappen. Det vil begynne å trene modellen din.

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 Adam from tensorflow.keras.straas. MaxNorm # modellarkitektur modell = Sekvensiell () modell.add (InputLayer (input_shape = (X_train.shape [1],), navn = 'x_input')) model.add (Omform ((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 (Tett (klasser, aktivering = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # dette styrer læringshastigheten opt = Adam (lr = 0.005, beta_ 1 = 0,9, beta_2 = 0,999) # trene nevrale nettverk modell.compile (loss = 'categorical_crossentropy', optimizer = opt, metrics = ['precision']) model.fit (X_train, Y_train, batch_size = 32, epochs = 9, validation_data = (X_test, Y_test), verbose = 2)

Trinn 6:

Etter opplæring av modellen vil den vise treningsytelsen. For meg var nøyaktigheten 96,5% og tapet var 0,10, det er bra å fortsette.

Nå som vår hostedeteksjonsmodell er klar, vil vi distribuere denne modellen som Arduino -bibliotek. Før du laster ned modellen som et bibliotek, kan du teste ytelsen ved å gå til siden "Live Classification". Gå til "Distribusjon" -siden og velg "Arduino Library". Rull nå ned og klikk på 'Bygg' for å starte prosessen. Dette vil bygge et Arduino -bibliotek for prosjektet ditt.

Legg nå til biblioteket i Arduino IDE. For det åpner du Arduino IDE og klikker deretter på Sketch> Include Library> Add. ZIP library. Last deretter inn et eksempel ved å gå til Fil> Eksempler> Prosjektnavnet ditt - Edge Impulse> nano_ble33_sense_microphone. Vi vil gjøre noen endringer i koden slik at vi kan lage en varslingslyd når Arduino oppdager hoste. For det er en summer tilkoblet Arduino, og når den oppdager hoste, vil LED blinke tre ganger. Endringene gjøres i void loop () -funksjoner der den skriver ut støy- og hosteverdiene. I den originale koden skriver den ut både etikettene og verdiene deres sammen. for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf (" %s: %.5f / n", result.classification [ix].label, result.classification [ix].value); } Vi skal lagre både støy- og hosteverdier i forskjellige variabler og sammenligne støyverdiene. Hvis støyverdien går under 0,50, betyr det at hosteverdien er mer enn 0,50, og det vil lage lyden. Erstatt originalen for loop () -koden med denne: for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification [ix].value); float Data = resultat.klassifisering [ix].verdi; if (Data <0,50) {Serial.print ("Hoste oppdaget"); alarm(); }} Etter at du har gjort endringene, laster du opp koden til Arduino. Åpne seriell skjerm på 115200 baud.

Så dette er hvordan en hostedeteksjonsmaskin kan bygges, det er ikke en veldig effektiv metode for å finne noen COVID19 -mistenkt, men det kan fungere fint i et overfylt område.

Trinn 7: Kode

Vennligst finn den vedlagte filen, Og hvis du likte det, ikke glem å stemme meg i konkurransen nedenfor.

Anbefalt: