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, Studeni
Anonim
Džepni detektor kašlja
Džepni detektor kašlja

COVID19 je doista povijesna pandemija koja jako loše pogađa cijeli svijet i ljudi grade mnogo novih uređaja za borbu protiv njega. Također smo izgradili automatski stroj za dezinfekciju i termalni pištolj za beskontaktno mjerenje temperature. Danas ćemo izgraditi još jedan uređaj za borbu protiv koronavirusa. To je sustav za otkrivanje kašlja koji može razlikovati buku od zvuka kašlja i može pomoći u pronalaženju osumnjičenog za Coronu. Za to će koristiti tehnike strojnog 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 uzoraka kašlja i pozadinske buke te za izradu visoko optimiziranog TInyML modela koji može detektirati zvuk kašlja u stvarnom vremenu.

Pribor

Hardver

  • Arduino 33 BLE Sense
  • LEDJumper
  • Žice

Softver

  • Edge Impulse Studio
  • Arduino IDE

Korak 1: Dijagram kruga

Kružni dijagram
Kružni dijagram
Kružni dijagram
Kružni dijagram

Dijagram sklopa 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 vod LED diode spojen je na digitalni pin 4 Arduino 33 BLE osjetnika, a negativni vod spojen je na GND pin Arduina.

Korak 2: Stvaranje skupa podataka za stroj za otkrivanje kašlja

Stvaranje skupa podataka za stroj za otkrivanje kašlja
Stvaranje skupa podataka za stroj 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 zbog buke, tako da može razlikovati kašalj i druge šumove. Napravit ćemo skup podataka s dvije klase "kašalj" i "buka". Da biste izradili 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 učitavanja uzoraka na vaš račun je korištenje vašeg mobilnog telefona. Za to morate povezati svoj mobilni telefon s Edge Impulse. Da biste povezali svoj mobilni telefon, kliknite "Uređaji", a zatim "Poveži novi uređaj".

Korak 3: Povežite se s mobilnim telefonom

Povežite se s mobilnim telefonom
Povežite se s 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 s Edge Impulse studijem.

Kad je vaš telefon povezan s Edge Impulse Studio, sada možete učitati svoje uzorke. Za učitavanje uzoraka kliknite na "Prikupljanje podataka". Sada na stranici Prikupljanje podataka unesite naziv naljepnice, odaberite mikrofon kao senzor i unesite duljinu uzorka. Pritisnite "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 duljine. Snimite ukupno 10 do 12 uzoraka kašlja različite duljine.

Korak 4:

Slika
Slika
Slika
Slika

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

Ovi uzorci služe za obuku modula, u sljedećim koracima prikupit ćemo podatke o testiranju. Podaci o testiranju trebali bi činiti najmanje 30% podataka o obuci, stoga 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, najprije preuzmite i instalirajte Node.js na svoje prijenosno računalo. Nakon toga otvorite naredbeni redak i unesite naredbu ispod:

npm install -g edge-impulse-cli

Sada preuzmite skup podataka (Veza na skup 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 kategorije/*. json edge-impulse-uploader-testiranje testiranja kategorije/*. cbor

Korak 5: Obuka modela i dotjerivanje koda

Kako je skup podataka spreman, sada ćemo stvoriti impuls za podatke. Za to idite na stranicu "Stvori impuls".

Sada na stranici 'Create impulse' kliknite na 'Add a processing block'. U sljedećem prozoru odaberite audio (MFCC) blok. Nakon toga kliknite ‘Dodaj blok za učenje’ i odaberite blok Neural Network (Keras). Zatim kliknite "Spremi impuls".

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 izvornik sljedećim kodom i promijenite "Minimalnu ocjenu pouzdanosti" na "0,70". Zatim kliknite gumb ‘Započni obuku’. Počet će trenirati vaš model.

uvoziti tensorflow kao tffrom tensorflow.keras.models uvoz Sekvencijalno iz tensorflow.keras.layers uvoziti Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D iz 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 (Dense (classes, activation = '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) # trenirajte model neuronske mreže.compile (loss = 'kategorična_krossentropija', optimizer = opt, metrics = ['točnost']) model.fit (X_train, Y_train, batch_size = 32, epohe = 9, podaci o provjeri valjanosti = (X_test, Y_test), detaljno = 2)

Korak 6:

Nakon vježbanja modela prikazat će se izvedba treninga. Za mene je točnost bila 96,5%, a gubitak 0,10 što je dobro za nastaviti.

Budući da je naš model otkrivanja kašlja spreman, ovaj ćemo model primijeniti kao Arduino knjižnicu. 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 knjižnica". Sada se pomaknite prema dolje i kliknite "Izgradi" za početak procesa. Ovo će izgraditi Arduino knjižnicu za vaš projekt.

Sada dodajte knjižnicu u svoj Arduino IDE. Za to otvorite Arduino IDE, a zatim kliknite Sketch> Include Library> Add. ZIP library. Zatim učitajte primjer tako da odete 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 buke i kašlja. U izvornom kodu ispisuje naljepnice i njihove vrijednosti zajedno. for (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 usporediti 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 izvorni kod za loop () ovim: for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification [ix].value); float Podaci = rezultat.klasifikacija [ix].vrijednost; 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 stroj za otkrivanje kašlja, to nije jako učinkovita metoda za pronalaženje sumnjivaca na COVID19, ali može lijepo raditi u nekim gužvama.

Korak 7: Kodirajte

Molim vas nađite dokument u privitku, A ako vam se svidjelo, ne zaboravite glasati za mene na donjem natjecanju.

Preporučeni: