- Požadované komponenty
- Kruhový diagram
- Vytvoření datové sady pro rozpoznávání řeči Arduino
- Školení modelu
- Arduino kód pro rozpoznávání hlasu Arduino
Technologie rozpoznávání řeči je velmi užitečná v automatizaci, která vám nejen poskytuje ovládání zařízení bez použití rukou, ale také zvyšuje zabezpečení systému. Kromě výroby hlasem ovládaných gadgetů poskytuje rozpoznávání řeči také významnou pomoc lidem trpícím různými postiženími.
V předchozích projektech jsme postavili převodník textu na řeč (TTS) založený na Arduinu a hlasem ovládaná světla. Nyní v tomto projektu použijeme strojové učení k trénování modelu rozpoznávání řeči pomocí Edge Impulse Studio se třemi příkazy, tj. „ LIGHT ON“ , „ LIGHT OFF“ a „ NOISE “. Edge Impulse je online platforma pro strojové učení, která umožňuje vývojářům vytvářet novou generaci řešení inteligentních zařízení s integrovaným strojovým učením. K rozlišení zvuků kašle a hluku jsme dříve používali Edge impulsní studio.
Požadované komponenty
Hardware
- Arduino 33 BLE Sense
- VEDENÝ
- Propojovací dráty
Software
- Studio Edge Impulse
- Arduino IDE
Podrobili jsme podrobný návod k Arduino 33 BLE Sense.
Kruhový diagram
Schéma zapojení pro toto rozpoznávání hlasu pomocí Arduina je uvedeno níže. Fritzing part for Arduino 33 BLE was not available, so I used Arduino Nano as both have the same pinout.
Kladný vodič LED je připojen k digitálnímu kolíku 5 snímače Arduino 33 BLE a záporný vodič je připojen k kolíku GND Arduino.
Vytvoření datové sady pro rozpoznávání řeči Arduino
Zde se Edge Impulse Studio používá k trénování našeho modelu rozpoznávání řeči. Trénink modelu na Edge Impulse Studio je podobný tréninku modelů strojového učení na jiných rámcích strojového učení. Pro školení je prvním krokem modelu strojového učení shromáždění datové sady, která obsahuje vzorky dat, která bychom chtěli rozpoznat.
Protože naším cílem je ovládat LED pomocí našeho hlasového příkazu, budeme muset shromáždit hlasové vzorky pro všechny příkazy a šum, aby bylo možné rozlišovat mezi hlasovými příkazy a jinými zvuky.
Vytvoříme datovou sadu se třemi třídami „ LED ON “, „ LED OFF “ a „ noise “. Chcete-li vytvořit datovou sadu, vytvořte účet Edge Impulse, ověřte svůj účet a poté spusťte nový projekt. Ukázky můžete načíst pomocí mobilu, desky Arduino nebo můžete importovat datovou sadu do svého účtu Edge Impuls. Nejjednodušší způsob, jak načíst vzorky do svého účtu, je pomocí mobilního telefonu. Za tímto účelem propojte mobilní zařízení s Edge Impulse.
Chcete-li připojit mobilní telefon, klikněte na „ Zařízení “ a poté na „ Připojit nové zařízení“ .
Nyní v dalším okně klikněte na „Použít mobilní telefon“ a objeví se QR kód. Naskenujte QR kód pomocí svého mobilního telefonu nebo zadejte adresu URL uvedenou v QR kódu.
Tím se váš telefon propojí se studiem Edge Impulse.
S telefonem připojeným k Edge Impulse Studio můžete nyní načíst své vzorky. Chcete-li načíst vzorky, klikněte na „ Sběr dat“ . Nyní na stránce Sběr dat zadejte název štítku, vyberte mikrofon jako senzor a zadejte délku vzorku. Klikněte na „ Zahájit vzorkování“ , vaše zařízení zachytí 2sekundový vzorek. Zaznamenejte celkem 10 až 12 hlasových vzorků v různých podmínkách.
Po nahrání vzorků pro první třídu nyní nastavte změnu štítku a shromážděte vzorky pro třídu „ zhasnutí světla“ a „šum“ .
Tyto vzorky jsou pro trénink modulu, v dalších krocích budeme shromažďovat testovací data. Testovací data by měla představovat alespoň 30% tréninkových dat, proto shromážděte 4 vzorky „šumu“ a 4 až 5 vzorků pro „světlo zapnuto“ a „světlo vypnuto“.
Školení modelu
Protože je naše datová sada připravena, můžeme nyní vytvořit impuls pro data. K tomu přejděte na stránku „ Vytvořit impuls “. Změňte výchozí nastavení velikosti okna 1000 ms na 1 200 ms a zvětšení okna 500 ms na 50 ms. To znamená, že naše data budou zpracovávána po 1,2 s, počínaje každých 58 ms.
Nyní na stránce „ Vytvořit impuls“ klikněte na „ Přidat blok zpracování“ . V dalším okně vyberte blok Audio (MFCC). Poté klikněte na „ Přidat blok učení“ a vyberte blok Neural Network (Keras). Poté klikněte na „ Uložit impuls“ .
V dalším kroku přejděte na stránku MFCC a poté klikněte na „Generovat funkce“. Bude generovat bloky MFCC pro všechna naše zvuková okna.
Poté přejděte na stránku „ Klasifikátor NN“ a klikněte na tři tečky v pravém horním rohu „ Nastavení neurální sítě“ a vyberte „ Přepnout do režimu Keras (expert)“ .
Nahraďte originál následujícím kódem a změňte „ Minimální spolehlivost“ na „ 0,70“ . Poté klikněte na tlačítko „ Zahájit trénink“ . Začne trénovat váš model.
import tensorflow jako tf z tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D from tensorflow.keras.optimizers import Adam from tensorflow.keras.constraints import MaxNorm # model architektura 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 řídí rychlost učení opt = Adam (lr = 0,005, beta_1 = 0,9, beta_2 = 0,999) # trénovat model neuronové sítě. Soubor (ztráta = 'categorical_crossentropy', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, epochy = 9, validation_data = (X_test, Y_test), verbose = 2)podrobné = 2)podrobné = 2)
Po tréninku model ukáže tréninkový výkon. Pro mě byla přesnost 81,1% a ztráta 0,45, což není ideální výkon, ale můžeme s ním pokračovat. Výkon svého modelu můžete zvýšit vytvořením rozsáhlé datové sady.
Nyní, když je náš model rozpoznávání řeči připraven, nasadíme tento model jako knihovnu Arduino. Před stažením modelu jako knihovny můžete otestovat výkon na stránce „ Živá klasifikace“ . Funkce Živé klasifikace vám umožňuje otestovat model jak s existujícími testovacími daty, která byla dodána s datovou sadou, nebo streamováním zvukových dat z vašeho mobilního telefonu.
Chcete-li otestovat data pomocí telefonu, zvolte v telefonu možnost „ Přepnout do režimu klasifikace“ .
Chcete-li nyní stáhnout model jako knihovnu Arduino, přejděte na stránku „ Nasazení “ a vyberte „ Knihovna Arduino“ . Nyní přejděte dolů a spusťte proces kliknutím na „ Sestavit “. Tím se pro váš projekt vytvoří knihovna Arduino.
Nyní přidejte knihovnu do svého Arduino IDE. Za tímto účelem otevřete Arduino IDE a poté klikněte na Skica> Zahrnout knihovnu> Knihovna Add.ZIP
Poté načtěte příklad tak, že přejdete na Soubor> Příklady> Název vašeho projektu - Edge Impulse> nano_ble33_sense_microphone
Arduino kód pro rozpoznávání hlasu Arduino
Zde byly provedeny některé změny ovládání LED pomocí hlasových příkazů.
Provádíme některé změny ve void loop (), kde se tiskne pravděpodobnost příkazů. V původním kódu tiskne všechny štítky a jejich hodnoty společně.
for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Pro ovládání LED musíme uložit všechny pravděpodobnosti příkazu do tří různých proměnných, abychom na ně mohli dát podmíněné příkazy. Podle nového kódu tedy platí, že pokud je pravděpodobnost povelu „ rozsvícení světla“ větší než 0,50, rozsvítí se LED dioda a pokud je pravděpodobnost povelu „ rozsvícení světla“ větší než 0,50, zhasne LED dioda.
pro (size_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {noise = result.classification.value; Serial.println ("Hluk:"); Serial.println (šum); } for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = result.classification.value; Serial.println ("Vypnuto:"); Serial.print (lightoff); } lighton = 1- (hluk + světelný tok); Serial.println ("Light ON:"); Sériový tisk (lighton); if (lighton> 0,50) {digitalWrite (led, HIGH); } if (lightoff> 0,50) {digitalWrite (led, LOW); }
Po provedení změn nahrajte kód do svého Arduina. Otevřete sériový monitor s přenosovou rychlostí 115200 baudů.
Takto můžete pomocí Arduina vytvářet rozpoznávání řeči a dávat příkazy k ovládání zařízení.
Kompletní pracovní video s knihovnou a kódem je uvedeno níže.