- Potrebne komponente
- Shema vezja
- Ustvarjanje nabora podatkov za prepoznavanje govora Arduino
- Izobraževanje modela
- Koda Arduino za prepoznavanje glasu Arduino
Tehnologija prepoznavanja govora je zelo uporabna pri avtomatizaciji, ki vam ne omogoča samo prostoročnega nadzora nad napravami, ampak tudi dodaja varnost sistemu. Poleg izdelave pripomočkov z glasovnim nadzorom prepoznavanje govora pomembno pomaga tudi ljudem z različnimi motnjami.
V prejšnjih projektih smo zgradili pretvornik besedila v govor (TTS) na osnovi Arduina in luči z glasovnim nadzorom. Zdaj bomo v tem projektu s pomočjo strojnega učenja usposobili model za prepoznavanje govora s pomočjo Edge Impulse Studio s tremi ukazi, tj. ' LIGHT ON' , ' LIGHT OFF' in ' NOISE '. Edge Impulse je spletna platforma za strojno učenje, ki razvijalcem omogoča ustvarjanje naslednje generacije inteligentnih rešitev za naprave z vgrajenim strojnim učenjem. Že prej smo uporabili Edge impulzni studio za razlikovanje zvokov kašlja in hrupa.
Potrebne komponente
Strojna oprema
- Arduino 33 BLE Sense
- LED
- Jumper žice
Programska oprema
- Edge Impulse Studio
- Arduino IDE
Pokrili smo podrobno vadnico o Arduino 33 BLE Sense.
Shema vezja
Shema vezja za to prepoznavanje glasu z uporabo Arduina je podana spodaj. Fritzing del za Arduino 33 BLE ni bil na voljo, zato sem uporabil Arduino Nano, saj imata oba enak pinout.
Pozitivni kabel LED je priključen na digitalni zatič 5 arduino 33 BLE sense, negativni kabel pa na GND zatič Arduino.
Ustvarjanje nabora podatkov za prepoznavanje govora Arduino
Tu se Edge Impulse Studio uporablja za usposabljanje našega modela prepoznavanja govora. Izobraževanje modela v Edge Impulse Studio je podobno usposabljanju modelov strojnega učenja na drugih ogrodjih strojnega učenja. Za usposabljanje je prvi korak modela strojnega učenja zbiranje nabora podatkov, ki vsebuje vzorce podatkov, ki bi jih radi prepoznali.
Ker je naš cilj nadzor LED z našim glasovnim ukazom, bomo morali zbrati vzorce glasu za vse ukaze in šum, da bo lahko razlikoval med glasovnimi ukazi in drugimi hrupi.
Ustvarili bomo nabor podatkov s tremi razredi “ LED ON ”, “ LED OFF ” in “ noise ”. Če želite ustvariti nabor podatkov, ustvarite račun Edge Impulse, preverite svoj račun in nato začnite nov projekt. Vzorce lahko naložite z mobilnim telefonom, ploščo Arduino ali pa uvozite nabor podatkov v svoj robni impulzni račun. Vzorce najlažje naložite v svoj račun z uporabo mobilnega telefona. Za to povežite mobilni telefon z Edge Impulse.
Če želite povezati mobilni telefon, kliknite » Naprave « in nato » Poveži novo napravo« .
Zdaj v naslednjem oknu kliknite "Uporabi svoj mobilni telefon" in prikazala se bo koda QR. S svojim mobilnim telefonom optično preberite kodo QR ali vnesite URL, naveden v kodi QR.
To bo povezalo vaš telefon z studiem Edge Impulse.
Ko je vaš telefon povezan z Edge Impulse Studio, lahko zdaj naložite vzorce. Če želite naložiti vzorce, kliknite " Pridobivanje podatkov" . Zdaj na strani Zbiranje podatkov vnesite ime nalepke, izberite mikrofon kot senzor in vnesite dolžino vzorca. Kliknite » Začni vzorčenje« , naprava bo zajela 2-sekundni vzorec. Posnemite skupaj 10 do 12 vzorcev glasu v različnih pogojih.
Po nalaganju vzorcev za prvi razred zdaj nastavite spremembo etikete in zberite vzorce za razred ' light off' in 'noise' .
Ti vzorci so namenjeni usposabljanju modula, v naslednjih korakih bomo zbrali podatke o preskusu. Podatki o preskusih morajo biti vsaj 30% podatkov o vadbi, zato zberite 4 vzorce „hrupa“ in 4 do 5 vzorcev za „vklopljeno in izključeno svetlobo“.
Izobraževanje modela
Ko je naš nabor podatkov pripravljen, lahko zdaj ustvarimo impulz za podatke. Za to pojdite na stran » Ustvari impulz «. Spremenite privzete nastavitve velikosti okna 1000 ms na 1200 ms in 500 ms Okno povečajte na 50 ms. To pomeni, da se bodo naši podatki obdelovali 1,2 s hkrati, vsakih 58 ms.
Zdaj na strani » Ustvari impulz« kliknite na » Dodaj procesni blok« . V naslednjem oknu izberite blok Audio (MFCC). Po tem kliknite na " Dodaj učni blok" in izberite blok Neural Network (Keras). Nato kliknite " Shrani impulz" .
V naslednjem koraku pojdite na stran MFCC in nato kliknite »Ustvari funkcije«. Ustvaril bo bloke MFCC za vsa naša zvočna okna.
Po tem pojdite na stran ' NN Classifier' in kliknite tri pike v zgornjem desnem kotu ' Nastavitve nevronske mreže' in izberite ' Preklopi v Kerasov (strokovni) način' .
Zamenjajte izvirnik z naslednjo kodo in spremenite " Minimalno stopnjo zaupanja" na " 0,70" . Nato kliknite gumb " Začni s treningom" . Začel bo trenirati vaš model.
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D from tensorflow.keras.optimizorstrants uvoz MaxNorm # model arhitekture model = Sequential () model.add (InputLayer (input_shape = (X_train.shape,), name = 'x_input')) model.add (Preoblikovanje ((int (X_train.shape / 13), 13, 1), input_shape = (X_train.shape,))) model.add (Conv2D (10, size_size = 5, activation = 'relu', padding = 'same', 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 (velikost_družine = 2,padding = 'same')) model.add (Flatten ()) model.add (Gosto (razredi, aktivacija = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # to nadzoruje stopnjo učenja opt = Adam (lr = 0,005, beta_1 = 0,9, beta_2 = 0,999) # treniraj model nevronske mreže.compile (izguba = 'categorical_crossentropy', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, epohe = 9, podatki o potrditvi = (X_test, Y_test), podrobno = 2)podroben = 2)podroben = 2)
Po treningu modela bo prikazal učinkovitost treninga. Zame je bila natančnost 81,1% in izguba 0,45, kar ni idealna zmogljivost, vendar lahko nadaljujemo z njo. Uspešnost vašega modela lahko povečate z ustvarjanjem obsežnega nabora podatkov.
Zdaj, ko je naš model prepoznavanja govora pripravljen, ga bomo uvedli kot knjižnico Arduino. Preden model prenesete kot knjižnico, lahko preizkusite zmogljivost na strani » Live Classification« . Funkcija klasifikacije v živo vam omogoča, da preizkusite model z obstoječimi podatki o testiranju, ki ste jih dobili z naborom podatkov, ali s pretakanjem zvočnih podatkov iz mobilnega telefona.
Če želite podatke preizkusiti s telefonom, na telefonu izberite » Preklopi v način razvrščanja« .
Zdaj, da prenesete model kot knjižnico Arduino, pojdite na stran » Uvajanje « in izberite » Knjižnica Arduino« . Zdaj se pomaknite navzdol in kliknite ' Build ', da začnete postopek. S tem boste zgradili knjižnico Arduino za vaš projekt.
Zdaj dodajte knjižnico v svoj Arduino IDE. Za to odprite Arduino IDE in nato kliknite Skica> Vključi knjižnico> Dodaj.ZIP knjižnico
Nato naložite primer tako, da odprete Datoteka> Primeri> Ime vašega projekta - Edge Impulse> nano_ble33_sense_microphone
Koda Arduino za prepoznavanje glasu Arduino
Tukaj je bilo nekaj sprememb za nadzor LED z glasovnimi ukazi.
Nekaj sprememb izvajamo v zanki void (), kjer tiska verjetnost ukazov. V izvirni kodi tiska vse nalepke in njihove vrednosti skupaj.
za (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Za nadzor LED moramo shraniti vse verjetnosti ukazov v tri različne spremenljivke, tako da lahko nanje postavimo pogojne stavke. Torej, v skladu z novo kodo, če je verjetnost ukaza ' lučka vklopljena' večja od 0,50, bo ta vklopil LED in če je verjetnost ukaza ' lučka izklopljena' večja od 0,50, bo ugasnila LED.
za (size_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {noise = result.classification.value; Serial.println ("Hrup:"); Serial.println (šum); } for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = result.classification.value; Serial.println ("Light Off:"); Serial.print (lightoff); } lighton = 1- (šum + svetloba); Serial.println ("Lučka vklopljena:"); Serial.print (lighton); if (lighton> 0,50) {digitalWrite (led, HIGH); } if (osvetlitev> 0,50) {digitalWrite (led, LOW); }
Po izvedbi sprememb naložite kodo v svoj Arduino. Odprite serijski monitor na 115200 baud.
Tako lahko z uporabo Arduina zgradite prepoznavanje govora in dajete ukaze za upravljanje naprav.
Popoln delujoč video s knjižnico in kodo je spodaj.