Sisällysluettelo:

Taskukokoinen yskänilmaisin: 7 vaihetta
Taskukokoinen yskänilmaisin: 7 vaihetta

Video: Taskukokoinen yskänilmaisin: 7 vaihetta

Video: Taskukokoinen yskänilmaisin: 7 vaihetta
Video: Työskentelen Private Museum for the Rich and Famous. Kauhutarinoita. Kauhu. 2024, Joulukuu
Anonim
Taskukokoinen yskänilmaisin
Taskukokoinen yskänilmaisin

COVID19 on todella historiallinen pandemia, joka vaikuttaa koko maailmaan erittäin pahasti, ja ihmiset rakentavat paljon uusia laitteita taistellakseen sen kanssa. Olemme myös rakentaneet automaattisen desinfiointikoneen ja lämpöpistoolin kontaktittomaan lämpötilan seulontaan. Tänään rakennamme vielä yhden laitteen koronaviruksen torjumiseksi. Se on yskänilmaisujärjestelmä, joka erottaa melun ja yskääänen ja auttaa löytämään koronasta epäillyn. Se käyttää koneoppimistekniikoita siihen.

Tässä opetusohjelmassa aiomme rakentaa yskän tunnistusjärjestelmän käyttämällä Arduino 33 BLE Sense- ja Edge Impulse Studiota. Se voi erottaa normaalin taustamelun ja yskimisen reaaliaikaisessa äänessä. Harjoittelimme Edge Impulse Studiota yskimis- ja taustakohinanäytteiden aineistosta ja rakensimme erittäin optimoidun TInyML-mallin, joka voi havaita yskän äänen reaaliajassa.

Tarvikkeet

Laitteisto

  • Arduino 33 BLE Sense
  • LEDJumper
  • Johdot

Ohjelmisto

  • Edge Impulse Studio
  • Arduino IDE

Vaihe 1: Piirikaavio

Piirikaavio
Piirikaavio
Piirikaavio
Piirikaavio

Yllä oleva piirikaavio yskän havaitsemiseksi Arduino 33 BLE Sense -sovelluksella. Arduino 33 BLE: n huurtumisosaa ei ollut saatavilla, joten käytin Arduino Nano -laitetta, koska molemmilla on sama nasta.

LEDin positiivinen johto on kytketty Arduino 33 BLE sense -laitteen digitaaliseen nastaan 4 ja negatiivinen johto Arduinon GND -nastaan.

Vaihe 2: Tietojoukon luominen yskän tunnistuskoneelle

Tietojoukon luominen yskän tunnistuskoneelle
Tietojoukon luominen yskän tunnistuskoneelle

Kuten aiemmin mainittiin, käytämme Edge Impulse Studiota yskänilmaisumallimme kouluttamiseen. Tätä varten meidän on kerättävä tietojoukko, joka sisältää näytteitä tiedoista, jotka haluaisimme tunnistaa Arduinollamme. Koska tavoitteena on havaita yskä, sinun on kerättävä joitakin näytteitä siitä ja joitain muita näytteitä melun varalta, jotta se voi erottaa yskän ja muut melut. Luomme tietojoukon, jossa on kaksi luokkaa”yskä” ja “melu”. Jos haluat luoda tietojoukon, luo Edge Impulse -tili, vahvista tilisi ja aloita sitten uusi projekti. Voit ladata näytteitä matkapuhelimellasi, Arduino -kortillasi tai tuoda tietojoukon reunaimpulssitilillesi. Helpoin tapa ladata näytteet tilillesi on käyttää matkapuhelinta. Tätä varten sinun on yhdistettävä matkapuhelimesi Edge Impulseen. Yhdistä matkapuhelimesi napsauttamalla Laitteet ja sitten Yhdistä uusi laite.

Vaihe 3: Yhdistä matkapuhelimeen

Yhdistä matkapuhelimeen
Yhdistä matkapuhelimeen

Napsauta seuraavassa ikkunassa Käytä matkapuhelinta ja QR -koodi tulee näkyviin. Skannaa QR -koodi matkapuhelimellasi Google Lensin tai muun QR -koodiskannerisovelluksen avulla.

Tämä yhdistää puhelimesi Edge Impulse studioon.

Kun puhelin on yhdistetty Edge Impulse Studioon, voit nyt ladata näytteitä. Lataa näytteet napsauttamalla "Tietojen kerääminen". Kirjoita nyt tiedonkeruu -sivulle tarran nimi, valitse mikrofoni anturiksi ja syötä näytteen pituus. Aloita näytteenotto 40 sekunnin näytteestä napsauttamalla Aloita näytteenotto. Sen sijaan, että pakottaisit itsesi yskimään, voit käyttää eri pituisia online -yskänäytteitä. Tallenna yhteensä 10–12 eripituista yskänäytettä.

Vaihe 4:

Kuva
Kuva
Kuva
Kuva

Kun olet ladannut yskänäytteet, aseta nyt tarraksi "kohina" ja kerää vielä 10-12 kohinaäytettä.

Nämä näytteet on tarkoitettu moduulin kouluttamiseen, seuraavissa vaiheissa keräämme testitietoja. Testitietojen tulisi olla vähintään 30% harjoitustiedoista, joten kerää 3 kohina- ja 4-5 yskänäytettä. Tietojesi keräämisen sijaan voit tuoda tietojoukomme Edge Impulse -tilillesi Edgen avulla Impulse CLI Uploader. Jos haluat asentaa CLI Uploaderin, lataa ja asenna Node.js kannettavaan tietokoneeseen. Avaa sen jälkeen komentorivi ja kirjoita alla oleva komento:

npm install -g edge-impulse-cli

Lataa nyt tietojoukko (Dataset Link) ja purkaa tiedosto projektikansioosi. Avaa komentokehote ja siirry tietojoukon sijaintiin ja suorita alla olevat komennot:

reuna-impulssi-lataaja-puhdista-impulsi-lataaja-luokkakoulutus/*. json

reuna-impulssien lataaja-luokkakoulutus/*. cbor

reuna-impulssi-lataaja-luokan testaus testaus/*. json reuna-impulssin lataaja-luokan testaus testaus/*. cbor

Vaihe 5: Mallin kouluttaminen ja koodin säätäminen

Kun tietojoukko on valmis, luomme nyt impulssin tiedoille. Siirry tätä varten "Luo impulsi" -sivulle.

Napsauta nyt Luo impulssi -sivulla Lisää käsittelylohko. Valitse seuraavassa ikkunassa Audio (MFCC) -lohko. Napsauta sen jälkeen "Lisää oppimislohko" ja valitse neuroverkko (Keras). Napsauta sitten Tallenna impulssi.

Siirry seuraavassa vaiheessa MFCC -sivulle ja napsauta sitten "Luo ominaisuuksia". Se luo MFCC -lohkoja kaikille ääni -ikkunoillemme.

Siirry sen jälkeen "NN -luokittelija" -sivulle ja napsauta "Neuraaliverkon asetusten" oikeassa yläkulmassa olevia kolmea pistettä ja valitse "Vaihda Keras (asiantuntija) -tilaan".

Korvaa alkuperäinen seuraavalla koodilla ja vaihda vähimmäisluottamusluokitus arvoon 0,70. Napsauta sitten Aloita harjoitus -painiketta. Se alkaa kouluttaa malliasi.

tuoda tensorflow tffromina tensorflow.keras.models tuoda peräkkäin tensorflow.keras.layers -materiaalista tuoda tiheää, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D tensorflow.keras.oprasimensorista. MaxNorm # malliarkkitehtuurimalli = Järjestys () 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, aktivointi = 'relu', padding = 'sama', kernel_constraint = MaxNorm (3)))) model.add (AveragePooling2D (pool_size = 2, padding = 'same')) model.add (Conv2D (5, kernel_size = 5, aktivointi = 'relu', padding = 'sama', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, padding = 'same')) model.add (Flatten ()) model.add (Tiheä (luokat, aktivointi = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm) (3))) # tämä ohjaa oppimisprosenttia opt = Adam (lr = 0,005, beta_ 1 = 0,9, beta_2 = 0,999) # kouluttaa hermoverkon mallia. Koota (tappio = 'kategorinen_risteys, optimoija = opt, metrics = [' tarkkuus ']) model.fit (X_train, Y_train, batch_size = 32, epochs = 9), validation_data = (X_test, Y_test), verbose = 2)

Vaihe 6:

Mallin harjoittelun jälkeen se näyttää harjoitustuloksen. Minulle tarkkuus oli 96,5% ja tappio 0,10, joten on hyvä jatkaa.

Nyt kun yskänilmaisumallimme on valmis, otamme tämän mallin käyttöön Arduino -kirjastona. Ennen kuin lataat mallin kirjastoksi, voit testata suorituskykyä siirtymällä Live -luokittelu -sivulle. Siirry "Käyttöönotto" -sivulle ja valitse "Arduino -kirjasto". Vieritä nyt alas ja napsauta 'Rakenna' aloittaaksesi prosessin. Tämä rakentaa projektillesi Arduino -kirjaston.

Lisää nyt kirjasto Arduino IDE -laitteeseesi. Avaa sitä varten Arduino IDE ja napsauta sitten Luonnos> Sisällytä kirjasto> Lisää. ZIP -kirjasto. Lataa sitten esimerkki valitsemalla Tiedosto> Esimerkit> Projektisi nimi - Edge Impulse> 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 Arduinon kanssa ja aina kun se havaitsee yskän, LED vilkkuu kolme kertaa. Muutokset tehdään void loop -toimintoihin, joissa se tulostaa kohina- 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", result.classification [ix].label, result.classification [ix].arvo); } Tallennamme sekä melu- että yskäarvot eri muuttujiin ja vertaamme meluarvoja. Jos kohina -arvo laskee alle 0,50, yskäarvo on yli 0,50 ja se antaa äänen. Korvaa alkuperäinen silmukan () koodi seuraavasti: for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification [ix].value); float Data = tulos.luokitus [ix].arvo; if (Data <0,50) {Serial.print ("Yskä havaittu"); hälytys(); }} Kun olet tehnyt muutokset, lataa koodi Arduinoosi. Avaa sarjamonitori 115200 baudilla.

Joten yskänilmaisukone voidaan rakentaa tällä tavalla, se ei ole kovin tehokas tapa löytää COVID19 -epäiltyä, mutta se voi toimia hienosti joillakin tungosta alueilla.

Vaihe 7: Koodi

Löydät oheisen tiedoston, Ja jos pidit siitä, älä unohda äänestää minua alla olevassa kilpailussa.

Suositeltava: