- Komponente potrebne
- Kružni dijagram
- Stvaranje skupa podataka za prepoznavanje govora Arduino
- Obuka modela
- Arduino kod za prepoznavanje glasa Arduino
Tehnologija prepoznavanja govora vrlo je korisna u automatizaciji koja vam ne samo da omogućuje hands-free kontrolu nad uređajima već i dodaje sigurnost sustavu. Osim izrade naprava s glasovnim nadzorom, prepoznavanje govora također pruža značajnu pomoć osobama koje pate od različitih invaliditeta.
U prethodnim projektima izgradili smo pretvarač teksta u govor (TTS) zasnovan na Arduinu i svjetla kontrolirana glasom. Sada ćemo u ovom projektu koristiti strojno učenje za osposobljavanje modela prepoznavanja govora pomoću Edge Impulse Studio s tri naredbe, tj. ' LIGHT ON' , ' LIGHT OFF' i ' NOISE '. Edge Impulse mrežna je platforma za strojno učenje koja programerima omogućuje stvaranje nove generacije inteligentnih rješenja za uređaje s ugrađenim strojnim učenjem. Ranije smo koristili Edge impulzni studio za razlikovanje zvukova kašlja i buke.
Komponente potrebne
Hardver
- Arduino 33 BLE Sense
- LED
- Jumper žice
Softver
- Edge Impulse Studio
- Arduino IDE
Obradili smo detaljan vodič o Arduino 33 BLE Senseu.
Kružni dijagram
Kružni dijagram za ovo prepoznavanje glasa pomoću Arduina dan je u nastavku. Fritzing dio za Arduino 33 BLE nije bio dostupan, pa sam koristio Arduino Nano jer oba imaju isti pinout.

Pozitivni kabel LED-a spojen je na digitalni pin 5 arduino 33 BLE smisla, a negativni kabel je spojen na GND pin Arduina.

Stvaranje skupa podataka za prepoznavanje govora Arduino
Ovdje se Edge Impulse Studio koristi za obuku našeg modela prepoznavanja govora. Obuka modela u Edge Impulse Studiju slična je obuci modela strojnog učenja na drugim okvirima strojnog učenja. Za trening, prvi korak modela strojnog učenja je prikupljanje skupa podataka koji sadrži uzorke podataka koje bismo željeli moći prepoznati.
Kako nam je cilj upravljati LED-om pomoću glasovne naredbe, morat ćemo prikupiti uzorke glasa za sve naredbe i šum kako bi mogao razlikovati glasovne naredbe i ostale zvukove.
Stvorit ćemo skup podataka s tri razreda " LED UKLJUČENO ", " LED ISKLJUČENO " i " šum ". Da biste stvorili skup podataka, stvorite Edge Impulse račun, potvrdite svoj račun i započnite novi projekt. Uzorke možete učitati pomoću mobitela, ploče Arduino ili možete uvesti skup podataka na svoj rubni impulsni račun. Uzorke je najlakši način učitati na svoj račun pomoću mobilnog telefona. Za to povežite mobitel s Edge Impulseom.
Da biste povezali mobitel, kliknite " Uređaji ", a zatim " Poveži novi uređaj" .

Sada u sljedećem prozoru kliknite na 'Koristi svoj mobilni telefon' i pojavit će se QR kôd. Skenirajte QR kôd svojim mobilnim telefonom ili unesite URL naveden na QR kodu.

Ovo će povezati vaš telefon s Edge Impulse studijem.

Kada je vaš telefon povezan s Edge Impulse Studioom, sada možete učitati uzorke. Za učitavanje uzoraka kliknite na ' Prikupljanje podataka' . Sada na stranici Prikupljanje podataka unesite naziv naljepnice, odaberite mikrofon kao senzor i unesite duljinu uzorka. Kliknite na " Počni uzorkovanje" , uređaj će snimiti uzorak od 2 sek. Snimite ukupno 10 do 12 uzoraka glasa u različitim uvjetima.

Nakon prijenosa uzoraka za prvu klasu, sada postavite promjenu oznake i sakupite uzorke za klasu ' isključeno svjetlo' i 'buku' .

Ovi uzorci su za modul Obuka, u sljedećim ćemo koracima prikupljati podatke o ispitivanju. Podaci o ispitivanju trebali bi sadržavati najmanje 30% podataka o treningu, pa prikupite 4 uzorka „buke“ i 4 do 5 uzoraka za „uključeno svjetlo“ i „isključeno svjetlo“.
Obuka modela
Kako je naš skup podataka spreman, sada možemo stvoriti impuls za podatke. Za to idite na stranicu " Stvaranje impulsa ". Promijenite zadane postavke veličine prozora od 1000 ms na 1200 ms i 500 ms Prozor se povećava na 50 ms. To znači da će se naši podaci obrađivati po 1,2 s odjednom, počevši sa svakih 58 ms.
Sada na stranici ' Stvaranje impulsa' kliknite na ' Dodaj blok obrade' . U sljedećem prozoru odaberite blok Audio (MFCC). Nakon toga kliknite na ' Dodaj blok učenja' i odaberite blok Neural Network (Keras). Zatim kliknite na " Spremi impuls" .

U sljedećem koraku idite na stranicu MFCC, a zatim kliknite na 'Generiraj značajke'. Stvorit će MFCC blokove za sve naše audio prozore.

Nakon toga idite na stranicu " NN Classifier" i kliknite tri točke u gornjem desnom kutu " Postavke neuronske mreže" i odaberite " Prebaci se u Keras (stručni) način" .

Zamijenite izvornik sljedećim kodom i promijenite " Minimalnu ocjenu pouzdanosti" u " 0,70" . Zatim kliknite gumb " Pokreni trening" . Počet će 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 Adamke tasor import 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 (veličina_dimenzije bazena = 2,padding = 'same')) model.add (Flatten ()) model.add (Gust (klase, aktivacija = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # ovo kontrolira brzinu učenja opt = Adam (lr = 0,005, beta_1 = 0,9, beta_2 = 0,999) # uvježbavanje modela neuronske mreže.compile (gubitak = 'categorical_crossentropy', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, epohe = 9, podaci o potvrdi = (X_test, Y_test), detaljno = 2)opširno = 2)opširno = 2)
Nakon treninga modela pokazat će izvedbu treninga. Za mene je točnost bila 81,1%, a gubitak 0,45, što nije idealna izvedba, ali možemo nastaviti s tim. Izvedbu velikog podataka možete povećati izvedbu svog modela.

Sada kada je naš model prepoznavanja govora spreman, ovaj ćemo model postaviti kao Arduino knjižnicu. Prije preuzimanja modela kao biblioteke možete testirati izvedbu odlaskom na stranicu ' Klasifikacija uživo' . Značajka klasifikacije uživo omogućuje vam testiranje modela s postojećim podacima za testiranje koji ste dobili uz skup podataka ili strujanjem audio podataka s mobilnog telefona.

Da biste podatke testirali telefonom, na telefonu odaberite ' Prebaci se u način klasifikacije' .

Sada da biste preuzeli model kao Arduino Library, idite na stranicu ' Implementacija ' i odaberite ' Arduino Library' . Sada se pomaknite prema dolje i kliknite na ' Build ' da biste započeli postupak. Ovo će izgraditi Arduino knjižnicu za vaš projekt.

Sada dodajte knjižnicu u svoj Arduino IDE. Za to otvorite Arduino IDE, a zatim kliknite Skica> Uključi biblioteku> Dodaj.ZIP biblioteku
Zatim učitajte primjer tako da otvorite Datoteka> Primjeri> Naziv vašeg projekta - Edge Impulse> nano_ble33_sense_microphone
Arduino kod za prepoznavanje glasa Arduino
Ovdje su izvršene neke promjene za upravljanje LED-om pomoću glasovnih naredbi.
Unosimo neke promjene u void loop () gdje ispisuje vjerojatnost naredbi. U izvornom kodu ispisuje sve naljepnice i njihove vrijednosti zajedno.
za (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Da bismo kontrolirali LED diodu, moramo spremiti sve vjerojatnosti naredbi u tri različite varijable kako bismo na njih mogli staviti uvjetne naredbe. Dakle, prema novom kodu ako je vjerojatnost naredbe " svijetli" veća od 0,50, on će uključiti LED diodu, a ako je vjerojatnost naredbe " svjetlo isključeno" veća od 0,50, ugasit će LED.
za (size_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {šum = rezultat.klasifikacija.value; Serial.println ("Buka:"); Serial.println (šum); } za (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = result.classification.value; Serial.println ("Svjetlo isključeno:"); Serial.print (lightoff); } lighton = 1- (šum + svjetlost); Serial.println ("Uključeno svjetlo:"); Serial.print (lighton); if (lighton> 0,50) {digitalWrite (led, HIGH); } if (svjetlost> 0,50) {digitalWrite (led, LOW); }
Nakon što izvršite promjene, prenesite kôd u svoj Arduino. Otvorite serijski monitor na 115200 baud.

Na ovaj način možete izgraditi prepoznavanje govora pomoću Arduina i davati naredbe za upravljanje uređajima.
Kompletni radni video s knjižnicom i kodom dan je u nastavku.
