- Tarvittavat komponentit
- Piirikaavio
- Arduinon puheentunnistuksen tietojoukon luominen
- Mallin kouluttaminen
- Arduino-koodi Arduino-äänentunnistukseen
Puheentunnistustekniikka on erittäin hyödyllinen automaatiossa, joka ei vain anna sinun hallita laitteita handsfree-ohjelmassa, vaan lisää myös järjestelmää. Puheentunnistettujen laitteiden valmistamisen lisäksi puheentunnistus tarjoaa myös merkittävää apua erilaisista vammaisista kärsiville.
Aikaisemmissa projekteissa rakensimme Arduino-pohjaisen teksti puheeksi (TTS) -muuntimen ja ääniohjatut valot. Nyt tässä projektissa aiomme käyttää koneoppimista kouluttaaksemme puheentunnistusmallin käyttämällä Edge Impulse Studiota, jossa on kolme komentoa eli LIGHT ON , LIGHT OFF ja NOISE . Edge Impulse on online-koneoppimisalusta, jonka avulla kehittäjät voivat luoda uuden sukupolven älykkäitä laiteratkaisuja sulautetun koneoppimisen avulla. Aiemmin käytimme Edge-impulssistudiota erottamaan yskä- ja melua.
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
Piirikaavio tälle Arduinoa käyttävälle äänentunnistukselle on annettu alla. Arduino 33 BLE: n fritzing-osa ei ollut käytettävissä, joten käytin Arduino Nanoa, koska molemmilla on sama pinout.
LEDin positiivinen johto on kytketty Arduino 33 BLE sense -tulostimen digitaaliseen nastaan 5 ja negatiivinen johto Arduinon GND-nastaan.
Arduinon puheentunnistuksen tietojoukon luominen
Tässä Edge Impulse Studiota käytetään puheentunnistusmallimme kouluttamiseen. Mallin kouluttaminen Edge Impulse Studiossa on samanlainen kuin koneoppimismallien kouluttaminen muissa koneoppimisjärjestelmissä. Koulutusta varten koneoppimismallin ensimmäinen vaihe on kerätä tietojoukko, jossa on näytteet tiedoista, jotka haluaisimme tunnistaa.
Koska tavoitteemme on ohjata LEDiä äänikomennolla, meidän on kerättävä ääninäytteet kaikista komennoista ja melusta, jotta se pystyy erottamaan äänikomennot ja muut äänet.
Luomme tietojoukon, jossa on kolme luokkaa “ LED ON ”, “ LED OFF ” ja “ noise ”. 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. Liitä matkapuhelin Edge Impulsen kanssa.
Yhdistä matkapuhelin napsauttamalla Laitteet ja napsauttamalla sitten Yhdistä uusi laite .
Napsauta seuraavassa ikkunassa Käytä matkapuhelinta , ja QR-koodi tulee näkyviin. Skannaa QR-koodi matkapuhelimellasi tai kirjoita QR-koodissa annettu URL-osoite.
Tämä yhdistää puhelimesi Edge Impulse -studioon.
Kun puhelimesi on liitetty Edge Impulse Studioon, voit nyt ladata näytteesi. Lataa näytteet napsauttamalla Tiedonkeruu-kohtaa . Kirjoita nyt Tiedonkeruu-sivulle tarran nimi, valitse mikrofoni anturiksi ja kirjoita näytteen pituus. Napsauta Käynnistä näytteenotto , laite tallentaa 2 sekunnin näytteen. Tallenna yhteensä 10–12 ääninäytettä eri olosuhteissa.
Kun olet ladannut näytteet ensimmäiselle luokalle, aseta nyt muutostarra ja kerää näytteet ' light off' ja 'noise' -luokalle.
Nämä näytteet on tarkoitettu moduulin kouluttamiseen, seuraavissa vaiheissa keräämme testitiedot. Testitulosten tulisi olla vähintään 30% harjoitustiedoista, joten kerää 4 näytettä melua ja 4-5 näytettä 'valo päällä' ja 'valo pois'.
Mallin kouluttaminen
Kun tietojoukko on valmis, voimme nyt luoda impulssin datalle. Siitä siirry Luo impulssi -sivulle. Muuta 1000 ms: n ikkunakoon oletusasetukseksi 1200 ms ja 500 ms: n ikkunaksi 50 ms. Tämä tarkoittaa, että tietojamme käsitellään 1,2 sekuntia kerrallaan, joka 58 ms alkaen.
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)
Mallin harjoittamisen jälkeen se näyttää harjoituksen suorituskyvyn. Minulle tarkkuus oli 81,1% ja tappio 0,45, mikä ei ole ihanteellinen suorituskyky, mutta voimme jatkaa sitä. Voit parantaa mallisi suorituskykyä luomalla laajan tietojoukon.
Nyt kun puheentunnistusmallimme on valmis, otamme tämän mallin käyttöön Arduino-kirjastona. Ennen mallin lataamista kirjastona voit testata suorituskyvyn siirtymällä Live Classification -sivulle. Live-luokitteluominaisuuden avulla voit testata mallia sekä tietojoukon mukana toimitetuilla olemassa olevilla testaustiedoilla että suoratoistamalla äänitietoja matkapuhelimestasi.
Testaa tiedot puhelimellasi valitsemalla puhelimessasi Vaihda luokitustilaan .
Nyt voit ladata mallin Arduino-kirjastona siirtymällä ' Käyttöönotto ' -sivulle ja valitsemalla ' 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 - Edge Impulse> nano_ble33_sense_microphone
Arduino-koodi Arduino-äänentunnistukseen
Tässä on tehty joitain muutoksia ohjaamaan LEDiä äänikomennoilla.
Teemme joitain muutoksia void-silmukkaan (), jossa se tulostaa komentojen todennäköisyyden. Alkuperäisessä koodissa se tulostaa kaikki tarrat ja 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); }
LEDin hallitsemiseksi meidän on tallennettava kaikki komentotodennäköisyydet kolmeen eri muuttujaan, jotta voimme laittaa niihin ehdolliset lauseet. Joten uuden koodin mukaan, jos '' valo päällä '' -komennon todennäköisyys on yli 0,50, se syttyy LED- valon ja jos '' valo pois '' -komennon todennäköisyys on yli 0,50, niin kuin se sammuttaa LEDin.
for (koko_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {melu = tulos.luokitus.arvo; Serial.println ("Melu:"); Sarja.println (melu); } (koko_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = tulos.luokitus.arvo; Serial.println ("Valo ei pala:"); Sarjaprintti (valovirta); } valo = 1- (melu + valaistus); Serial.println ("Valo palaa:"); Sarjaprintti (lighton); if (valonheitin> 0,50) {digitalWrite (led, HIGH); } if (valaistus> 0,50) {digitalWrite (led, LOW); }
Kun olet tehnyt muutokset, lataa koodi Arduinoon. Avaa sarjamonitori nopeudella 115200 baudia.
Näin voit rakentaa puheentunnistuksen Arduinolla ja antaa komentoja laitteiden käyttämiseksi.
Täydellinen toimiva video, jossa on kirjasto ja koodi, on annettu alla.