Innehållsförteckning:
- Tillbehör
- Steg 1: Kretsdiagram
- Steg 2: Skapa datauppsättningen för hostdetekteringsmaskin
- Steg 3: Anslut till mobiltelefon
- Steg 4:
- Steg 5: Utbilda modellen och anpassa koden
- Steg 6:
- Steg 7: Kod
Video: Fickstorlek hostdetektor: 7 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:37
COVID19 är verkligen en historisk pandemi som påverkar hela världen väldigt illa och människor bygger många nya enheter för att bekämpa den. Vi har också byggt en automatisk saneringsmaskin och termisk pistol för kontaktlös temperaturskärmning. Idag kommer vi att bygga ytterligare en enhet för att bekämpa Coronavirus. Det är ett hostdetekteringssystem som kan skilja mellan buller och hostljud och kan hjälpa till att hitta Corona misstänkt. Det kommer att använda maskininlärningstekniker för det.
I denna handledning ska vi bygga ett hostdetekteringssystem med Arduino 33 BLE Sense och Edge Impulse Studio. Det kan skilja mellan normalt bakgrundsljud och hosta i realtidsljud. Vi använde Edge Impulse Studio för att träna en dataset med host- och bakgrundsljudprover och bygga en mycket optimerad TInyML-modell som kan upptäcka ett hostljud i realtid.
Tillbehör
Hårdvara
- Arduino 33 BLE Sense
- LED -bygel
- Trådar
programvara
- Edge Impulse Studio
- Arduino IDE
Steg 1: Kretsdiagram
Kretsdiagram för hostdetektering med Arduino 33 BLE Sense ges ovan. Fritzing-del för Arduino 33 BLE var inte tillgänglig, så jag använde Arduino Nano eftersom båda har samma pin-out.
Den positiva ledningen för LED är ansluten till den digitala stift 4 i Arduino 33 BLE sense och den negativa ledningen är ansluten till GND -stiftet på Arduino.
Steg 2: Skapa datauppsättningen för hostdetekteringsmaskin
Som tidigare nämnts använder vi Edge Impulse Studio för att träna vår hostdetekteringsmodell. För det måste vi samla in en datamängd som har prover av data som vi skulle vilja kunna känna igen på vår Arduino. Eftersom målet är att upptäcka hostan måste du samla några prover av det och några andra prover för buller, så att det kan skilja mellan hosta och andra ljud. Vi kommer att skapa en dataset med två klasser "hosta" och "buller". För att skapa en dataset, skapa ett Edge Impulse -konto, verifiera ditt konto och starta sedan ett nytt projekt. Du kan ladda proverna med din mobil, ditt Arduino -kort eller så kan du importera en datauppsättning till ditt edge -impulskonto. Det enklaste sättet att ladda proverna till ditt konto är med din mobiltelefon. För det måste du ansluta din mobil med Edge Impulse. För att ansluta din mobiltelefon, klicka på "Enheter" och klicka sedan på "Anslut en ny enhet".
Steg 3: Anslut till mobiltelefon
Klicka nu på "Använd din mobiltelefon" i nästa fönster så visas en QR -kod. Skanna QR -koden med din mobiltelefon med Google Lens eller en annan QR -kodskannerapp.
Detta kommer att ansluta din telefon med Edge Impulse studio.
Med din telefon ansluten till Edge Impulse Studio kan du nu ladda dina prover. Klicka på "Datainsamling" för att ladda proverna. Nu på datainsamlingssidan anger du etikettnamnet, väljer mikrofonen som en sensor och anger provlängden. Klicka på "Starta provtagning" för att starta provtagning av ett prov på 40 sekunder. Istället för att tvinga dig själv att hosta kan du använda online -hostprov av olika längd. Registrera totalt 10 till 12 hostprover av olika längd.
Steg 4:
När du har laddat upp hostproverna ställer du nu in etiketten på "buller" och samlar ytterligare 10 till 12 brusprover.
Dessa prover är för utbildning av modulen, i nästa steg kommer vi att samla in testdata. Testdata bör vara minst 30% av utbildningsdata, så samla de 3 proverna av 'buller' och 4 till 5 prover av 'hosta'. Istället för att samla in dina data kan du importera vår dataset till ditt Edge Impulse -konto med Edge Impulse CLI Uploader. För att installera CLI Uploader, först, ladda ner och installera Node.js på din bärbara dator. Efter det öppnar du kommandotolken och anger kommandot nedan:
npm installera -g edge-impulse-cli
Ladda nu ner datasetet (Dataset Link) och extrahera filen i projektmappen. Öppna kommandotolken och navigera till platsen för dataset och kör kommandona nedan:
edge-impulse-uploader --cleanedge-impulse-uploader-kategoriträningsträning/*. json
edge-impulse-uploader --kategori utbildningsträning/*. cbor
edge-impulse-uploader --category testing testing/*. json edge-impulse-uploader --category testing testing/*. cbor
Steg 5: Utbilda modellen och anpassa koden
När datauppsättningen är klar kommer vi nu att skapa en impuls för data. För det går du till sidan "Skapa impuls".
Klicka nu på "Lägg till ett bearbetningsblock" på sidan "Skapa impuls". I nästa fönster väljer du ljud (MFCC) -blocket. Klicka sedan på "Lägg till ett inlärningsblock" och välj blocket Neural Network (Keras). Klicka sedan på "Spara impuls".
I nästa steg, gå till MFCC -sidan och klicka sedan på "Generera funktioner". Det kommer att generera MFCC -block för alla våra ljudfönster.
Gå sedan till sidan "NN Classifier" och klicka på de tre prickarna i det övre högra hörnet av "Neural Network Settings" och välj "Byt till Keras (expert) -läge".
Ersätt originalet med följande kod och ändra "Minsta konfidensvärde" till "0,70". Klicka sedan på knappen "Starta träning". Det kommer att börja träna din modell.
importera tensorflow som tfrom tensorflow.keras.modeller importera Sequential från tensorflow.keras.layers importera Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D från tensorflow.keras.optimizers importera Adam från tensorflow.keras.straas. MaxNorm # modellarkitektur modell = Sekventiell () modell.add (InputLayer (input_shape = (X_train.shape [1],), namn = '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))) # detta styr inlärningshastigheten opt = Adam (lr = 0,005, beta_ 1 = 0,9, beta_2 = 0,999) # träna det neurala nätverkets 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)
Steg 6:
Efter träning av modellen visar den träningsprestanda. För mig var noggrannheten 96,5% och förlusten var 0,10 vilket är bra att fortsätta.
Nu när vår hostdetekteringsmodell är klar kommer vi att distribuera den här modellen som Arduino -bibliotek. Innan du laddar ner modellen som ett bibliotek kan du testa prestandan genom att gå till sidan "Live Classification". Gå till sidan 'Distribution' och välj 'Arduino Library'. Bläddra nu ner och klicka på "Bygg" för att starta processen. Detta kommer att bygga ett Arduino -bibliotek för ditt projekt.
Lägg nu till biblioteket i din Arduino IDE. För det öppnar du Arduino IDE och klickar sedan på Sketch> Include Library> Add. ZIP library. Ladda sedan ett exempel genom att gå till Arkiv> Exempel> Ditt projektnamn - Edge Impulse> nano_ble33_sense_microphone. Vi kommer att göra några ändringar i koden så att vi kan göra ett varningsljud när Arduino upptäcker hosta. För det är en summer summerad med Arduino och när den upptäcker hosta blinkar lysdioden tre gånger. Ändringarna görs i void loop () -funktioner där den skriver ut brus- och hostvärdena. I den ursprungliga koden skriver det ut både etiketterna och deras värden tillsammans. för (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf (" %s: %.5f / n", result.classification [ix].label, result.classification [ix].value); } Vi ska spara både buller- och hostvärden i olika variabler och jämföra brusvärdena. Om brusvärdet går under 0,50 betyder det att hostvärdet är mer än 0,50 och det kommer att göra ljudet. Ersätt originalet för loop () -koden med detta: för (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification [ix].value); float Data = result.classification [ix].value; if (Data <0,50) {Serial.print ("Host upptäckt"); larm(); }} När du har gjort ändringarna laddar du upp koden till din Arduino. Öppna seriell bildskärm vid 115200 baud.
Så det är så här en hostdetektionsmaskin kan byggas, det är inte en särskilt effektiv metod för att hitta någon misstänkt COVID19 men den kan fungera bra i ett trångt område.
Steg 7: Kod
Vänligen hitta den bifogade filen, Och om du gillade det, glöm inte att rösta mig i tävlingen nedan.
Rekommenderad:
DIY fickstorlek likspänningsmätare: 5 steg
DIY Fickstorlek DC -spänningsmätare: I den här instruktören kommer jag att visa dig hur du gör DIY -fackstorleksmätare med piezo -summer för kretskontroll själv. Allt du behöver är grundläggande kunskaper inom elektronik och lite tid. Om du har några frågor eller problem kan du
Hur man gör fickstorlek IoT -väderstation: 7 steg (med bilder)
Hur man gör Pocket Sized IoT Weather Station: Hej läsare! I den här instruktören lär du dig hur du gör en liten väderkub med D1 mini (ESP8266) som är ansluten till ditt hem WiFi, så att du kan titta på dess utgång var som helst från jorden, naturligtvis så länge du har internetanslutning
Fickstorlek CO (kolmonoxid) Detektor: 5 steg
Fickstorlek CO (kolmonoxid) -detektor: Som namnet säger är detta en CO -detektor i fickformat som används för att detektera kolmonoxid i luften, vårt mål var att göra den här enheten bärbar och som passar i fickstorleken. problem med luftföroreningar på grund av industrialisering ev
Fickstorlek Linux-dator: Pi-Micro: 13 steg (med bilder)
Fickstor Linux-dator: Pi-Micro: Har du någonsin velat göra en dator som kan passa i din hand? En som var en fullfjädrad bärbar dator, men liten? Jag också, så jag byggde den här lilla bärbara datorn, som jag kallar Pi-Micro. Detta är den tredje versionen av Pi-Micro, nästan ett år på tillverkningen
Fickstorlek: Ta ditt kontor på din telefon: 7 steg
Pocket Sized: Ta ditt kontor på din telefon: Har du någonsin varit ute och insett att du har glömt att skicka e -post till en viktig klient? Har du någonsin haft en bra idé om en instruerbar när du gick på gatan, men du hade inget papper? Önskar du någonsin att du kunde få ditt e -postmeddelande på din telefon? Du kan allt