Kazalo:

Žepni detektor kašlja: 7 korakov
Žepni detektor kašlja: 7 korakov

Video: Žepni detektor kašlja: 7 korakov

Video: Žepni detektor kašlja: 7 korakov
Video: 24 часа в японском поезде с ночным спальным местом, места первого класса (полный тур) 2024, November
Anonim
Žepni detektor kašlja
Žepni detektor kašlja

COVID19 je res zgodovinska pandemija, ki zelo močno prizadene ves svet in ljudje gradijo veliko novih naprav za boj z njim. Zgradili smo tudi avtomatski razkuževalni stroj in termalno pištolo za brezkontaktno merjenje temperature. Danes bomo zgradili še eno napravo za boj proti koronavirusu. To je sistem za odkrivanje kašlja, ki lahko razlikuje med hrupom in zvokom kašlja ter lahko pomaga pri iskanju osumljenca Corone. Za to bo uporabil tehnike strojnega učenja.

V tej vadnici bomo z uporabo Arduino 33 BLE Sense in Edge Impulse Studio zgradili sistem za odkrivanje kašlja. V zvoku v realnem času lahko razlikuje med običajnim hrupom v ozadju in kašljanjem. S programom Edge Impulse Studio smo usposobili nabor podatkov o vzorcih kašlja in hrupa v ozadju ter zgradili zelo optimiziran model TInyML, ki lahko v realnem času zazna zvok kašlja.

Zaloge

Strojna oprema

  • Arduino 33 BLE Sense
  • LEDJumper
  • Žice

Programska oprema

  • Edge Impulse Studio
  • Arduino IDE

1. korak: Shema vezja

Shema vezja
Shema vezja
Shema vezja
Shema vezja

Zgornja shema za odkrivanje kašlja z uporabo Arduino 33 BLE Sense. Fritzing del za Arduino 33 BLE ni bil na voljo, zato sem uporabil Arduino Nano, saj imata oba isti pin-out.

Pozitivni kabel LED je priključen na digitalni pin 4 Arduino 33 BLE sense, negativni kabel pa na GND pin Arduina.

2. korak: Ustvarjanje nabora podatkov za napravo za odkrivanje kašlja

Ustvarjanje nabora podatkov za stroj za odkrivanje kašlja
Ustvarjanje nabora podatkov za stroj za odkrivanje kašlja

Kot smo že omenili, uporabljamo Edge Impulse Studio za usposabljanje našega modela odkrivanja kašlja. Za to moramo zbrati nabor podatkov, ki vsebuje vzorce podatkov, ki bi jih radi prepoznali na našem Arduinu. Ker je cilj odkriti kašelj, boste morali zbrati nekaj vzorcev tega in nekaj drugih vzorcev za hrup, da bo lahko razlikoval med kašljem in drugimi hrupi. Ustvarili bomo nabor podatkov z dvema razredoma "kašelj" in "hrup". Če želite ustvariti nabor podatkov, ustvarite račun Edge Impulse, preverite svoj račun in nato začnite nov projekt. Vzorce lahko naložite s svojim mobilnim telefonom, ploščo Arduino ali pa uvozite nabor podatkov v svoj robni impulzni račun. Vzorce najlažje naložite v svoj račun z uporabo mobilnega telefona. Če želite to narediti, morate mobilni telefon povezati z Edge Impulse. Če želite povezati mobilni telefon, kliknite »Naprave« in nato »Poveži novo napravo«.

3. korak: Povežite se z mobilnim telefonom

Povežite se z mobilnim telefonom
Povežite se z mobilnim telefonom

Zdaj v naslednjem oknu kliknite »Uporabi svoj mobilni telefon« in prikazala se bo koda QR. Skenirajte kodo QR s svojim mobilnim telefonom z Googlovim objektivom ali drugo aplikacijo za optično branje kode QR.

S tem boste telefon povezali z studiem Edge Impulse.

Ko je vaš telefon povezan z Edge Impulse Studio, lahko zdaj naložite vzorce. Če želite naložiti vzorce, kliknite »Zbiranje podatkov«. Zdaj na strani Zbiranje podatkov vnesite ime nalepke, izberite mikrofon kot senzor in vnesite dolžino vzorca. Kliknite »Začni vzorčenje«, da začnete vzorčiti 40 -sekundni vzorec. Namesto da bi silili v kašelj, lahko uporabite spletne vzorce kašlja različnih dolžin. Posnemite skupaj 10 do 12 vzorcev kašlja različnih dolžin.

4. korak:

Slika
Slika
Slika
Slika

Po nalaganju vzorcev kašlja nastavite oznako na 'šum' in zberite še 10 do 12 vzorcev hrupa.

Ti vzorci so namenjeni usposabljanju modula, v naslednjih korakih bomo zbrali testne podatke. Podatki o preskusih bi morali biti vsaj 30% podatkov o usposabljanju, zato zberite 3 vzorce "hrupa" in 4 do 5 vzorcev "kašlja". Namesto zbiranja podatkov lahko uvozite naš nabor podatkov v svoj račun Edge Impulse s pomočjo Edge Impulse CLI Uploader. Če želite namestiti program CLI Uploader, najprej v prenosni računalnik prenesite in namestite Node.js. Po tem odprite ukazni poziv in vnesite spodnji ukaz:

npm install -g edge-impulse-cli

Zdaj prenesite nabor podatkov (povezava do nabora podatkov) in izvlecite datoteko v mapo projekta. Odprite ukazni poziv in se pomaknite do lokacije nabora podatkov ter zaženite naslednje ukaze:

edge-impulse-uploader --cleanedge-impulse-uploader-usposabljanje za kategorijo/*. json

edge-impulse-uploader-usposabljanje za kategorijo/*. cbor

edge-impulse-uploader-testiranje kategorij testiranja/*. json edge-impulse-uploader-testiranje kategorij testiranja/*. cbor

5. korak: Usposabljanje modela in spreminjanje kodeksa

Ko je nabor podatkov pripravljen, bomo zdaj ustvarili impulz za podatke. Za to pojdite na stran 'Ustvari impulz'.

Zdaj na strani »Ustvari impulz« kliknite »Dodaj blok za obdelavo«. V naslednjem oknu izberite zvočni blok (MFCC). Po tem kliknite »Dodaj učni blok« in izberite blok Nevronsko omrežje (Keras). Nato kliknite »Shrani impulz«.

V naslednjem koraku pojdite na stran MFCC in kliknite »Ustvari funkcije«. Ustvaril bo bloke MFCC za vsa naša zvočna okna.

Po tem pojdite na stran 'NN Classifier' in kliknite tri pike v zgornjem desnem kotu 'Neural Network settings' in izberite 'Switch to Keras (expert) mode'.

Zamenjajte izvirnik z naslednjo kodo in spremenite "Minimalna ocena zaupanja" na "0,70". Nato kliknite gumb »Začni usposabljanje«. Začel bo usposabljati vaš model.

uvozi tensorflow kot tffrom tensorflow.keras.models uvoz zaporedje iz tensorflow.keras.layers uvozi Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D iz tensorflow.keras.optimizers MaxNorm # model arhitekturnega modela = 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 = '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))) # to nadzoruje stopnjo učenja opt = Adam (lr = 0,005, beta_ 1 = 0,9, beta_2 = 0,999) # trenirajte model nevronskega omrežja. Compile (izguba = 'kategorična_krossentropija', optimizator = opt, metrike = ['natančnost']) model.fit (X_train, Y_train, batch_size = 32, epochs = 9, validation_data = (X_test, Y_test), verbose = 2)

6. korak:

Po vadbi modela bo prikazana zmogljivost vadbe. Zame je bila natančnost 96,5%, izguba pa 0,10, kar je dobro nadaljevati.

Zdaj, ko je naš model odkrivanja kašlja pripravljen, bomo ta model uporabili kot knjižnico Arduino. Preden prenesete model kot knjižnico, lahko preizkusite delovanje tako, da odprete stran »Klasifikacija v živo«. Pojdite na stran »Uvajanje« in izberite »Knjižnica Arduino«. Zdaj se pomaknite navzdol in kliknite »Build«, da začnete postopek. Tako boste zgradili knjižnico Arduino za vaš projekt.

Zdaj dodajte knjižnico v svoj Arduino IDE. Za to odprite Arduino IDE in kliknite Sketch> Include Library> Add. ZIP library. Nato naložite primer tako, da odprete Datoteka> Primeri> Ime vašega projekta - Edge Impulse> nano_ble33_sense_microphone. V kodi bomo naredili nekaj sprememb, da bomo lahko sprožili opozorilni zvok, ko Arduino zazna kašelj. V ta namen je z Arduinom povezan zvočni signal in vsakič, ko zazna kašelj, bo LED trikrat utripala. Spremembe se izvedejo v funkcijah void loop (), kjer tiska vrednosti hrupa in kašlja. V izvirni kodi tiska nalepke in njihove vrednosti skupaj. for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf (" %s: %.5f / n", result.classification [ix].label, result.classification [ix].value); } Vrednosti hrupa in kašlja bomo shranili v različnih spremenljivkah in primerjali vrednosti hrupa. Če vrednost hrupa pade pod 0,50, to pomeni, da je vrednost kašlja večja od 0,50 in bo sprožil zvok. Izvirno kodo for loop () zamenjajte s tem: for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification [ix].value); float Data = result.classification [ix].value; if (Podatki <0,50) {Serial.print ("Zaznan kašelj"); alarm (); }} Po spremembah naložite kodo v svoj Arduino. Odprite serijski monitor pri 115200 baud.

Tako je mogoče zgraditi aparat za odkrivanje kašlja, ni zelo učinkovita metoda za iskanje osumljenca COVID19, vendar lahko lepo deluje v nekaterih gnečah.

7. korak: Koda

Poiščite priloženo datoteko, In če vam je bilo všeč, ne pozabite glasovati zame na spodnjem tekmovanju.

Priporočena: