- Komponente potrebne
- Kružni dijagram
- Stvaranje skupa podataka za stroj za otkrivanje kašlja
- Obuka modela i podešavanje koda
COVID19 je stvarno povijesna pandemija koja jako loše utječe na cijeli svijet i ljudi grade puno novih uređaja za borbu s njim. Također smo izgradili automatski stroj za dezinfekciju i termalnu pušku za beskontaktno provjeravanje temperature. Danas ćemo izgraditi još jedan uređaj za pomoć u borbi s koronavirusom. 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 se koristiti tehnike strojnog učenja.
U ovom ćemo uputstvu 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 o uzorcima kašlja i pozadinske buke te za izradu visoko optimiziranog TInyML modela koji može detektirati kašalj u stvarnom vremenu.
Komponente potrebne
Hardver
- Arduino 33 BLE Sense
- LED
- Jumper žice
Softver
- Edge Impulse Studio
- Arduino IDE
Obradili smo detaljan vodič o Arduino 33 BLE Senseu.
Kružni dijagram
Dijagram spojeva za otkrivanje kašlja pomoću Arduino 33 BLE Sense-a dan je u nastavku. Fritzing dio za Arduino 33 BLE nije bio dostupan, pa sam koristio Arduino Nano jer oba imaju isti pin-out.

Pozitivni kabel LED-a spojen je na digitalni pin 4 arduino 33 BLE smisla, a negativni kabel je spojen na GND pin Arduina.

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 moći prepoznati na našem Arduinu. Budući da je cilj otkriti kašalj, morat ćete prikupiti neke uzorke tog i nekih drugih uzoraka za buku, kako bi mogao razlikovati kašalj od ostalih buka.
Stvorit ćemo skup podataka s dvije klase "kašalj" i "buka". Da biste stvorili skup podataka, stvorite Edge Impulse račun, potvrdite svoj račun i započnite novi projekt. Uzorke možete učitati putem mobitela, ploče Arduino ili možete uvesti skup podataka na svoj rubni impulsni račun. Uzorke je najlakši način učitati na svoj račun pomoću mobilnog telefona. Za to morate povezati svoj mobitel s Edge Impulseom.
Da biste povezali svoj mobilni telefon, kliknite " Uređaji ", a zatim " Poveži novi uređaj" .

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 Lens ili druge aplikacije za skeniranje QR koda.
Ovo će povezati vaš telefon s Edge Impulse studijem.

Kada je vaš telefon povezan s Edge Impulse Studioom, sada možete učitati uzorke. Da biste učitali uzorke, kliknite " Prikupljanje podataka" . Sada na stranici Prikupljanje podataka unesite naziv naljepnice, odaberite mikrofon kao senzor i unesite duljinu uzorka. Kliknite na " Počni uzorkovanje" da biste započeli uzorkovanje uzorka od 40 sekundi. Umjesto da se prisiljavate na kašljanje, možete koristiti internetske uzorke kašlja različitih duljina. Zabilježite ukupno 10 do 12 uzoraka kašlja različite duljine.

Nakon učitavanja uzoraka kašlja, sada postavite naljepnicu na 'šum' i sakupite još 10 do 12 uzoraka buke.

Ovi uzorci su za modul Obuka, u sljedećim ćemo koracima prikupljati podatke o ispitivanju. Podaci o testovima trebaju biti najmanje 30% podataka o treningu, pa prikupite 3 uzorka „buke“ i 4 do 5 uzoraka „kašlja“.
Umjesto prikupljanja podataka, možete uvesti naš skup podataka na svoj Edge Impulse račun pomoću programa Edge Impulse CLI.
Da biste instalirali CLI Uploader, prvo preuzmite i instalirajte Node.js na prijenosno računalo. Nakon toga otvorite naredbeni redak i unesite donju naredbu:
npm instaliraj -g edge-impulse-cli
Sada preuzmite skup podataka (Link skupa podataka) i izvucite datoteku u mapu projekta. Otvorite naredbeni redak i dođite do mjesta skupa podataka i pokrenite naredbe u nastavku:
edge-impulse-uploader --čisti rub-impulse-uploader --kategorija treninga / *. json edge-impulse-uploader --kategorija treninga / *. cbor edge-impulse-uploader --kategorija testiranje testiranje / *. json edge-impulse-uploader - testiranje kategorije ispitivanja / *. cbor
Obuka modela i podešavanje koda
Kako je skup podataka spreman, sada ćemo stvoriti impuls za podatke. Za to idite na stranicu " Stvaranje impulsa ".

Sada na stranici ' Stvaranje impulsa' kliknite na ' Dodaj blok obrade' . U sljedećem prozoru odaberite blok Audio (MFCC). Nakon toga kliknite na ' Dodaj blok učenja' i odaberite blok Neural Network (Keras). Zatim kliknite na " Spremi impuls" .

U sljedećem koraku idite na stranicu MFCC, a zatim kliknite na ' Generiraj značajke' . Stvorit će MFCC blokove za sve naše audio prozore.

Nakon toga idite na stranicu " NN Classifier" i kliknite tri točke u gornjem desnom kutu " Postavke neuronske mreže" i odaberite " Prebaci se u Keras (stručni) način" .

Zamijenite izvornik sljedećim kodom i promijenite " Minimalnu ocjenu pouzdanosti" u "0,70". Zatim kliknite gumb " Pokreni trening" . Počet će 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 Adamke tasor import 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 (veličina_dimenzije bazena = 2,padding = 'same')) model.add (Flatten ()) model.add (Gust (klase, aktivacija = '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) # uvježbavanje modela neuronske mreže.compile (gubitak = 'categorical_crossentropy', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, epohe = 9, podaci o potvrdi = (X_test, Y_test), detaljno = 2)opširno = 2)opširno = 2)
Nakon treninga modela pokazat će izvedbu treninga. Za mene je točnost bila 96,5%, a gubitak 0,10 što je dobro za nastavak.

Sada kada je naš model za otkrivanje kašlja spreman, primijenit ćemo ga kao Arduino knjižnicu. Prije preuzimanja modela kao knjižnice, izvedbu možete testirati odlaskom na stranicu ' Klasifikacija uživo '.
Idite na stranicu " Implementacija " i odaberite " Arduino Library" . Sada se pomaknite prema dolje i kliknite na 'Build' da biste započeli postupak. 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 Skica> Uključi biblioteku> Dodaj.ZIP biblioteku.
Zatim učitajte primjer tako da otvorite 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. Zbog toga je zujalica povezana s Arduinom i kad god otkrije kašalj, LED će trepnuti tri puta.
Promjene se vrše u funkcijama void loop () gdje se ispisuju vrijednosti buke i kašlja. U izvornom kodu ispisuju se i naljepnice i njihove vrijednosti zajedno.
za (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.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 stvorit će zvuk. Zamijenite izvorni kod za loop () ovim:
za (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); plutajuće Podaci = rezultat.klasifikacija.value; if (Podaci <0,50) {Serial.print ("Otkriven kašalj"); alarm(); }}
Nakon što izvršite promjene, prenesite kôd u svoj Arduino. Otvorite serijski monitor na 115200 baud.

Dakle, ovako se može napraviti stroj za otkrivanje kašlja, to nije vrlo učinkovita metoda za pronalaženje osumnjičenih za COVID19, ali može lijepo raditi u nekom prepunom prostoru.
Kompletni radni video s bibliotekom i kodom dan je u nastavku:
