Innehållsförteckning:

Fickstorlek hostdetektor: 7 steg
Fickstorlek hostdetektor: 7 steg

Video: Fickstorlek hostdetektor: 7 steg

Video: Fickstorlek hostdetektor: 7 steg
Video: 🚀 AMAZON 2.0 - ИНТЕРНЕТ МАГАЗИН с нуля за 6 часов [Next / React / Nest / PostgreSQL / Prisma / TS] 2024, November
Anonim
Fickstorlek hostdetektor
Fickstorlek hostdetektor

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
Kretsdiagram
Kretsdiagram
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

Skapa datauppsättningen för hostdetekteringsmaskin
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

Anslut till mobiltelefon
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:

Bild
Bild
Bild
Bild

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: