Kazalo:
- Zaloge
- 1. korak: Shema vezja
- 2. korak: Ustvarjanje nabora podatkov za napravo za odkrivanje kašlja
- 3. korak: Povežite se z mobilnim telefonom
- 4. korak:
- 5. korak: Usposabljanje modela in spreminjanje kodeksa
- 6. korak:
- 7. korak: Koda
Video: Žepni detektor kašlja: 7 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:02
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
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
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
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:
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:
Vizualizator žepnega signala (žepni osciloskop): 10 korakov (s slikami)
Vizualizator žepnega signala (žepni osciloskop): Pozdravljeni, vsi počnemo toliko stvari vsak dan. Za vsako delo je potrebno nekaj orodja. To je za izdelavo, merjenje, dodelavo itd. Torej za elektronske delavce potrebujejo orodja, kot so spajkalnik, večmetrski, osciloskop itd
Žepni generator vodika/kisika: 5 korakov
Žepni generator vodika/kisika: z vodikom se je zabavno igrati, vendar so najučinkovitejši generatorji veliki. Želel sem narediti nekaj, kar je majhno in bi lahko proizvajalo vodik. Ta vadnica vam bo pokazala, kako narediti žepni generator vodika/kisika. Na žalost ni to
DIY žepni preverjevalnik temperature zraka: 6 korakov
DIY žepni preverjevalnik temperature zraka: za to bomo uporabili zaslon Nokia 5110, digitalni temperaturni modul in Arduino Uno. Potreben je tudi priključek 9 V z žicami, ne s sodom, skupaj s stikalom in žicami. Morda boste potrebovali spajkalnik, lahko pa tudi samo zvite žice
Žepni EKG monitor: 7 korakov
Žepni EKG monitor: No, kaj je EKG? Po podatkih Ameriškega združenja za srce gre za test, ki meri električno aktivnost srčnega utripa. Z vsakim utripom električni impulz (ali "val") potuje skozi srce. Ta val povzroči stiskanje mišic
Žepni detektor CO (ogljikov monoksid): 5 korakov
Žepni detektor CO (ogljikov monoksid): Kot že ime pove, je to žepni detektor CO, ki se uporablja za zaznavanje ogljikovega monoksida v zraku, naš cilj je bil narediti to napravo prenosno in primerno za velikost žepa. problem onesnaženja zraka zaradi industrializacije ev