- Potrebne komponente
- Shema vezja
- Ustvarjanje nabora podatkov za napravo za odkrivanje kašlja
- Izobraževanje modela in prilagajanje kodeksa
COVID19 je resnično zgodovinska pandemija, ki zelo močno prizadene ves svet in ljudje gradijo veliko novih naprav za boj z njo. Vgradili smo tudi avtomatski sanitarni stroj in termalno pištolo za brezkontaktno presejanje temperature. Danes bomo zgradili še eno napravo za pomoč v boju s koronavirusom. To je sistem za zaznavanje kašlja, ki lahko razlikuje med hrupom in zvokom kašlja ter pomaga pri iskanju osumljenca Corone. Za to bo uporabil tehnike strojnega učenja.
V tej vadnici bomo zgradili sistem za zaznavanje kašlja z uporabo Arduino 33 BLE Sense in Edge Impulse Studio. V realnem času lahko razlikuje med običajnim hrupom v ozadju in kašljanjem. Edge Impulse Studio smo uporabili za usposabljanje nabora podatkov o vzorcih kašlja in hrupa v ozadju ter izdelali zelo optimiziran model TInyML, ki lahko zazna zvok kašlja v realnem času.
Potrebne komponente
Strojna oprema
- Arduino 33 BLE Sense
- LED
- Jumper žice
Programska oprema
- Edge Impulse Studio
- Arduino IDE
Pokrili smo podrobno vadnico o Arduino 33 BLE Sense.
Shema vezja
Shema vezja za odkrivanje kašlja z uporabo Arduino 33 BLE Sense je podana spodaj. Fritzing del za Arduino 33 BLE ni bil na voljo, zato sem uporabil Arduino Nano, saj imata oba enak pin-out.
Pozitivni kabel LED je priključen na digitalni zatič 4 arduino 33 BLE sense, negativni kabel pa na GND pin Arduino.
Ustvarjanje nabora podatkov za napravo za odkrivanje kašlja
Kot smo že omenili, za usposabljanje našega modela zaznavanja kašlja uporabljamo Edge Impulse Studio. 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 nekaterih 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 z mobilnim telefonom, ploščo Arduino ali uvozite nabor podatkov v svoj robni impulzni račun. Vzorce najlažje naložite v svoj račun z uporabo mobilnega telefona. Za to morate svoj mobilni telefon povezati z Edge Impulse.
Če želite povezati svoj mobilni telefon, kliknite » Naprave « in nato » Poveži novo napravo« .
Zdaj v naslednjem oknu kliknite " Uporabi svoj mobilni telefon" in prikazala se bo koda QR. S svojim mobilnim telefonom optično preberite kodo QR z Google Lens ali drugo aplikacijo za skeniranje QR kode.
To bo povezalo vaš telefon z studiem Edge Impulse.
Ko je vaš telefon povezan z Edge Impulse Studio, lahko zdaj naložite vzorce. Če želite naložiti vzorce, kliknite " Pridobivanje 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 se prisilite k kašljanju, lahko uporabite spletne vzorce kašlja različnih dolžin. Zabeležite skupaj 10 do 12 vzorcev kašlja različnih dolžin.
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 podatke o preskusu. Podatki o preskusih morajo biti vsaj 30% podatkov o vadbi, zato zberite 3 vzorce "hrupa" in 4 do 5 vzorcev "kašlja".
Namesto da zbirate podatke, lahko z nalagalnikom Edge Impulse CLI uvozite naš nabor podatkov v svoj račun Edge Impulse.
Če želite namestiti CLI Uploader, najprej prenesite in namestite Node.js na svoj prenosnik. Po tem odprite ukazni poziv in vnesite spodnji ukaz:
npm namestite -g rob-impulse-cli
Zdaj prenesite nabor podatkov (povezava nabora podatkov) in datoteko izvlecite v mapo projekta. Odprite ukazni poziv in se pomaknite do mesta nabora podatkov in zaženite spodnje ukaze:
edge-impulse-uploader --clean edge-impulse-uploader --cata training training / *. json edge-impulse-uploader --cacation training training / *. cbor edge-impulse-uploader --caging testing testing / *. json edge-impulse-uploader - preskušanje kategorij / *. cbor
Izobraževanje modela in prilagajanje 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 procesni blok« . V naslednjem oknu izberite blok Audio (MFCC). Po tem kliknite na " Dodaj učni blok" in izberite blok Neural Network (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 ' Nastavitve nevronske mreže' in izberite ' Preklopi v Kerasov (strokovni) način' .
Zamenjajte izvirnik z naslednjo kodo in spremenite " Minimalno stopnjo zaupanja" na "0,70". Nato kliknite gumb " Začni s treningom" . Začel bo trenirati vaš model.
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D from tensorflow.keras.optimizorstrants uvoz MaxNorm # model arhitekture model = Sequential () model.add (InputLayer (input_shape = (X_train.shape,), name = 'x_input')) model.add (Preoblikovanje ((int (X_train.shape / 13), 13, 1), input_shape = (X_train.shape,))) model.add (Conv2D (10, size_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 (velikost_družine = 2,padding = 'same')) model.add (Flatten ()) model.add (Gosto (razredi, aktivacija = '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) # treniraj model nevronske mreže.compile (izguba = 'categorical_crossentropy', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, epohe = 9, podatki o potrditvi = (X_test, Y_test), podrobno = 2)podroben = 2)podroben = 2)
Po treningu modela bo prikazan trening. Zame je bila natančnost 96,5% in izguba 0,10, kar je dobro nadaljevati.
Zdaj, ko je naš model za odkrivanje kašlja pripravljen, ga bomo uvedli kot knjižnico Arduino. Preden model prenesete kot knjižnico, lahko preizkusite delovanje na strani » Live Classification «.
Pojdite na stran » Razmestitev « in izberite » Arduino Library« . Zdaj se pomaknite navzdol in kliknite 'Build', da začnete postopek. S tem boste zgradili knjižnico Arduino za vaš projekt.
Zdaj dodajte knjižnico v svoj Arduino IDE. Za to odprite Arduino IDE in nato kliknite Skica> Vključi knjižnico> Dodaj.ZIP knjižnico.
Nato naložite primer, tako da odprete Datoteka> Primeri> Ime vašega projekta - Edge Impulse> nano_ble33_sense_microphone.
Spremenili bomo kodo, da bomo lahko sprožili opozorilni zvok, ko bo Arduino zaznal kašelj. Za to je zvočni signal povezan z Arduinom in vsakič, ko zazna kašelj, LED trikrat utripne.
Spremembe se izvedejo v funkcijah void loop (), kjer se natisnejo vrednosti hrupa in kašlja. V izvirni kodi tiska nalepke in njihove vrednosti skupaj.
za (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Vrednosti hrupa in kašlja bomo shranili v različne spremenljivke in primerjali vrednosti hrupa. Če je vrednost hrupa pod 0,50, to pomeni, da je vrednost kašlja večja od 0,50 in bo zaslišal. Zamenjajte izvirno kodo for loop () s tem:
for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); float Podatki = result.classification.value; if (Podatki <0,50) {Serial.print ("Zaznan kašelj"); alarm (); }}
Po izvedbi sprememb naložite kodo v svoj Arduino. Odprite serijski monitor na 115200 baud.
Tako je torej mogoče izdelati stroj za odkrivanje kašlja, saj ni zelo učinkovit način za iskanje osumljencev za COVID19, vendar lahko v nekaterih gnečah deluje lepo.
Spodaj je podan celoten delujoč video s knjižnico in kodo: