- Súčasti sú povinné
- Schéma zapojenia
- Vytvorenie množiny údajov pre rozpoznávanie reči Arduino
- Školenie modelu
- Arduino kód pre rozpoznávanie hlasu Arduino
Technológia rozpoznávania reči je veľmi užitočná pri automatizácii, ktorá vám nielen dáva kontrolu nad zariadeniami bez použitia rúk, ale tiež zvyšuje bezpečnosť systému. Okrem výroby hlasom ovládaných pomôcok poskytuje rozpoznávanie reči aj významnú pomoc ľuďom trpiacim rôznymi zdravotnými postihnutiami.
V predchádzajúcich projektoch sme stavali prevodník textu na reč (TTS) založený na Arduine a hlasom ovládané svetlá. Teraz v tomto projekte použijeme strojové učenie na trénovanie modelu rozpoznávania reči pomocou Edge Impulse Studio s tromi príkazmi, tj. „ LIGHT ON“ , „ LIGHT OFF“ a „ NOISE “. Edge Impulse je online platforma strojového učenia, ktorá umožňuje vývojárom vytvárať novú generáciu riešení inteligentných zariadení pomocou zabudovaného strojového učenia. Predtým sme použili Edge impulzné štúdio na rozlíšenie zvukov kašľa a hluku.
Súčasti sú povinné
Hardware
- Arduino 33 BLE Sense
- LED
- Prepojovacie drôty
Softvér
- Štúdio Edge Impulse
- Arduino IDE
Prebrali sme podrobný návod na tému Arduino 33 BLE Sense.
Schéma zapojenia
Schéma zapojenia tohto rozpoznávania hlasu pomocou Arduina je uvedená nižšie. Fritzujúca časť pre Arduino 33 BLE nebola k dispozícii, a tak som použil Arduino Nano, pretože obe majú rovnaký konektor.
Kladný vodič LED je pripojený k digitálnemu kolíku 5 snímača Arduino 33 BLE a záporný vodič je pripojený k kolíku GND Arduina.
Vytvorenie množiny údajov pre rozpoznávanie reči Arduino
Tu sa Edge Impulse Studio používa na školenie nášho modelu rozpoznávania reči. Školenie modelu v Edge Impulse Studio je podobné ako školenie modelov strojového učenia v iných rámcoch strojového učenia. Pri výcviku je prvým krokom modelu strojového učenia zhromaždenie množiny údajov, ktorá obsahuje vzorky údajov, ktoré by sme chceli rozpoznať.
Pretože našim cieľom je ovládať LED pomocou nášho hlasového príkazu, budeme musieť zhromaždiť hlasové vzorky pre všetky príkazy a šum, aby bolo možné rozlišovať medzi hlasovými príkazmi a inými šummi.
Vytvoríme dataset s tromi triedami „ LED ON “, „ LED OFF “ a „ noise “. Ak chcete vytvoriť množinu údajov, vytvorte účet Edge Impulse, overte svoj účet a potom začnite nový projekt. Vzorky môžete načítať pomocou mobilu, dosky Arduino alebo môžete importovať množinu údajov do svojho účtu edge impuls. Najjednoduchší spôsob, ako načítať vzorky do svojho účtu, je pomocou mobilného telefónu. Preto pripojte mobilný telefón k Edge Impulse.
Pre pripojenie mobilného telefónu kliknite na „ Zariadenia “ a potom na „ Pripojiť nové zariadenie“ .
Teraz v ďalšom okne kliknite na „Použite svoj mobilný telefón“ a zobrazí sa QR kód. Naskenujte QR kód pomocou svojho mobilného telefónu alebo zadajte adresu URL uvedenú na QR kóde.
Takto sa váš telefón prepojí so štúdiom Edge Impulse.
Keď je váš telefón pripojený k Edge Impulse Studio, môžete teraz načítať svoje vzorky. Na načítanie vzoriek kliknite na „ Zber údajov“ . Teraz na stránke Zber údajov zadajte názov štítku, vyberte mikrofón ako snímač a zadajte dĺžku vzorky. Kliknite na „ Spustiť vzorkovanie“ , vaše zariadenie zachytí 2 sekundovú vzorku. Celkovo zaznamenajte 10 až 12 hlasových vzoriek v rôznych podmienkach.
Po nahraní vzoriek pre prvú triedu teraz nastavte štítok a zbierajte vzorky pre triedu „ vypnuté svetlo“ a „šum“ .
Tieto vzorky sú určené pre modul Training, v ďalších krokoch zhromaždíme údaje o teste. Testovacie údaje by mali predstavovať najmenej 30% tréningových údajov, preto zozbierajte 4 vzorky „šumu“ a 4 až 5 vzoriek na „svetlo zapnuté“ a „svetlo vypnuté“.
Školenie modelu
Keď je náš súbor údajov pripravený, môžeme teraz vytvoriť impulz pre údaje. Prejdite na to na stránku „ Vytvoriť impulz “. Zmeňte predvolené nastavenie veľkosti okna 1000 ms na 1 200 ms a zvýšenie okna 500 ms na 50 ms. To znamená, že naše údaje budú spracovávané po 1,2 s, počínajúc každých 58 ms.
Teraz na stránke „ Vytvoriť impulz“ kliknite na „ Pridať blok spracovania“ . V ďalšom okne vyberte blok Audio (MFCC). Potom kliknite na „ Pridať blok učenia“ a vyberte blok Neural Network (Keras). Potom kliknite na „ Uložiť impulz“ .
V ďalšom kroku prejdite na stránku MFCC a potom kliknite na položku „Generovať funkcie“. Bude generovať bloky MFCC pre všetky naše zvukové okná.
Potom choďte na stránku „ NN Classifier“, kliknite na tri bodky v pravom hornom rohu „ Nastavenia neurónovej siete“ a vyberte „ Prepnúť do režimu Keras (expert)“ .
Nahraďte originál nasledujúcim kódom a zmeňte „ Minimálne hodnotenie spoľahlivosti“ na „ 0,70“ . Potom kliknite na tlačidlo „ Začať trénovať“ . Začne trénovať váš model.
import tensorflow ako tf z tensorflow.keras.models import Sekvenčné z tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D from tensorflow.keras.optimizers import Adam from tensorflow.keras.constraints importovať MaxNorm # model architektúra model = 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, padding = 'same')) model.add (Conv2D (5, kernel_size = 5, activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2,padding = 'same')) model.add (Flatten ()) model.add (Dense (classes, activation = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # toto riadi rýchlosť učenia opt = Adam (lr = 0,005, beta_1 = 0,9, beta_2 = 0,999) # trénujte model neurónovej siete. Kompilácia (strata = 'categorical_crossentropy', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, epoch = 9, validation_data = (X_test, Y_test), verbose = 2)podrobné = 2)podrobné = 2)
Po nacvičení modelu sa ukáže jeho tréningový výkon. Pre mňa bola presnosť 81,1% a strata 0,45, čo nie je ideálny výkon, ale môžeme v ňom pokračovať. Výkon svojho modelu môžete zvýšiť vytvorením rozsiahlej množiny údajov.
Keď je náš model rozpoznávania reči pripravený, nasadíme ho ako knižnicu Arduino. Pred stiahnutím modelu ako knižnice môžete výkon vyskúšať na stránke „ Živá klasifikácia“ . Funkcia živej klasifikácie vám umožňuje testovať model s existujúcimi testovacími dátami, ktoré boli dodané s dátovou sadou, alebo streamovaním zvukových dát z mobilného telefónu.
Ak chcete údaje otestovať pomocou telefónu, vyberte v telefóne možnosť „ Prepnúť do režimu klasifikácie“ .
Ak chcete teraz stiahnuť model ako knižnicu Arduino, prejdite na stránku „ Nasadenie “ a vyberte možnosť „ Arduino Library“ . Teraz posuňte zobrazenie nadol a kliknutím na tlačidlo „ Vytvoriť “ spustite proces. Takto sa pre váš projekt vytvorí knižnica Arduino.
Teraz pridajte knižnicu do svojho Arduino IDE. Za týmto účelom otvorte Arduino IDE a potom kliknite na Skica> Zahrnúť knižnicu> Knižnica Add.ZIP
Potom načítajte príklad tak, že prejdete do časti Súbor> Príklady> Názov vášho projektu - Edge Impulse> nano_ble33_sense_microphone
Arduino kód pre rozpoznávanie hlasu Arduino
Tu boli urobené určité zmeny v ovládaní LED pomocou hlasových príkazov.
Robíme nejaké zmeny vo void loop (), kde sa tlačí pravdepodobnosť príkazov. V pôvodnom kóde tlačí všetky štítky a ich hodnoty spoločne.
pre (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Aby sme mohli kontrolovať LED, musíme uložiť všetky pravdepodobnosti príkazu do troch rôznych premenných, aby sme na ne mohli dať podmienené príkazy. Takže podľa nového kódu, ak je pravdepodobnosť príkazu „ svetlo zapnuté“ viac ako 0,50, rozsvieti sa LED dióda a ak je pravdepodobnosť príkazu „vypnuté svetlo“ viac ako 0,50, vypne LED diódu.
pre (size_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {noise = result.classification.value; Serial.println ("Hluk:"); Serial.println (šum); } pre (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = result.classification.value; Serial.println ("Svetlo vypnuté:"); Sériový výtlačok (svetelný tok); } lighton = 1- (hluk + svetlicky); Serial.println ("Svetlo ZAPNUTÉ:"); Sériová tlač (lighton); if (lighton> 0,50) {digitalWrite (led, HIGH); } if (lightoff> 0,50) {digitalWrite (led, LOW); }
Po vykonaní zmien nahrajte kód do svojho Arduina. Sériový monitor otvorte pri 115 200 baudoch.
Takto môžete pomocou Arduina vytvoriť rozpoznávanie reči a dávať príkazy na obsluhu zariadení.
Kompletné pracovné video s knižnicou a kódom je uvedené nižšie.