Sadržaj:
- Pribor
- Korak 1: Dijagram kruga
- Korak 2: Stvaranje skupa podataka za stroj za otkrivanje kašlja
- Korak 3: Povežite se s mobilnim telefonom
- Korak 4:
- Korak 5: Obuka modela i dotjerivanje koda
- Korak 6:
- Korak 7: Kodirajte
Video: Džepni detektor kašlja: 7 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:32
COVID19 je doista povijesna pandemija koja jako loše pogađa cijeli svijet i ljudi grade mnogo novih uređaja za borbu protiv njega. Također smo izgradili automatski stroj za dezinfekciju i termalni pištolj za beskontaktno mjerenje temperature. Danas ćemo izgraditi još jedan uređaj za borbu protiv koronavirusa. 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 koristiti tehnike strojnog učenja.
U ovom ćemo vodiču 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 uzoraka kašlja i pozadinske buke te za izradu visoko optimiziranog TInyML modela koji može detektirati zvuk kašlja u stvarnom vremenu.
Pribor
Hardver
- Arduino 33 BLE Sense
- LEDJumper
- Žice
Softver
- Edge Impulse Studio
- Arduino IDE
Korak 1: Dijagram kruga
Dijagram sklopa za otkrivanje kašlja pomoću Arduina 33 BLE Sense dat je gore. Fritzing dio za Arduino 33 BLE nije bio dostupan, pa sam koristio Arduino Nano jer oba imaju isti pin-out.
Pozitivni vod LED diode spojen je na digitalni pin 4 Arduino 33 BLE osjetnika, a negativni vod spojen je na GND pin Arduina.
Korak 2: 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 prepoznati na našem Arduinu. Budući da je cilj otkriti kašalj, morat ćete prikupiti neke uzorke tog i nekih drugih uzoraka zbog buke, tako da može razlikovati kašalj i druge šumove. Napravit ćemo skup podataka s dvije klase "kašalj" i "buka". Da biste izradili skup podataka, stvorite Edge Impulse račun, potvrdite svoj račun, a zatim pokrenite novi projekt. Uzorke možete učitati pomoću mobilnog telefona, Arduino ploče ili možete uvesti skup podataka u svoj rubni impulsni račun. Najjednostavniji način učitavanja uzoraka na vaš račun je korištenje vašeg mobilnog telefona. Za to morate povezati svoj mobilni telefon s Edge Impulse. Da biste povezali svoj mobilni telefon, kliknite "Uređaji", a zatim "Poveži novi uređaj".
Korak 3: Povežite se s mobilnim telefonom
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 objektiva ili druge aplikacije za skeniranje QR koda.
Ovo će povezati vaš telefon s Edge Impulse studijem.
Kad je vaš telefon povezan s Edge Impulse Studio, sada možete učitati svoje uzorke. Za učitavanje uzoraka kliknite na "Prikupljanje podataka". Sada na stranici Prikupljanje podataka unesite naziv naljepnice, odaberite mikrofon kao senzor i unesite duljinu uzorka. Pritisnite "Pokreni uzorkovanje" da biste započeli uzorkovanje uzorka od 40 sekundi. Umjesto da se prisiljavate na kašalj, možete koristiti internetske uzorke kašlja različite duljine. Snimite ukupno 10 do 12 uzoraka kašlja različite duljine.
Korak 4:
Nakon što ste učitali uzorke kašlja, sada postavite oznaku na 'šum' i prikupite još 10 do 12 uzoraka buke.
Ovi uzorci služe za obuku modula, u sljedećim koracima prikupit ćemo podatke o testiranju. Podaci o testiranju trebali bi činiti najmanje 30% podataka o obuci, stoga prikupite 3 uzorka "buke" i 4 do 5 uzoraka "kašlja". Umjesto prikupljanja vaših podataka, možete uvesti naš skup podataka u svoj račun Edge Impulse koristeći Edge Impulse CLI Uploader. Da biste instalirali CLI Uploader, najprije preuzmite i instalirajte Node.js na svoje prijenosno računalo. Nakon toga otvorite naredbeni redak i unesite naredbu ispod:
npm install -g edge-impulse-cli
Sada preuzmite skup podataka (Veza na skup podataka) i izdvojite datoteku u mapu projekta. Otvorite naredbeni redak i idite na lokaciju skupa podataka i pokrenite naredbe u nastavku:
edge-impulse-uploader --cleanedge-impulse-uploader-trening za kategoriju/*. json
edge-impulse-uploader-trening za kategorijsku obuku/*. cbor
edge-impulse-uploader-testiranje testiranja kategorije/*. json edge-impulse-uploader-testiranje testiranja kategorije/*. cbor
Korak 5: Obuka modela i dotjerivanje koda
Kako je skup podataka spreman, sada ćemo stvoriti impuls za podatke. Za to idite na stranicu "Stvori impuls".
Sada na stranici 'Create impulse' kliknite na 'Add a processing block'. U sljedećem prozoru odaberite audio (MFCC) blok. Nakon toga kliknite ‘Dodaj blok za učenje’ i odaberite blok Neural Network (Keras). Zatim kliknite "Spremi impuls".
U sljedećem koraku idite na stranicu MFCC, a zatim kliknite na "Generiraj značajke". On će generirati MFCC blokove za sve naše audio prozore.
Nakon toga idite na stranicu 'NN Classifier' i kliknite na tri točke u gornjem desnom kutu 'Postavke neuronske mreže' i odaberite 'Prebaci na način rada Keras (stručni)'.
Zamijenite izvornik sljedećim kodom i promijenite "Minimalnu ocjenu pouzdanosti" na "0,70". Zatim kliknite gumb ‘Započni obuku’. Počet će trenirati vaš model.
uvoziti tensorflow kao tffrom tensorflow.keras.models uvoz Sekvencijalno iz tensorflow.keras.layers uvoziti Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D iz tensorflow.keras.optimizers MaxNorm # model arhitekture model = 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 = 'isto', 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))) # ovo kontrolira brzinu učenja opt = Adam (lr = 0,005, beta_ 1 = 0,9, beta_2 = 0,999) # trenirajte model neuronske mreže.compile (loss = 'kategorična_krossentropija', optimizer = opt, metrics = ['točnost']) model.fit (X_train, Y_train, batch_size = 32, epohe = 9, podaci o provjeri valjanosti = (X_test, Y_test), detaljno = 2)
Korak 6:
Nakon vježbanja modela prikazat će se izvedba treninga. Za mene je točnost bila 96,5%, a gubitak 0,10 što je dobro za nastaviti.
Budući da je naš model otkrivanja kašlja spreman, ovaj ćemo model primijeniti kao Arduino knjižnicu. Prije preuzimanja modela kao biblioteke, možete testirati performanse tako što ćete otići na stranicu "Klasifikacija uživo". Idite na stranicu "Raspoređivanje" i odaberite "Arduino knjižnica". Sada se pomaknite prema dolje i kliknite "Izgradi" za početak procesa. 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 Sketch> Include Library> Add. ZIP library. Zatim učitajte primjer tako da odete na 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. U tu svrhu, zujalica je povezana s Arduinom i kad god otkrije kašalj, LED će treptati tri puta. Promjene se vrše u funkcijama void loop () gdje ispisuje vrijednosti buke i kašlja. U izvornom kodu ispisuje naljepnice i njihove vrijednosti zajedno. for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf (" %s: %.5f / n", result.classification [ix].label, result.classification [ix].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 dat će zvuk. Zamijenite izvorni kod za loop () ovim: for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification [ix].value); float Podaci = rezultat.klasifikacija [ix].vrijednost; if (Podaci <0,50) {Serial.print ("Otkriven kašalj"); alarm(); }} Nakon što unesete promjene, prenesite kôd u svoj Arduino. Otvorite serijski monitor na 115200 bauda.
Dakle, ovako se može izgraditi stroj za otkrivanje kašlja, to nije jako učinkovita metoda za pronalaženje sumnjivaca na COVID19, ali može lijepo raditi u nekim gužvama.
Korak 7: Kodirajte
Molim vas nađite dokument u privitku, A ako vam se svidjelo, ne zaboravite glasati za mene na donjem natjecanju.
Preporučeni:
Džepni sat "uradi sam": 9 koraka
Uradi sam džepni sat: U ovom užurbanom svijetu praćenje vremena potrebno je za bolje performanse i biti hobist zašto ne biste napravili uređaj za praćenje vremena. Zahvaljujući tehnologiji postoje uređaji koji se zovu 'sat' ali! zadovoljstvo kad radite sami
DŽEPNI MUZIKA: 6 koraka
DŽEPNI MUZIČKI IGRAČ: U ovom uputstvu naučit ćete kako napraviti vlastiti džepni glazbeni player s DIY -om s preskakanjem reprodukcije, a druge značajke mogu koristiti arduino pro mini ili arduino nano
Uradi sam džepni alarm protiv krađe!: 3 koraka
Uradi sam džepni alarm protiv krađe!: JE LI netko uštipnuo vaše stvari i ne možete pronaći tko je to? Ne znate tko je to? Onda je ovo uputstvo za vas da ih ulovite! u ovom uputstvu pokazat ću vam kako napraviti džepni alarm za uljeza
Džepni zvučnik: 3 koraka
Džepni zvučnik: Nosite ga bilo gdje! Glazba koja je u pokretu! Pozdrav svima u ovom uputstvu (koje mi je prvo) pokazat ću vam kako sam napravio ovaj džepni zvučnik
IOT detektor dima: Ažurirajte postojeći detektor dima s IOT -om: 6 koraka (sa slikama)
IOT detektor dima: Ažurirajte postojeći detektor dima s IOT -om: Popis suradnika, izumitelj: Tan Siew Chin, Tan Yit Peng, Tan Wee Heng Nadzornik: dr. Chia Kim Seng Zavod za mehatroničko i robotsko inženjerstvo, Fakultet elektrotehnike i elektronike, Sveučilište Tun Hussein Onn Malezija. Distributer