Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Kretsdiagram
- Trinn 2: Opprette datasettet for hostedeteksjonsmaskin
- Trinn 3: Koble til mobiltelefon
- Trinn 4:
- Trinn 5: Trening av modellen og justering av koden
- Trinn 6:
- Trinn 7: Kode
Video: Pocket Sized Host Detector: 7 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:20
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 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
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
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:
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:
Pocket Sized Robot Arm MeArm V0.4: 20 trinn (med bilder)
Pocket Sized Robot Arm MeArm V0.4: MeArm er en Pocket Sized Robot Arm. Det er et prosjekt som startet i februar 2014, som har hatt en fantastisk rask reise til sin nåværende tilstand takket være det Open Development som et Open Hardware -prosjekt. Versjon 0.3 ble omtalt på Instructables tilbake
Pocket Sized Hydrogen/Oxygen Generator: 5 trinn
Pocket Sized Hydrogen/Oxygen Generator: Hydrogen er mye moro å leke med, men de fleste effektive generatorene er store. Jeg ønsket å lage noe som var lite og kunne produsere hydrogen. Denne opplæringen vil vise deg hvordan du lager en hydrogen/oksygengenerator i lommeformat. Dessverre er det ikke det
Pocket Sized Pottery Wheel: 11 trinn (med bilder)
Pocket Sized Pottery Wheel: Å lage keramikk er en veldig morsom og givende form for underholdning. Det eneste problemet med keramikk er at det krevde mye utstyr og et stort studio, så du kan ikke gjøre det hvor som helst, før nå! I denne opplæringen skal jeg vise deg hvordan du lager en
Pocket Sized Music Player: 7 trinn
Pocket Sized Music Player: Hei, jeg er Cameron, dette er min sjette instruerbare! I denne viser jeg deg hvordan du lager en DIY musikkspiller, jeg håper du liker det
Den kuleste USB L.E.D. Pocket-sized Light (Pocket-sized Entry): 6 trinn
Den kuleste USB L.E.D. Pocket-sized Light (Pocket-Sized Entry): I denne instruksen vil jeg vise deg hvordan du lager en USB-drevet L.E.D. lys som kan foldes bort i størrelsen på en X-it Mints-tinn, og lett kan passe i lommen. Hvis du liker det, husk å + + det og stem på meg i konkurransen! Materialene og