- Nepieciešamās sastāvdaļas
- Ķēdes shēma
- Klepus noteikšanas mašīnas datu kopas izveide
- Modeļa apmācība un kodeksa pielāgošana
COVID19 patiešām ir vēsturiska pandēmija, kas ļoti smagi ietekmē visu pasauli, un cilvēki būvē daudz jaunu ierīču, lai ar to cīnītos. Mēs esam uzbūvējuši arī automātisku sanitārijas mašīnu un termopistoli bezkontakta temperatūras pārbaudei. Šodien mēs izveidosim vēl vienu ierīci, kas palīdzēs cīnīties ar koronavīrusu. Tā ir klepus noteikšanas sistēma, kas var atšķirt troksni no klepus skaņas un var palīdzēt atrast aizdomās turēto Corona. Tam tiks izmantotas mašīnmācīšanās metodes.
Šajā apmācībā mēs izveidosim klepus noteikšanas sistēmu, izmantojot Arduino 33 BLE Sense un Edge Impulse Studio. Reālā laika audio var atšķirt normālu fona troksni un klepu. Mēs izmantojām Edge Impulse Studio, lai apmācītu klepus un fona trokšņa paraugu datu kopu un izveidotu ļoti optimizētu TInyML modeli, kas reāllaikā var noteikt Klepus skaņu.
Nepieciešamās sastāvdaļas
Aparatūra
- Arduino 33 BLE Sense
- LED
- Džemperu vadi
Programmatūra
- Edge Impulse Studio
- Arduino IDE
Mēs esam iekļāvuši detalizētu apmācību par Arduino 33 BLE Sense.
Ķēdes shēma
Ķēdes shēma klepus noteikšanai, izmantojot Arduino 33 BLE Sense, ir sniegta zemāk. Arduino 33 BLE bremzējošā daļa nebija pieejama, tāpēc es izmantoju Arduino Nano, jo abiem ir viens un tas pats kontakts.
LED pozitīvais vads ir savienots ar Arduino 33 BLE sense digitālo tapu 4, un negatīvais vads ir savienots ar Arduino GND tapu.
Klepus noteikšanas mašīnas datu kopas izveide
Kā minēts iepriekš, mēs izmantojam Edge Impulse Studio, lai apmācītu mūsu klepus noteikšanas modeli. Lai to izdarītu, mums ir jāapkopo datu kopa, kurā ir datu paraugi, kurus mēs vēlētos atpazīt mūsu Arduino. Tā kā mērķis ir atklāt klepu, jums būs jāsavāc daži tā un daži citi paraugi trokšņa noteikšanai, lai tas varētu atšķirt klepu un citus trokšņus.
Mēs izveidosim datu kopu ar divām klasēm “klepus” un “troksnis”. Lai izveidotu datu kopu, izveidojiet Edge Impulse kontu, verificējiet kontu un pēc tam sāciet jaunu projektu. Paraugus varat ielādēt, izmantojot mobilo tālruni, Arduino dēli vai arī importēt datu kopu savā malas impulsa kontā. Vienkāršākais veids, kā ielādēt paraugus savā kontā, ir mobilais tālrunis. Lai to izdarītu, jums ir jāpievieno mobilais tālrunis ar Edge Impulse.
Lai pievienotu mobilo tālruni, noklikšķiniet uz “ Ierīces ” un pēc tam uz “ Savienot jaunu ierīci” .
Tagad nākamajā logā noklikšķiniet uz Lietot savu mobilo tālruni , un parādīsies QR kods. Skenējiet QR kodu ar savu mobilo tālruni, izmantojot Google Lens vai citu QR kodu skenera lietotni.
Tas savienos jūsu tālruni ar Edge Impulse studiju.
Izmantojot tālruni, kas savienots ar Edge Impulse Studio, tagad varat ielādēt savus paraugus. Lai ielādētu paraugus, noklikšķiniet uz Datu iegūšana . Tagad lapā Datu iegūšana ievadiet etiķetes nosaukumu, atlasiet mikrofonu kā sensoru un ievadiet parauga garumu. Noklikšķiniet uz Sākt izlasi , lai sāktu 40 sekunžu parauga ņemšanu. Tā vietā, lai piespiestu sevi klepus, jūs varat izmantot dažāda garuma tiešsaistes klepus paraugus. Reģistrē kopā 10 līdz 12 dažāda garuma klepus paraugus.
Pēc klepus paraugu augšupielādes tagad iestatiet etiķeti uz "troksnis" un savāciet vēl 10 līdz 12 trokšņa paraugus.
Šie paraugi ir paredzēti moduļa apmācībai, nākamajās darbībās mēs apkoposim testa datus. Testa datiem jābūt vismaz 30% no apmācības datiem, tāpēc savāc 3 “trokšņa” un 4–5 “klepus” paraugus.
Datu vākšanas vietā jūs varat importēt mūsu datu kopu savā Edge Impulse kontā, izmantojot Edge Impulse CLI augšupielādētāju.
Lai instalētu CLI augšupielādētāju, vispirms lejupielādējiet un instalējiet Node.js savā klēpjdatorā. Pēc tam atveriet komandu uzvedni un ievadiet šādu komandu:
npm instalēt -g edge-impuls-cli
Tagad lejupielādējiet datu kopu (Dataset Link) un izvelciet failu projekta mapē. Atveriet komandu uzvedni un dodieties uz datu kopas atrašanās vietu un izpildiet tālāk norādītās komandas.
malu impulsa augšupielādētājs - tīrs mala impulsa augšupielādētājs - kategorijas apmācības apmācība / *. json mala impulsa augšupielādētāja kategoriju apmācības apmācība / *. cbor malu impulsa augšupielādētāja kategoriju testēšanas pārbaude / *. json edge-impulse-uploader - kategorijas testēšanas testēšana / *. cbor
Modeļa apmācība un kodeksa pielāgošana
Kad datu kopa ir gatava, tagad mēs izveidosim impulsu datiem. Par to dodieties uz lapu Izveidot impulsu.
Tagad lapā “ Izveidot impulsu” noklikšķiniet uz “ Pievienot apstrādes bloku” . Nākamajā logā atlasiet bloku Audio (MFCC). Pēc tam noklikšķiniet uz ' Pievienot mācību bloku' un atlasiet bloku Neironu tīkls (Keras). Pēc tam noklikšķiniet uz Saglabāt impulsu .
Nākamajā solī dodieties uz MFCC lapu un pēc tam noklikšķiniet uz ' Ģenerēt līdzekļus' . Tas ģenerēs MFCC blokus visiem mūsu audio logiem.
Pēc tam dodieties uz lapu “ NN klasifikators” un noklikšķiniet uz trim punktiem “ Neironu tīkla iestatījumu” augšējā labajā stūrī un atlasiet “ Pārslēgties uz režīmu Keras (eksperts)” .
Nomainiet oriģinālu ar šādu kodu un mainiet “ Minimālais ticamības novērtējums” uz “0,70”. Pēc tam noklikšķiniet uz pogas Sākt treniņu . Tas sāks apmācīt jūsu modeli.
importēt tensorflow kā tf no tensorflow.keras.models importēt secību no tensorflow.keras.layers importēt Dense, InputLayer, Dropout, Saplacināt, Pārveidot, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D no tensorflow.keras.erasimoptowflowers Adam importēt MaxNorm # modeļa arhitektūras modeli = Sequential () model.add (InputLayer (input_shape = (X_train.shape,), name = 'x_input')) model.add (Reshape ((int (X_train.shape / 13), 13, 1), input_shape = (X_train.shape,))) model.add (Conv2D (10, kernel_size = 5, activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, polsterējums = 'tas pats')) model.add (Conv2D (5, kernel_size = 5, activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (baseina izmērs = 2,polsterējums = 'tas pats')) model.add (saplacināt ()) model.add (blīvs (klases, aktivizēšana = 'softmax', nosaukums = 'y_pred', kodola_konstrukcija = MaxNorm (3))) # tas kontrolē mācīšanās ātruma izvēli = Ādams (lr = 0,005, beta_1 = 0,9, beta_2 = 0,999) # apmācīt neironu tīkla modeli. Apkopot (zaudējums = 'kategoriskā_krosentropija', optimizētājs = opt, metrika =) modelis.fit (X_train, Y_train, batch_size = 32, laikmeti = 9, validācijas_dati = (X_test, Y_test), izteiksmīgi = 2)verbose = 2)verbose = 2)
Pēc modeļa apmācības tas parādīs apmācības sniegumu. Man precizitāte bija 96,5% un zaudējumi 0,10, kas ir labi, lai turpinātu.
Kad mūsu klepus noteikšanas modelis ir gatavs, mēs šo modeli izvietosim kā Arduino bibliotēku. Pirms modeļa lejupielādes kā bibliotēku, varat pārbaudīt veiktspēju, dodoties uz lapu “ Live Classification ”.
Dodieties uz lapu Izvietošana un atlasiet Arduino bibliotēka . Tagad ritiniet uz leju un noklikšķiniet uz “Veidot”, lai sāktu procesu. Tas jūsu projektam izveidos Arduino bibliotēku.
Tagad pievienojiet bibliotēku savā Arduino IDE. Tam atveriet Arduino IDE un pēc tam noklikšķiniet uz Skice> Iekļaut bibliotēku> Add.ZIP bibliotēka.
Pēc tam ielādējiet piemēru, dodoties uz Fails> Piemēri> Jūsu projekta nosaukums - Edge Impulse> nano_ble33_sense_microphone.
Mēs veiksim dažas izmaiņas kodā, lai mēs varētu izdot trauksmes signālu, kad Arduino atklāj klepu. Lai to izdarītu, skaņas signāls tiek savienots ar Arduino, un ikreiz, kad tas atklāj klepu, gaismas diode mirgos trīs reizes.
Izmaiņas tiek veiktas void loop () funkcijās, kur tiek izdrukātas trokšņa un klepus vērtības. Sākotnējā kodā tas drukā gan etiķetes, gan to vērtības kopā.
par (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Mēs ietaupīsim gan trokšņa, gan klepus vērtības dažādos mainīgajos un salīdzināsim trokšņa vērtības. Ja trokšņa vērtība ir mazāka par 0,50, tas nozīmē, ka klepus vērtība ir lielāka par 0,50, un tā radīs skaņu. Cilpa () koda oriģinālu aizstājiet ar šo:
par (izmērs_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {sērijas.druka (rezultāts.klasifikācija.vērtība); float Data = rezultāts.klasifikācija.vērtība; if (Dati <0,50) {Serial.print ("Klepus konstatēts"); trauksme (); }}
Pēc izmaiņu veikšanas augšupielādējiet kodu savā Arduino. Atveriet sērijveida monitoru ar ātrumu 115200 bodu.
Tātad šādi var uzbūvēt klepus noteikšanas mašīnu, tā nav pārāk efektīva metode, lai atrastu aizdomās turētos COVID19, taču tā var labi darboties kādā pārpildītā vietā.
Pilns darba video ar bibliotēku un kodu ir norādīts zemāk: