Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Kredsløbsdiagram
- Trin 2: Oprettelse af datasættet til hostedetektionsmaskine
- Trin 3: Opret forbindelse til mobiltelefon
- Trin 4:
- Trin 5: Træning af modellen og justering af koden
- Trin 6:
- Trin 7: Kode
Video: Pocket Sized Host Detector: 7 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:25
COVID19 er virkelig en historisk pandemi, der påvirker hele verden meget dårligt, og folk bygger mange nye enheder til at kæmpe med det. Vi har også bygget en automatisk saneringsmaskine og termisk pistol til kontaktløs temperaturskærmning. I dag bygger vi endnu en enhed til at hjælpe med at bekæmpe Coronavirus. Det er et hostedetektionssystem, som kan skelne mellem støj og hostelyd og kan hjælpe med at finde Corona mistænkt. Det vil bruge maskinlæringsteknikker til det.
I denne vejledning skal vi bygge et hostedetektionssystem ved hjælp af Arduino 33 BLE Sense og Edge Impulse Studio. Det kan skelne mellem normal baggrundsstøj og hoste i lyd i realtid. Vi brugte Edge Impulse Studio til at træne et datasæt af hoste- og baggrundsstøjprøver og bygge en stærkt optimeret TInyML-model, der kan registrere en hostelyd i realtid.
Forbrugsvarer
Hardware
- Arduino 33 BLE Sense
- LED -jumper
- Ledninger
Software
- Edge Impulse Studio
- Arduino IDE
Trin 1: Kredsløbsdiagram
Kredsløbsdiagram til hostedetektion ved hjælp af Arduino 33 BLE Sense er angivet ovenfor. Fritzing-del til Arduino 33 BLE var ikke tilgængelig, så jeg brugte Arduino Nano, da begge har den samme pin-out.
Den positive ledning af LED er forbundet til digital pin 4 i Arduino 33 BLE sense, og negativ ledning er forbundet til GND -pin på Arduino.
Trin 2: Oprettelse af datasættet til hostedetektionsmaskine
Som tidligere nævnt bruger vi Edge Impulse Studio til at træne vores hostedetekteringsmodel. Til det skal vi indsamle et datasæt, der har prøver af data, som vi gerne vil kunne genkende på vores Arduino. Da målet er at opdage hosten, skal du indsamle nogle prøver af det og nogle andre prøver for støj, så det kan skelne mellem hoste og andre lyde. Vi opretter et datasæt med to klasser "hoste" og "støj". For at oprette et datasæt skal du oprette en Edge Impulse -konto, bekræfte din konto og derefter starte et nyt projekt. Du kan indlæse prøverne ved hjælp af din mobil, dit Arduino -kort, eller du kan importere et datasæt til din edge impulskonto. Den nemmeste måde at indlæse prøverne på din konto er ved at bruge din mobiltelefon. Til det skal du forbinde din mobil med Edge Impulse. For at forbinde din mobiltelefon skal du klikke på 'Enheder' og derefter klikke på 'Tilslut en ny enhed'.
Trin 3: Opret forbindelse til mobiltelefon
Nu i det næste vindue skal du klikke på 'Brug din mobiltelefon', og en QR -kode vises. Scan QR -koden med din mobiltelefon ved hjælp af Google Lens eller en anden QR -kodescanner -app.
Dette forbinder din telefon med Edge Impulse studio.
Med din telefon forbundet med Edge Impulse Studio, kan du nu indlæse dine prøver. For at indlæse prøverne skal du klikke på 'Dataopsamling'. Nu på siden Dataopsamling skal du indtaste etiketnavnet, vælge mikrofonen som en sensor og indtaste prøvelængden. Klik på 'Start sampling' for at starte prøvetagning af en prøve på 40 sekunder. I stedet for at tvinge dig selv til at hoste, kan du bruge online hosteprøver af forskellige længder. Optag i alt 10 til 12 hosteprøver af forskellige længder.
Trin 4:
Efter upload af hosteprøverne skal du nu indstille etiketten til 'støj' og indsamle yderligere 10 til 12 støjprøver.
Disse prøver er til uddannelse af modulet, i de næste trin indsamler vi testdata. Testdata skal være mindst 30% af træningsdataene, så indsaml de 3 prøver af 'støj' og 4 til 5 prøver af 'hoste'. I stedet for at indsamle dine data kan du importere vores datasæt til din Edge Impulse -konto ved hjælp af Edge Impulse CLI Uploader. For at installere CLI Uploader skal du først downloade og installere Node.js på din bærbare computer. Derefter åbnes kommandoprompten og indtaster nedenstående kommando:
npm installer -g edge-impulse-cli
Download nu datasættet (Dataset Link) og udpak filen i din projektmappe. Åbn kommandoprompten, og naviger til datasættets placering, og kør nedenstående kommandoer:
edge-impulse-uploader --cleanedge-impulse-uploader-kategori træningstræning/*. json
edge-impulse-uploader --kategori træningstræning/*. cbor
edge-impulse-uploader-test af kategoritestning/*. json edge-impulse-uploader-test af kategori//. cbor
Trin 5: Træning af modellen og justering af koden
Da datasættet er klar, vil vi nu oprette en impuls til data. For at gå til siden 'Opret impuls'.
Nu på siden 'Opret impuls' skal du klikke på 'Tilføj en behandlingsblok'. I det næste vindue skal du vælge blokken Lyd (MFCC). Klik derefter på 'Tilføj en læringsblok', og vælg Neural Network (Keras) -blokken. Klik derefter på ‘Gem impuls’.
I det næste trin skal du gå til MFCC -siden og derefter klikke på 'Generer funktioner'. Det vil generere MFCC -blokke til alle vores vinduer med lyd.
Derefter skal du gå til siden 'NN Classifier' og klikke på de tre prikker i øverste højre hjørne af 'Neural Network -indstillinger' og vælge 'Skift til Keras (ekspert) -tilstand'.
Udskift originalen med følgende kode, og ændr 'Minimum konfidensvurdering' til '0,70'. Klik derefter på knappen 'Start træning'. Det vil begynde at træne din model.
import tensorflow som tfrom tensorflow.keras.models import Sequential fra tensorflow.keras.layers importerer Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D fra tensorflow.keras.optimizers importerer Adam fra tensorflow.keras.straas. MaxNorm # model arkitektur model = Sekventiel () model.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 (Tæt (klasser, aktivering = 'softmax', navn = 'y_pred', kernel_constraint = MaxNorm (3))) # dette styrer læringshastigheden opt = Adam (lr = 0,005, beta_ 1 = 0,9, beta_2 = 0,999) # træne det neurale netværks model.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)
Trin 6:
Efter træning af modellen viser den træningsydelsen. For mig var nøjagtigheden 96,5% og tabet var 0,10, det er godt at fortsætte.
Nu da vores hostedetekteringsmodel er klar, vil vi implementere denne model som Arduino -bibliotek. Inden du downloader modellen som et bibliotek, kan du teste ydelsen ved at gå til siden 'Live Classification'. Gå til siden 'Implementering', og vælg 'Arduino Library'. Rul nu ned og klik på 'Byg' for at starte processen. Dette vil bygge et Arduino -bibliotek til dit projekt.
Tilføj nu biblioteket i din Arduino IDE. For at åbne Arduino IDE, og klik derefter på Skitse> Inkluder bibliotek> Tilføj. ZIP -bibliotek. Indlæs derefter et eksempel ved at gå til Filer> Eksempler> Dit projektnavn - Edge Impulse> nano_ble33_sense_microphone. Vi foretager nogle ændringer i koden, så vi kan få en advarselslyd, når Arduino opdager hoste. Til det har en summer en forbindelse til Arduino, og når den registrerer hoste, blinker LED tre gange. Ændringerne foretages i void loop () -funktioner, hvor det udskriver støj- og hostværdierne. I den originale kode udskriver det både etiketterne og deres værdier 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 vil gemme både støj- og hosteværdierne i forskellige variabler og sammenligne støjværdierne. Hvis støjværdien går under 0,50, betyder det, at hosteværdien er mere end 0,50, og det vil lave lyden. Udskift originalen for loop () -kode med denne: for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification [ix].value); float Data = resultat.klassificering [ix].værdi; hvis (Data <0,50) {Serial.print ("Host fundet"); alarm (); }} Når du har foretaget ændringerne, skal du uploade koden til din Arduino. Åbn den serielle skærm på 115200 baud.
Så sådan kan en hostedetektionsmaskine bygges, det er ikke en særlig effektiv metode til at finde en mistanke om COVID19, men den kan fungere godt i et overfyldt område.
Trin 7: Kode
Find den vedhæftede fil, tak, Og hvis du kunne lide det, så glem ikke at stemme mig i konkurrencen herunder.
Anbefalede:
Pocket Sized Robot Arm MeArm V0.4: 20 trin (med billeder)
Pocket Sized Robot Arm MeArm V0.4: MeArm er en Pocket Sized Robot Arm. Det er et projekt startet i februar 2014, som har haft en fantastisk hurtig rejse til sin nuværende tilstand takket være det Open Development som et Open Hardware -projekt. Version 0.3 blev vist på Instructables tilbage
Pocket Sized Hydrogen/Oxygen Generator: 5 trin
Pocket Sized Hydrogen/Oxygen Generator: Hydrogen er meget sjovt at lege med, men de mest effektive generatorer er store. Jeg ville lave noget, der var lille og kunne producere brint. Denne vejledning viser dig, hvordan du laver en hydrogen/iltgenerator i lommeformat. Desværre er det ikke det
Pocket Sized Pottery Wheel: 11 trin (med billeder)
Pocket Sized Pottery Wheel: At lave keramik er en virkelig sjov og givende form for underholdning. Det eneste problem med keramik er, at det krævede mange forsyninger og et stort studie, så du kan ikke gøre det nogen steder, før nu! I denne vejledning vil jeg vise dig, hvordan du laver en
Pocket Sized Music Player: 7 trin
Pocket Sized Music Player: Hej jeg er Cameron, dette er min 6. instruerbare! I denne viser jeg dig, hvordan du laver en DIY musikafspiller, jeg håber du nyder det
Den sejeste USB L.E.D. Pocket-sized Light (Pocket-sized Entry): 6 trin
Den sejeste USB L.E.D. Pocket-Sized Light (Pocket-Sized Entry): I denne Instructable vil jeg vise dig, hvordan du laver en USB-drevet L.E.D. lys, der kan foldes væk i størrelsen på en X-it Mints-dåse og let kan passe i lommen. Hvis du kan lide det, skal du sørge for at + gøre det og stemme på mig i konkurrencen! Materialerne og