- Tarvittavat komponentit
- Piirikaavio
- Tietojoukon luominen yskänpaljastuskoneelle
- Mallin kouluttaminen ja koodin muokkaaminen
COVID19 on todellakin historiallinen pandemia, joka vaikuttaa erittäin pahasti koko maailmaan, ja ihmiset rakentavat paljon uusia laitteita taistellakseen sen kanssa. Olemme myös rakentaneet automaattisen desinfiointikoneen ja lämpöpistoolin kosketuksettomaan lämpötilan seulontaan. Tänään rakennamme vielä yhden laitteen auttamaan taistelussa koronaviruksen kanssa. Se on yskänhavaitsemisjärjestelmä, joka voi erottaa melun ja yskän äänen ja auttaa löytämään Coronasta epäillyn. Siinä käytetään koneoppimistekniikoita.
Tässä opetusohjelmassa aiomme rakentaa yskänvalvontajärjestelmän käyttämällä Arduino 33 BLE Sense- ja Edge Impulse Studiota. Se voi erottaa normaalin taustamelun ja yskimisen reaaliaikaisessa äänentoistossa. Käytimme Edge Impulse Studiota kouluttamaan yskän ja taustamelunäytteiden joukkoa ja rakentamaan erittäin optimoidun TInyML-mallin, joka pystyy havaitsemaan yskän äänen reaaliajassa.
Tarvittavat komponentit
Laitteisto
- Arduino 33 BLE Sense
- LED
- Neulalangat
Ohjelmisto
- Edge Impulse Studio
- Arduino IDE
Olemme käsittäneet yksityiskohtaisen opetusohjelman Arduino 33 BLE Sense -sovelluksesta.
Piirikaavio
Kytkentäkaavio yskän havaitsemiseksi Arduino 33 BLE Sense -sovelluksella on annettu alla. Arduino 33 BLE: n fritzing-osa ei ollut käytettävissä, joten käytin Arduino Nanoa, koska molemmilla on sama nasta.
LEDin positiivinen johto on kytketty Arduino 33 BLE sense -järjestelmän digitaaliseen nastaan 4 ja negatiivinen johto Arduinon GND-nastaan.
Tietojoukon luominen yskänpaljastuskoneelle
Kuten aiemmin mainittiin, käytämme Edge Impulse Studiota yskän havaitsemismallimme kouluttamiseen. Tätä varten meidän on kerättävä tietojoukko, jolla on näytteet tiedoista, jotka haluaisimme tunnistaa Arduinossa. Koska tavoitteena on havaita yskä, sinun on kerättävä joitain näytteitä siitä ja joitain muita näytteitä melua varten, jotta se voi erottaa yskän ja muut äänet.
Luomme tietojoukon, jossa on kaksi luokkaa "yskä" ja "melu". Luo tietojoukko luomalla Edge Impulse -tili, vahvistamalla tilisi ja aloittamalla sitten uusi projekti. Voit ladata näytteet matkapuhelimellasi, Arduino-kortillasi tai tuoda tietojoukon reunaimpulssitilillesi. Helpoin tapa ladata näytteet tilillesi on matkapuhelimesi. Tätä varten sinun on yhdistettävä matkapuhelimesi Edge Impulsella.
Yhdistä matkapuhelimesi napsauttamalla Laitteet ja sitten Yhdistä uusi laite .
Napsauta seuraavassa ikkunassa Käytä matkapuhelinta , ja QR-koodi tulee näkyviin. Skannaa QR-koodi matkapuhelimellasi Google Lensillä tai muulla QR-koodinlukijaohjelmalla.
Tämä yhdistää puhelimesi Edge Impulse -studioon.
Kun puhelimesi on liitetty Edge Impulse Studioon, voit nyt ladata näytteesi. Lataa näytteet napsauttamalla Tiedonkeruu . Kirjoita nyt Tiedonkeruu-sivulle tarran nimi, valitse mikrofoni anturiksi ja kirjoita näytteen pituus. Napsauta Käynnistä näytteenotto aloittaaksesi 40 sekunnin näytteenoton. Sen sijaan, että pakottaisit itsesi yskään, voit käyttää eripituisia online-yskänäytteitä. Kirjaa yhteen 10–12 eripituista yskänäytettä.
Kun olet ladannut yskänäytteet, aseta nyt tunnisteeksi 'melu' ja kerää vielä 10 - 12 melunäytettä.
Nämä näytteet on tarkoitettu moduulin kouluttamiseen, seuraavissa vaiheissa keräämme testitiedot. Testitulosten tulisi olla vähintään 30% harjoittelutiedoista, joten kerää 3 näytettä melusta ja 4-5 näytettä yskästä.
Tietojesi keräämisen sijaan voit tuoda tietojoukkomme Edge Impulse -tilillesi Edge Impulse CLI Uploader -sovelluksella.
Asenna CLI Uploader ensin lataamalla ja asentamalla Node.js kannettavaan tietokoneeseen. Sen jälkeen avaa komentokehote ja kirjoita seuraava komento:
npm asenna -g reuna-impulssi-cli
Lataa nyt tietojoukko (Dataset Link) ja pura tiedosto projektikansioon. Avaa komentokehote ja siirry tietojoukon sijaintiin ja suorita seuraavat komennot:
reuna-impulssi-lataaja - puhdas reuna-impulssi-lataaja - luokan harjoittelu / *. json reuna-impulssi-lataaja - luokan harjoittelu / *. cbor reuna-impulssi-lataaja - luokan testaus / *. edge-impulse-uploader - luokan testaustestaus / *. cbor
Mallin kouluttaminen ja koodin muokkaaminen
Kun tietojoukko on valmis, luomme nyt impulssin datalle. Tätä varten siirry Luo impulssi -sivulle.
Napsauta nyt Luo impulssi -sivulla Lisää käsittelylohko . Valitse seuraavassa ikkunassa Ääni (MFCC) -lohko. Napsauta sen jälkeen ' Lisää oppimislohko' ja valitse Neural Network (Keras) -lohko. Napsauta sitten Tallenna impulssi .
Siirry seuraavassa vaiheessa MFCC-sivulle ja napsauta sitten Luo ominaisuudet . Se tuottaa MFCC-lohkot kaikille ääniikkunoillemme.
Sen jälkeen siirry ' NN Classifier' -sivulle ja napsauta kolmea pistettä ' Neural Network settings' oikeassa yläkulmassa ja valitse ' Switch to Keras (expert) mode' .
Korvaa alkuperäinen alkuperäisellä koodilla ja vaihda ' Minimi luotettavuusluokitus' arvoon '0,70'. Napsauta sitten Aloita harjoittelu -painiketta. Se alkaa kouluttaa malliasi.
tuo tensorflow tf-tiedostona tensorflow.keras.models -tuotteesta peräkkäin osoitteesta tensorflow.keras.layers tuovat Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D from tensorflow.keras.erasimoptowflowers Adam tuo MaxNorm # malli -arkkitehtuurimalli = 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, pehmuste = 'sama')) model.add (Conv2D (5, kernel_size = 5, activation = 'relu', padding = 'sama', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2,padding = 'sama')) malli.add (Tasaa ()) malli.add (Tiheä (luokat, aktivointi = 'softmax', nimi = 'y_pred', kernel_constraint = MaxNorm (3))) # tämä ohjaa oppimisnopeuden valintaa = Adam (lr = 0,005, beeta_1 = 0,9, beta_2 = 0,999) # kouluta hermoverkkomallia. Koota (loss = 'kategorinen_ristikopio', optimoija = opt, metriikka =) malli. Sovi (X_train, Y_train, batch_size = 32, aikakaudet = 9, validointitiedot = (X_test, Y_test), sanallinen = 2)verbose = 2)verbose = 2)
Kun malli on koulutettu, se näyttää harjoittelun suorituskyvyn. Minulle tarkkuus oli 96,5% ja tappio 0,10, mikä on hyvä edetä.
Nyt kun yskän havaitsemismallimme on valmis, otamme tämän mallin käyttöön Arduino-kirjastona. Ennen lataamista malliin kirjasto, voit testata suorituskykyä menemällä ' live Classification ' sivulla.
Mene Käyttöönotto- sivulle ja valitse Arduino-kirjasto . Selaa nyt alaspäin ja napsauta 'Rakenna' aloittaaksesi prosessin. Tämä rakentaa projektiisi Arduino-kirjaston.
Lisää nyt kirjasto Arduino IDE -laitteeseesi. Sitä varten avaa Arduino IDE ja napsauta sitten Luonnos> Sisällytä kirjasto> Add.ZIP-kirjasto.
Lataa sitten esimerkki valitsemalla Tiedosto> Esimerkit> Projektisi nimi - Reuna-impulssi> nano_ble33_sense_microphone.
Teemme joitain muutoksia koodiin, jotta voimme antaa hälytysäänen, kun Arduino havaitsee yskän. Tätä varten summeri on liitetty Arduinoon ja aina, kun se havaitsee yskän, LED vilkkuu kolme kertaa.
Muutokset tehdään void loop () -toiminnoissa, joissa se tulostaa melu- ja yskäarvot. Alkuperäisessä koodissa se tulostaa sekä tarrat että niiden arvot yhdessä.
for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", tulos.luokittelu.etiketti, tulos.luokitus.arvo); }
Aiomme tallentaa sekä melu- että yskäarvot eri muuttujiin ja vertailla meluarvoja. Jos meluarvo laskee alle 0,50, yskän arvo on yli 0,50 ja se antaa äänen. Korvaa loop () -koodin alkuperäinen koodi tällä:
for (koko_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Sarja.tulos (tulos.luokittelu.arvo); float Data = tulos.luokitus.arvo; if (Data <0,50) {Sarja.tulos ("Yskä havaittu"); hälytys(); }}
Kun olet tehnyt muutokset, lataa koodi Arduinoon. Avaa sarjamonitori nopeudella 115200 baudia.
Joten näin voidaan rakentaa yskän havaitsemislaite, se ei ole kovin tehokas tapa löytää mitään COVID19-epäiltyä, mutta se voi toimia hyvin joillakin ahtailla alueilla.
Täydellinen toimiva video, jossa on kirjasto ja koodi, on annettu alla: