- Nepieciešamās sastāvdaļas
- Ķēdes shēma
- Arduino runas atpazīšanas datu kopas izveide
- Modeļa apmācība
- Arduino balss atpazīšanas kods
Runas atpazīšanas tehnoloģija ir ļoti noderīga automatizācijā, kas ļauj ne tikai brīvroku režīmā kontrolēt ierīces, bet arī papildina sistēmas drošību. Papildus balss kontrolētu sīkrīku izgatavošanai runas atpazīšana sniedz arī nozīmīgu palīdzību cilvēkiem, kuri cieš no dažādiem traucējumiem.
Iepriekšējos projektos mēs uzbūvējām Arduino bāzes teksta uz runu (TTS) pārveidotāju un balss vadāmus lukturus. Tagad šajā projektā mēs izmantosim mašīnmācīšanos, lai apmācītu runas atpazīšanas modeli, izmantojot Edge Impulse Studio ar trim komandām, ti, " LIGHT ON" , " LIGHT OFF" un " NOISE ". Edge Impulse ir tiešsaistes mašīnmācīšanās platforma, kas ļauj izstrādātājiem izveidot nākamās paaudzes viedo ierīču risinājumus ar iegulto mašīnmācīšanos. Iepriekš izmantojām Edge impulsu studiju, lai atšķirtu klepus un trokšņa skaņas.
Nepieciešamās sastāvdaļas
Aparatūra
- Arduino 33 BLE Sense
- LED
- Džemperu vadi
Programmatūra
- Edge Impulse Studio
- Arduino IDE
Mēs esam iekļāvuši detalizētu apmācību par Arduino 33 BLE Sense.
Ķēdes shēma
Šīs balss atpazīšanas shēma, izmantojot Arduino, ir dota zemāk. Arduino 33 BLE friģējošā daļa nebija pieejama, tāpēc es izmantoju Arduino Nano, jo abiem ir viena un tā pati piespraude.
LED pozitīvais vads ir savienots ar Arduino 33 BLE sense digitālo tapu 5, un negatīvais vads ir savienots ar Arduino GND tapu.
Arduino runas atpazīšanas datu kopas izveide
Šeit Edge Impulse Studio tiek izmantota mūsu runas atpazīšanas modeļa apmācībai. Modeļa apmācība Edge Impulse Studio ir līdzīga mašīnmācīšanās modeļu apmācībai citās mašīnmācīšanās sistēmās. Apmācībai mašīnmācīšanās modeļa pirmais solis ir datu kopas savākšana, kurā ir datu paraugi, kurus mēs vēlētos spēt atpazīt.
Tā kā mūsu mērķis ir kontrolēt LED ar balss komandu, mums būs jāsavāc balss paraugi visām komandām un troksnim, lai tas varētu atšķirt balss komandas un citus trokšņus.
Mēs izveidosim datu kopu ar trim klasēm “ LED ON ”, “ LED OFF ” un “ noise ”. Lai izveidotu datu kopu, izveidojiet Edge Impulse kontu, verificējiet kontu un pēc tam sāciet jaunu projektu. Paraugus varat ielādēt, izmantojot mobilo tālruni, Arduino dēli vai arī importēt datu kopu savā mala impulsa kontā. Vienkāršākais veids, kā ielādēt paraugus savā kontā, ir mobilais tālrunis. Šim nolūkam savienojiet mobilo ar Edge Impulse.
Lai izveidotu savienojumu ar mobilo tālruni, noklikšķiniet uz Ierīces un pēc tam uz Savienot jaunu ierīci .
Tagad nākamajā logā noklikšķiniet uz 'Izmantot savu mobilo tālruni' , un parādīsies QR kods. Skenējiet QR kodu ar savu mobilo tālruni vai ievadiet URL, kas norādīts uz QR koda.
Tas savienos jūsu tālruni ar Edge Impulse studiju.
Izmantojot tālruni, kas savienots ar Edge Impulse Studio, tagad varat ielādēt savus paraugus. Lai ielādētu paraugus, noklikšķiniet uz Datu iegūšana . Tagad lapā Datu iegūšana ievadiet etiķetes nosaukumu, atlasiet mikrofonu kā sensoru un ievadiet parauga garumu. Noklikšķiniet uz Sākt paraugu ņemšanu , un jūsu ierīce uzņems 2 sekunžu paraugu. Ierakstiet kopā 10 līdz 12 balss paraugus dažādos apstākļos.
Pēc pirmās klases paraugu augšupielādes iestatiet izmaiņu etiķeti un savāciet paraugus kategorijai “ gaismas izslēgts” un “troksnis” .
Šie paraugi ir paredzēti moduļa apmācībai, nākamajās darbībās mēs apkoposim testa datus. Pārbaudes datiem jābūt vismaz 30% no apmācības datiem, tāpēc savāc 4 “trokšņa” paraugus un 4–5 paraugus “ieslēgt gaismu” un “izslēgt gaismu”.
Modeļa apmācība
Tā kā mūsu datu kopa ir gatava, tagad mēs varam radīt impulsu datiem. Par to dodieties uz lapu Izveidot impulsu . Mainiet noklusējuma iestatījumus 1000 ms loga izmēram uz 1200 ms un 500 ms loga palielinājums līdz 50 ms. Tas nozīmē, ka mūsu dati tiks apstrādāti 1,2 sekundes vienlaikus, sākot ar katru 58 ms.
Tagad lapā “ Izveidot impulsu” noklikšķiniet uz “ Pievienot apstrādes bloku” . Nākamajā logā atlasiet bloku Audio (MFCC). Pēc tam noklikšķiniet uz ' Pievienot mācību bloku' un atlasiet bloku Neironu tīkls (Keras). Pēc tam noklikšķiniet uz Saglabāt impulsu .
Nākamajā solī dodieties uz MFCC lapu un pēc tam noklikšķiniet uz 'Ģenerēt līdzekļus'. Tas ģenerēs MFCC blokus visiem mūsu audio logiem.
Pēc tam dodieties uz lapu “ NN klasifikators” un noklikšķiniet uz trim punktiem “ Neironu tīkla iestatījumu” augšējā labajā stūrī un atlasiet “ Pārslēgties uz režīmu Keras (eksperts)” .
Nomainiet oriģinālu ar šādu kodu un mainiet “ Minimālais ticamības novērtējums” uz “ 0,70” . Pēc tam noklikšķiniet uz pogas Sākt treniņu . Tas sāks apmācīt jūsu modeli.
importēt tensorflow kā tf no tensorflow.keras.models importēt secību no tensorflow.keras.layers importēt Dense, InputLayer, Dropout, Saplacināt, Pārveidot, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D no tensorflow.keras.erasimoptowflowers Adam importēt MaxNorm # modeļa arhitektūras modeli = 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, polsterējums = 'tas pats')) model.add (Conv2D (5, kernel_size = 5, activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (baseina izmērs = 2,polsterējums = 'tas pats')) model.add (saplacināt ()) model.add (blīvs (klases, aktivizēšana = 'softmax', nosaukums = 'y_pred', kodola_konstrukcija = MaxNorm (3))) # tas kontrolē mācīšanās ātruma izvēli = Ādams (lr = 0,005, beta_1 = 0,9, beta_2 = 0,999) # apmācīt neironu tīkla modeli. Apkopot (zaudējums = 'kategoriskā_krosentropija', optimizētājs = opt, metrika =) modelis.fit (X_train, Y_train, batch_size = 32, laikmeti = 9, validācijas_dati = (X_test, Y_test), izteiksmīgi = 2)verbose = 2)verbose = 2)
Pēc modeļa apmācības tas parādīs apmācības sniegumu. Man precizitāte bija 81,1% un zaudējumi 0,45, kas nav ideāls sniegums, bet mēs varam turpināt to darīt. Varat palielināt modeļa veiktspēju, izveidojot plašu datu kopu.
Kad mūsu runas atpazīšanas modelis ir gatavs, mēs šo modeli izvietosim kā Arduino bibliotēku. Pirms modeļa lejupielādes kā bibliotēku varat pārbaudīt veiktspēju, dodoties uz lapu “ Live Classification” . Live klasifikācijas funkcija ļauj pārbaudīt modeli gan ar esošajiem testēšanas datiem, kas pievienoti datu kopai, gan straumējot audio datus no sava mobilā tālruņa.
Lai pārbaudītu datus ar tālruni, tālrunī izvēlieties ' Pārslēgties uz klasifikācijas režīmu' .
Tagad, lai lejupielādētu modeli kā Arduino bibliotēku, dodieties uz lapu Izvietošana un atlasiet Arduino bibliotēka . Tagad ritiniet uz leju un noklikšķiniet uz “ Veidot ”, lai sāktu procesu. Tas jūsu projektam izveidos Arduino bibliotēku.
Tagad pievienojiet bibliotēku savā Arduino IDE. Tam atveriet Arduino IDE un pēc tam noklikšķiniet uz Skice> Iekļaut bibliotēku> Add.ZIP bibliotēka
Pēc tam ielādējiet piemēru, dodoties uz Fails> Piemēri> Jūsu projekta nosaukums - Edge Impulse> nano_ble33_sense_microphone
Arduino balss atpazīšanas kods
Šeit ir veiktas dažas izmaiņas, lai vadītu LED ar balss komandām.
Mēs veicam dažas izmaiņas void loop (), kur tas izdrukā komandu varbūtību. Sākotnējā kodā tas drukā visas etiķetes un to vērtības kopā.
par (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Lai kontrolētu gaismas diodi, mums jāsaglabā visas komandu varbūtības trīs dažādos mainīgajos, lai mēs varētu viņiem likt nosacījuma paziņojumus. Tātad saskaņā ar jauno kodu, ja “ gaismas ieslēgšanas” komandas varbūtība ir lielāka par 0,50, tā ieslēgs LED un ja “ gaismas izslēgšanas” varbūtība ir lielāka par 0,50, nekā tas izslēgs LED.
for (izmērs_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {troksnis = rezultāts.klasifikācijas.vērtība; Serial.println ("Troksnis:"); Serial.println (troksnis); } par (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = result.classification.value; Serial.println ("Gaisma izslēgta:"); Sērijas.druka (izslēgta); } gaismas = 1- (troksnis + izslēgta gaisma); Serial.println ("Gaisma ieslēgta:"); Seriāls.druka (gaismas); ja (gaismas spuldze> 0,50) {digitalWrite (vadīts, AUGSTS); } if (gaismas izslēgšana> 0,50) {digitalWrite (vadīts, LOW); }
Pēc izmaiņu veikšanas augšupielādējiet kodu savā Arduino. Atveriet sērijveida monitoru ar ātrumu 115200 bodu.
Šādi jūs varat izveidot runas atpazīšanu, izmantojot Arduino, un dot komandas ierīču darbībai.
Pilns darba video ar bibliotēku un kodu ir norādīts zemāk.