- Komponenter kreves
- Kretsdiagram
- Opprette datasett for hostedeteksjonsmaskin
- Trening av modellen og justering av koden
COVID19 er egentlig en historisk pandemi som påvirker hele verden veldig dårlig, og folk bygger mange nye enheter for å kjempe med den. Vi har også bygget en automatisk desinfiseringsmaskin og termisk pistol for kontaktløs temperaturscreening. I dag skal vi bygge en enhet til for å bekjempe med Coronavirus. Det er et hostedeteksjonssystem som kan skille mellom støy og hostelyd og kan hjelpe til med å finne Corona mistenkt. Det 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 hostelyd i sanntid.
Komponenter kreves
Maskinvare
- Arduino 33 BLE Sense
- LED
- Jumper Wires
Programvare
- Edge Impulse Studio
- Arduino IDE
Vi har dekket en detaljert opplæring om Arduino 33 BLE Sense.
Kretsdiagram
Kretsdiagram for hostedeteksjon ved bruk av Arduino 33 BLE Sense er gitt nedenfor. Fritzing-delen til Arduino 33 BLE var ikke tilgjengelig, så jeg brukte Arduino Nano da 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 i Arduino.
Opprette datasett for hostedeteksjonsmaskin
Som nevnt tidligere bruker vi Edge Impulse Studio til å trene vår hostedeteksjonsmodell. For det må vi samle et datasett som har eksempler på 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 et nytt prosjekt. Du kan laste inn prøvene ved å bruke mobilen din, Arduino-kortet ditt, eller du kan importere et datasett til din kantimpulskonto. Den enkleste måten å laste prøvene inn på kontoen din er å bruke mobiltelefonen. For det må du koble mobilen din med Edge Impulse.
For å koble til mobiltelefonen din, klikk på ' Enheter ' og deretter på ' Koble til en ny enhet' .
Nå, i neste vindu, klikker du på ' Bruk mobiltelefonen din' , så vises en QR-kode. Skann QR-koden med mobiltelefonen din ved hjelp av Google Lens eller annen QR-kode skanner-app.
Dette vil koble telefonen din til Edge Impulse studio.
Med telefonen din koblet til Edge Impulse Studio, kan du nå laste inn prøvene dine. For å laste prøvene, klikk på ' Datainnsamling' . Nå, på datainnsamlingssiden, skriver du inn etikettnavnet, velger mikrofonen som en sensor og angir prøvelengden. Klikk på ' Start prøvetaking' for å starte prøvetaking av en 40 sek prøve. I stedet for å tvinge deg til å hoste, kan du bruke hosteprøver av forskjellige lengder på nettet. Registrer totalt 10 til 12 hosteprøver av forskjellige lengder.
Etter å ha lastet opp hosteprøvene, sett nå etiketten til "støy" og samle ytterligere 10 til 12 støyprøver.
Disse prøvene er for opplæring av modulen. I de neste trinnene samler vi testdataene. Testdataene bør være minst 30% av treningsdataene, så samle de tre prøvene av "støy" og 4 til 5 prøver av "hoste".
I stedet for å samle inn dataene dine, kan du importere datasettet vårt til Edge Impulse-kontoen din ved hjelp av Edge Impulse CLI Uploader.
For å installere CLI Uploader, må du først laste ned og installere Node.js på den bærbare datamaskinen. Deretter åpner du ledeteksten og skriver inn kommandoen nedenfor:
npm installer -g kant-impuls-cli
Last ned datasettet (datasettlink) og trekk ut filen i prosjektmappen. Åpne ledeteksten og naviger til datasettplasseringen og kjør kommandoene nedenfor:
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 --category testing testing / *. cbor
Trening av modellen og justering av koden
Når datasettet er klart, vil vi nå lage en impuls for data. Gå til siden " Opprett impuls " for det.
Nå, på siden " Opprett impuls" , klikker du på " Legg til en behandlingsblokk" . I neste vindu 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 neste trinn, 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 ' NN Classifier' -siden og klikker på de tre punktene i øvre høyre hjørne av ' Neural Network settings' og velger ' Switch to Keras (expert) mode' .
Erstatt originalen med følgende kode og endre ' Minimums tillitsgrad' til '0,70'. Klikk deretter på ' Start trening' -knappen. Det vil begynne å trene modellen din.
importer tensorflow som tf fra tensorflow.keras.models importerer sekvensiell fra tensorflow.keras.layers importerer Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D fra tensorflow.keras.optimizers importerer Adam fra tensorflow.keras.conints. importer MaxNorm # modellarkitekturmodell = Sekvensiell () 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, aktivering = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, padding = 'same')) model.add (Conv2D (5, kernel_size = 5, aktivering = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (bassengstørrelse = 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 nettverksmodell. Kompilere (loss = 'categorical_crossentropy', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, epoker = 9, validering_data = (X_test, Y_test), detaljert = 2)utførlig = 2)utførlig = 2)
Etter å ha trent modellen, vil den vise treningsytelsen. For meg var nøyaktigheten 96,5% og tapet var 0,10 som 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 bibliotek, kan du teste ytelsen ved å gå til ' Live Classification ' -siden.
Gå til ' Deployment ' -siden og velg ' Arduino Library' . Bla nå ned og klikk på 'Bygg' for å starte prosessen. Dette vil bygge et Arduino-bibliotek for prosjektet ditt.
Legg nå til biblioteket i din Arduino IDE. For det åpner du Arduino IDE og klikker deretter på Sketch> Inkluder bibliotek> Add.ZIP-bibliotek.
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 varsellyd når Arduino oppdager hoste. For det er en summer grensesnitt med Arduino, og når den oppdager hoste, vil LED blinke tre ganger.
Endringene gjøres i void loop () -funksjoner der det skriver ut støy- og hosteverdiene. I den opprinnelige koden skriver den ut både etikettene og deres verdier sammen.
for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Vi skal lagre både støy- og hosteverdiene 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 gi lyden. Bytt ut originalen for loop () -koden med dette:
for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); float Data = result.classification.value; hvis (Data <0,50) {Serial.print ("Host detektert"); alarm(); }}
Etter at du har gjort endringene, laster du opp koden til Arduino. Åpne den serielle skjermen ved 115200 baud.
Så dette er hvordan en hoste inspeksjon maskinen kan bygges, er det ikke en veldig effektiv metode for å finne noen COVID19 mistenkte, men det kan fungere fint i noen fylt område.
En komplett arbeidsvideo med bibliotek og kode er gitt nedenfor: