- Szükséges alkatrészek
- Kördiagramm
- Adatkészlet létrehozása az Arduino beszédfelismeréshez
- A modell kiképzése
- Arduino kód az Arduino hangfelismeréshez
A beszédfelismerő technológia nagyon hasznos az automatizálásban, amely nemcsak kihangosított vezérlést biztosít az eszközök felett, hanem biztonságot is nyújt a rendszer számára. A beszédfelismerés a hangvezérelt modulok gyártása mellett jelentős segítséget nyújt a különböző fogyatékossággal élő emberek számára is.
Korábbi projektjeinkben Arduino alapú szövegfelolvasó (TTS) átalakítót és hangvezérelt lámpákat építettünk. Ebben a projektben a gépi tanulással egy beszédfelismerési modellt fogunk képezni az Edge Impulse Studio segítségével, három paranccsal: „ LIGHT ON” , „ LIGHT OFF” és „ NOISE ”. Az Edge Impulse egy online gépi tanulási platform, amely lehetővé teszi a fejlesztők számára, hogy beágyazott gépi tanulással hozzák létre az intelligens eszközmegoldások következő generációját. Korábban az Edge impulzus stúdiót használtuk a köhögés és a zajok megkülönböztetésére.
Szükséges alkatrészek
Hardver
- Arduino 33 BLE Sense
- VEZETTE
- Jumper huzalok
Szoftver
- Edge Impulse Studio
- Arduino IDE
Az Arduino 33 BLE Sense részletes bemutatóját ismertettük.
Kördiagramm
Az Arduino segítségével történő hangfelismerés áramköri diagramja az alábbiakban látható. Az Arduino 33 BLE-hez nem volt elérhető alkatrész, ezért az Arduino Nano-t használtam, mivel mindkettőnek ugyanaz a pinout-ja.
A LED pozitív vezetéke az Arduino 33 BLE sense 5. digitális érintkezőjéhez, a negatív vezeték pedig az Arduino GND tűjéhez csatlakozik.
Adatkészlet létrehozása az Arduino beszédfelismeréshez
Itt az Edge Impulse Stúdiót használjuk beszédfelismerési modellünk képzésére. A modell oktatása az Edge Impulse Studio-on hasonló a gépi tanulási modellek képzéséhez más gépi tanulási keretrendszereken. A képzéshez a gépi tanulási modell első lépése egy olyan adatkészlet összegyűjtése, amely tartalmazza azokat az adatmintákat, amelyeket fel szeretnénk ismerni.
Mivel célunk egy LED vezérlése hangparancsunkkal, az összes parancshoz és zajhoz hangmintákat kell gyűjtenünk, hogy meg tudják különböztetni a hangutasításokat és az egyéb zajokat.
Létrehozunk egy három „ LED ON ”, „ LED OFF ” és „ zaj ” osztályt tartalmazó adatsort. Adatkészlet létrehozásához hozzon létre egy Edge Impulse fiókot, ellenőrizze a fiókját, majd indítson új projektet. Betöltheti a mintákat mobiljával, Arduino kártyájával, vagy importálhat egy adatkészletet az élimpulzus-fiókjába. A mintákat a mobiltelefon használatával a legegyszerűbben fiókjába töltheti be. Ehhez csatlakoztassa a mobilt az Edge Impulse-hez.
A mobiltelefon csatlakoztatásához kattintson az " Eszközök " elemre, majd az " Új eszköz csatlakoztatása " gombra.
Most a következő ablakban kattintson a "Mobiltelefon használata" elemre, és megjelenik egy QR-kód. Olvassa be a QR-kódot mobiltelefonjával, vagy írja be a QR-kódon megadott URL-t.
Ez összeköti a telefont az Edge Impulse stúdióval.
Az Edge Impulse Studio-hoz csatlakoztatott telefonjával most betöltheti a mintáit. A minták betöltéséhez kattintson az ' Adatgyűjtés' gombra. Az Adatgyűjtés oldalon írja be a címke nevét, válassza ki a mikrofont érzékelőnek, és adja meg a minta hosszát. Kattintson a „ Mintavétel megkezdése ” gombra , a készülék 2 másodperces mintát fog rögzíteni. Rögzítsen összesen 10–12 hangmintát különböző körülmények között.
Az első osztályú minták feltöltése után állítsa be a címke megváltoztatását, és gyűjtse össze a „ fény kikapcsolt” és „zaj” osztályú mintákat.
Ezek a minták a modul képzésére szolgálnak, a következő lépésekben összegyűjtjük a tesztadatokat. A tesztadatoknak legalább az edzésadatok 30% -ának kell lenniük, ezért gyűjtsük össze a 4 „zaj” és 4–5 mintát a „fény be” és a „kikapcsolt állapot” érdekében.
A modell kiképzése
Mivel az adatkészletünk készen áll, most impulzust hozhatunk létre az adatok számára. Ehhez lépjen az " Impulzus létrehozása " oldalra. Az 1000 ms-os ablakméret alapértelmezett beállításait módosítsa 1200 ms-ra, az 500 ms-os ablak pedig 50 ms-ra. Ez azt jelenti, hogy adataink egyszerre 1,2 másodpercig kerülnek feldolgozásra, minden 58 ms-tól kezdődően.
Most az „ Impulzus létrehozása” oldalon kattintson a „ Feldolgozó blokk hozzáadása ” elemre. A következő ablakban válassza ki az Audio (MFCC) blokkot. Ezután kattintson a " Tanulási blokk hozzáadása " elemre, és válassza ki a Neural Network (Keras) blokkot. Ezután kattintson az ' Impulzus mentése' gombra.
A következő lépésben lépjen az MFCC oldalra, majd kattintson a "Jellemzők létrehozása" gombra. MFCC-blokkokat generál az összes audio-ablakunkhoz.
Ezt követően lépjen az ' NN Classifier' oldalra, kattintson a ' Neural Network settings' jobb felső sarkában található három pontra, és válassza a ' Switch to Keras (expert) mode' menüpontot .
Cserélje az eredetit a következő kódra, és változtassa meg a „ Minimális megbízhatósági besorolás” értéket „ 0,70” -re . Ezután kattintson az ' Edzés megkezdése' gombra. Elkezdi a modell edzését.
tensorflow importálása tf formátumban a tensorflow.keras.modelsből import MaxNorm # modell architektúra modell = Szekvenciális () model.add (InputLayer (input_shape = (X_train.shape,), név = '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 = 'ugyanaz', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, kitöltés = 'ugyanaz')) model.add (Conv2D (5, kernel_size = 5, activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2,padding = 'ugyanaz')) model.add (Flatten ()) model.add (Sűrű (osztályok, aktiválás = 'softmax', név = 'y_pred', kernel_constraint = MaxNorm (3))) # ez vezérli a tanulási arány opciót = Adam (lr = 0,005, béta_1 = 0,9, béta_2 = 0,999) # képezze ki az ideghálózati modellt. Fordítson össze (veszteség = 'kategoriális_keresztrópia', optimalizáló = opt, metrika =) model.fit (X_train, Y_train, batch_size = 32, korszakok = 9, validációs_adatok = (X_teszt, Y_teszt), részletes = 2)részletesen = 2)részletesen = 2)
A modell edzése után megmutatja az edzés teljesítményét. Számomra a pontosság 81,1% és a veszteség 0,45 volt, ami nem ideális teljesítmény, de folytathatjuk. Hatalmas adatkészlet létrehozásával növelheti modelljének teljesítményét.
Most, amikor a beszédfelismerési modellünk készen áll, ezt a modellt Arduino könyvtárként telepítjük. Mielőtt a modellt könyvtárként töltené le, tesztelheti a teljesítményt az „ Élő osztályozás” oldalon. Az Élő osztályozás funkció lehetővé teszi, hogy tesztelje a modellt mind az adatkészlethez tartozó meglévő tesztadatokkal, mind pedig az audioadatok mobiltelefonról történő továbbításával.
Az adatok telefonon történő teszteléséhez válassza telefonján a „ Váltás osztályozási módba” lehetőséget.
Most a modell Arduino könyvtárként való letöltéséhez lépjen a " Telepítés " oldalra, és válassza az " Arduino könyvtár" lehetőséget . Most görgessen lefelé, és kattintson a " Build " gombra a folyamat elindításához. Ez Arduino könyvtárat épít a projektjéhez.
Most adja hozzá a könyvtárat az Arduino IDE-be. Ehhez nyissa meg az Arduino IDE alkalmazást, majd kattintson a Vázlat> Könyvtár belefoglalása> Add.ZIP könyvtár elemre
Ezután töltsön be egy példát a Fájl> Példák> A projekt neve - Edge Impulse> nano_ble33_sense_microphone menüpont megnyitásával.
Arduino kód az Arduino hangfelismeréshez
Itt történt néhány változás a LED hangparancsokkal történő vezérléséhez.
Néhány változtatást hajtunk végre a void ciklusban (), ahol a parancsok valószínűségét kinyomtatja. Az eredeti kódban az összes címkét és értéküket együtt nyomtatja.
for (méret_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", eredmény.osztályozás.címke, eredmény.osztályozás.érték); }
A LED vezérléséhez az összes parancs valószínűségét három különböző változóba kell mentenünk, hogy feltételes utasításokat tudjunk rájuk tenni. Tehát az új kód szerint, ha a „ light on” parancs valószínűsége nagyobb, mint 0.50, akkor bekapcsolja a LED-et, és ha a „ light off” parancs valószínűsége meghaladja a 0.50-t, akkor a LED-et kikapcsolja.
for (méret_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {zaj = eredmény.osztályozás.érték; Serial.println ("Zaj:"); Soros.println (zaj); } (méret_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = eredmény.osztályozás.érték; Serial.println ("Világítás ki:"); Soros.nyomtatás (lightoff); } lighton = 1- (zaj + lightoff); Serial.println ("Világítás BE:"); Soros nyomtatás (lighton); if (lighton> 0,50) {digitalWrite (led, HIGH); } if (lightoff> 0.50) {digitalWrite (led, LOW); }
A módosítások elvégzése után töltse fel a kódot az Arduino-ra. Nyissa meg a soros monitort 115200 baudon.
Így építheti fel a beszédfelismerést az Arduino segítségével, és parancsokat adhat az eszközök kezeléséhez.
Az alábbiakban egy teljes működő videó található könyvtárral és kóddal.