Sadržaj:

Džepni detektor kašlja: 7 koraka
Džepni detektor kašlja: 7 koraka

Video: Džepni detektor kašlja: 7 koraka

Video: Džepni detektor kašlja: 7 koraka
Video: How the pandemic will shape the near future | Bill Gates 2024, Juli
Anonim
Džepni detektor kašlja
Džepni detektor kašlja

COVID19 je zaista povijesna pandemija koja jako loše pogađa cijeli svijet i ljudi grade mnogo novih uređaja za borbu protiv njega. Izgradili smo i automatsku mašinu za dezinfekciju i termalni pištolj za beskontaktno mjerenje temperature. Danas ćemo izgraditi još jedan uređaj za borbu protiv koronavirusa. To je sistem za detekciju kašlja, koji može razlikovati buku i zvuk kašlja i može pomoći u pronalaženju osumnjičenog za Koronu. Za to će koristiti tehnike mašinskog učenja.

U ovom ćemo vodiču izgraditi sustav za otkrivanje kašlja koristeći Arduino 33 BLE Sense i Edge Impulse Studio. Može razlikovati normalnu pozadinsku buku i kašalj u zvuku u stvarnom vremenu. Koristili smo Edge Impulse Studio za obuku skupa podataka o uzorcima kašlja i pozadinske buke i za izradu visoko optimiziranog TInyML modela koji može otkriti zvuk kašlja u stvarnom vremenu.

Supplies

Hardver

  • Arduino 33 BLE Sense
  • LEDJumper
  • Žice

Softver

  • Edge Impulse Studio
  • Arduino IDE

Korak 1: Dijagram kola

Dijagram kola
Dijagram kola
Dijagram kola
Dijagram kola

Dijagram kola za otkrivanje kašlja pomoću Arduina 33 BLE Sense dat je gore. Fritzing dio za Arduino 33 BLE nije bio dostupan, pa sam koristio Arduino Nano jer oba imaju isti pin-out.

Pozitivni provodnik LED diode spojen je na digitalni pin 4 Arduino 33 BLE senzora, a negativni vod je spojen na GND pin Arduina.

Korak 2: Kreiranje skupa podataka za aparat za otkrivanje kašlja

Kreiranje skupa podataka za aparat za otkrivanje kašlja
Kreiranje skupa podataka za aparat za otkrivanje kašlja

Kao što je ranije spomenuto, koristimo Edge Impulse Studio za obuku našeg modela otkrivanja kašlja. Za to moramo prikupiti skup podataka koji sadrži uzorke podataka koje bismo željeli prepoznati na našem Arduinu. Budući da je cilj otkriti kašalj, morat ćete prikupiti neke uzorke tog i nekih drugih uzoraka za buku, tako da može razlikovati kašalj i druge šumove. Napravit ćemo skup podataka s dvije klase “kašalj” i “buka”. Da biste stvorili skup podataka, stvorite Edge Impulse račun, potvrdite svoj račun, a zatim pokrenite novi projekt. Uzorke možete učitati pomoću mobilnog telefona, Arduino ploče ili možete uvesti skup podataka u svoj rubni impulsni račun. Najjednostavniji način da učitate uzorke na svoj račun je pomoću mobilnog telefona. Da biste to učinili, morate povezati svoj mobilni telefon s Edge Impulse. Da biste povezali svoj mobilni telefon, kliknite na „Uređaji“, a zatim na „Poveži novi uređaj“.

Korak 3: Povežite se s mobilnim telefonom

Povežite se sa mobilnim telefonom
Povežite se sa mobilnim telefonom

Sada u sljedećem prozoru kliknite "Koristi svoj mobilni telefon" i pojavit će se QR kôd. Skenirajte QR kôd svojim mobilnim telefonom pomoću Google objektiva ili druge aplikacije za skeniranje QR koda.

Ovo će povezati vaš telefon sa Edge Impulse studijem.

Kad je vaš telefon povezan s Edge Impulse Studio, sada možete učitati uzorke. Da biste učitali uzorke, kliknite na „Prikupljanje podataka“. Sada na stranici Prikupljanje podataka unesite naziv naljepnice, odaberite mikrofon kao senzor i unesite dužinu uzorka. Kliknite na „Pokreni uzorkovanje“da biste započeli uzorkovanje uzorka od 40 sekundi. Umjesto da se prisiljavate na kašalj, možete koristiti internetske uzorke kašlja različite dužine. Snimite ukupno 10 do 12 uzoraka kašlja različite dužine.

Korak 4:

Image
Image
Image
Image

Nakon što ste učitali uzorke kašlja, sada postavite oznaku na „buka“i prikupite još 10 do 12 uzoraka buke.

Ovi uzorci su za obuku modula, u sljedećim koracima prikupit ćemo podatke o testiranju. Podaci o testiranju trebali bi činiti najmanje 30% podataka o obuci, pa prikupite 3 uzorka "buke" i 4 do 5 uzoraka "kašlja". Umjesto prikupljanja vaših podataka, možete uvesti naš skup podataka u svoj račun Edge Impulse koristeći Edge Impulse CLI Uploader. Da biste instalirali CLI Uploader, prvo preuzmite i instalirajte Node.js na prijenosno računalo. Nakon toga otvorite naredbeni redak i unesite naredbu ispod:

npm install -g edge-impulse-cli

Sada preuzmite skup podataka (veza do skupa podataka) i izdvojite datoteku u mapu projekta. Otvorite naredbeni redak i idite na lokaciju skupa podataka i pokrenite naredbe u nastavku:

edge-impulse-uploader --cleanedge-impulse-uploader-trening za kategoriju/*. json

edge-impulse-uploader-trening za kategorijsku obuku/*. cbor

edge-impulse-uploader-testiranje testiranja kategorija/*. json edge-impulse-uploader-testiranje kategorizacije testiranja/*. cbor

Korak 5: Obuka modela i dorada koda

Kako je skup podataka spreman, sada ćemo stvoriti impuls za podatke. Za to idite na stranicu „Kreiraj impuls“.

Sada na stranici „Kreiraj impuls“kliknite na „Dodaj blok za obradu“. U sljedećem prozoru odaberite audio (MFCC) blok. Nakon toga kliknite na ‘Dodaj blok za učenje’ i odaberite blok Neural Network (Keras). Zatim kliknite na "Save Impulse".

U sljedećem koraku idite na stranicu MFCC, a zatim kliknite na "Generiraj značajke". On će generirati MFCC blokove za sve naše audio prozore.

Nakon toga idite na stranicu 'NN Classifier' i kliknite na tri točke u gornjem desnom kutu 'Postavke neuronske mreže' i odaberite 'Prebaci na način rada Keras (stručni)'.

Zamijenite original sljedećim kodom i promijenite „Minimalnu ocjenu pouzdanosti“na „0,70“. Zatim kliknite na dugme „Započni obuku“. Počet će obučavati vaš model.

uvoziti tensorflow kao tffrom tensorflow.keras.models uvoz Sekvencijalno sa tensorflow.keras.layers uvoziti Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D from tensorflow.keras.optimizers MaxNorm # model arhitekture model = Sequential () model.add (InputLayer (input_shape = (X_train.shape [1],), name = '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 = 'isto', 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 (Gusti (klase, aktivacija = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # ovo kontrolira brzinu učenja opt = Adam (lr = 0,005, beta_ 1 = 0,9, beta_2 = 0,999) # obučite model neuronske mreže.compile (loss = 'kategorična_krossentropija', optimizator = opt, metrika = ['tačnost']) model.fit (X_train, Y_train, batch_size = 32, epochs = 9, validation_data = (X_test, Y_test), detaljno = 2)

Korak 6:

Nakon obuke modela, prikazat će se performanse treninga. Za mene je tačnost bila 96,5%, a gubitak 0,10, što je dobro za nastavak.

Pošto je naš model otkrivanja kašlja spreman, ovaj model ćemo primijeniti kao Arduino biblioteku. Prije preuzimanja modela kao biblioteke, možete testirati performanse tako što ćete otići na stranicu „Klasifikacija uživo“. Idite na stranicu "Raspoređivanje" i odaberite "Arduino biblioteka". Sada se pomaknite prema dolje i kliknite na 'Izradi' za početak procesa. Ovo će izgraditi Arduino biblioteku za vaš projekt.

Sada dodajte biblioteku u svoj Arduino IDE. Za to otvorite Arduino IDE, a zatim kliknite Sketch> Include Library> Add. ZIP library. Zatim učitajte primjer tako što ćete otići na Datoteka> Primjeri> Naziv vašeg projekta - Edge Impulse> nano_ble33_sense_microphone. Napravit ćemo neke promjene u kodu kako bismo mogli oglasiti zvuk upozorenja kada Arduino otkrije kašalj. U tu svrhu, zujalica je povezana s Arduinom i kad god otkrije kašalj, LED će treptati tri puta. Promjene se vrše u funkcijama void loop () gdje ispisuje vrijednosti šuma i kašlja. U originalnom kodu ispisuje naljepnice i njihove vrijednosti zajedno. za (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf (" %s: %.5f / n", result.classification [ix].label, result.classification [ix].value); } Spremit ćemo vrijednosti buke i kašlja u različite varijable i uporediti vrijednosti buke. Ako vrijednost buke padne ispod 0,50, to znači da je vrijednost kašlja veća od 0,50 i dat će zvuk. Zamijenite originalni kod za loop () ovim: for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification [ix].value); float Data = result.classification [ix].value; if (Podaci <0,50) {Serial.print ("Otkriven kašalj"); alarm (); }} Nakon što unesete promjene, prenesite kôd u svoj Arduino. Otvorite serijski monitor na 115200 bauda.

Dakle, ovako se može izgraditi mašina za otkrivanje kašlja, to nije vrlo efikasna metoda za pronalaženje sumnjivih osoba na COVID19, ali može dobro raditi u nekim gužvama.

Korak 7: Kodirajte

Molimo vas da pronađete priloženi fajl, A ako vam se svidjelo, ne zaboravite glasati za mene na donjem takmičenju.

Preporučuje se: