Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • TV (Smart TV)
  • Prepoznavanje znamenki na mikrokontroleru. Glasovno upravljanje Arduinom pomoću Processinga i Google Speech API-ja

Prepoznavanje znamenki na mikrokontroleru. Glasovno upravljanje Arduinom pomoću Processinga i Google Speech API-ja

U ovom vodiču za Arduino pokazat ćemo vam kako ga koristiti mobilna aplikacija za Android i bluetooth modul HC-05 za glasovno upravljanje LED-om.

Za ovaj vodič trebat će nam minimum komponenti. Nakon što završite lekciju, možete zakomplicirati krug i dodati uređaje po svom ukusu.

  • Arduino UNO
  • HC-05 Bluetooth modul
  • Daska za kruh
  • Žice
  • Otpornik od 330 ohma
  • Svjetleće diode (LED)

Korak 2: Povezivanje Bluetooth modula HC-05

Standardni Bluetooth modul HC-05 ima šest pinova. Međutim, u ovom projektu koristit ćemo samo 4.

Koristit ćemo VCC pin, GND pin, TXD pin i RXD pin. VCC pin bluetooth modula spojen je na +3,3 V iz Arduina. GND pin modula spojen je na Arduino GND (uzemljenje). TX pin bluetooth modula spojen je na digitalni pin 0 (RXD), a RXD pin je spojen na digitalni pin 1 (TXD).

Korak 3: Spajanje LED dioda

Sljedeći korak u stvaranju LED dioda je kontroliran glasom, je spojiti LED diode na Arduino preko matične ploče.

Prvo se povežite kratki kraj LED na masu. Zatim spojite dugi kraj svake LED diode na otpornik od 330 ohma. Na kraju, spojite strujni otpor iz LED dioda na digitalne pinove na Arduinu.

U ovom projektu spojit ćemo jednu LED na digitalni izlaz 2, drugi na digitalni izlaz 3, a zadnji LED na digitalni izlaz 4.

Korak 4: Snaga

Za ovaj projekt možemo napajati Arduino putem bilo kojeg izvora napajanja od +5 V. Za napajanje Arduina možete koristiti USB priključak s vašeg računala, ali u ovom projektu koristit ćemo prijenosnu bateriju od 5 V. Prije spajanja napajanja na vaš Arduino, provjerite je li GND Arduina spojen na uzemljenje matične ploče.

Korak 5: Kod

Kod za naš projekt je ispod.

Korak 6: Korištenje mobilne aplikacije

Možete početi testirati svoj projekt preuzimanjem Android aplikacije - BT Voice Control za Arduino (BT Voice Control za Arduino) stvorio SimpleLabsIN.

Nakon što ste preuzeli i instalirali aplikaciju na svoj telefon na Temeljen na Androidu kliknite na traku izbornika s desne strane gornji kut i odaberite "Poveži robota". U novom prozoru koji se pojavi odaberite HC-05 Bluetooth modul i povežite ga.

Sada kada razgovarate sa određene naredbe od koda do vašeg uređaja putem aplikacije, određene LED diode trebale bi se uključiti i isključiti. Pažljivije pogledajte kod u kojem su navedene naredbe i dodajte svoju. Na primjer, umjesto "*uključi crveno" možete jednostavno navesti "crveno". Tako će naredbe biti brže, kraće i jasnije.

Korak 7: Konačni rezultat

Konačni rezultat možete vidjeti u videu ispod.

Želimo vam uspješne projekte! Ne zaboravite ostaviti komentare o projektu u našem

U ovom projektu kombinirao sam detektor za detekciju lica i sustav za praćenje.

Ukratko bit projekta: web kamera postavljena na rotirajući mehanizam povezana je s računalom kojim upravlja operacijska dvorana Windows sustavi i s instaliranim softver OpenCV. Ako program otkrije lice u vidnom polju web kamere, izračunava se središte lica. Koordinate X i Y šalju se Arduino kontroleru koji je USB-om spojen na računalo. Zauzvrat, Arduino kontroler, na temelju primljenih naredbi, upravlja s dva servomotora: duž X koordinate i duž Y koordinate, tj. osiguran je sustav praćenja.

OpenCV biblioteka ( Otvoreni izvor Computer Vision Library) može se preuzeti. Biblioteka je višeplatformska i trenutno postoji za sljedeće operativne sustave: Windows, Linux, Android, Mac OS pa čak i iOS. Knjižnica omogućuje obradu slike u stvarnom vremenu. Napisano u C/C++.

Da. Ovaj projekt je mješavina mekog i teške odluke. Slika se obrađuje na računalu, a servo se kontrolira pomoću kontrolera.

Dakle, ono što sam koristio za projekt:

Softver:
Arduino IDE 1.0 za Windows

Microsoft Visual C++ 2010 Express SP1
Serijska C++ biblioteka za Win32 (autor Thierry Schneider)

Željezo:
računalo s Windows 7 SP1
Arduino Uno ili kompatibilni + PSU
2 servo motora
USB web kamera

Pa, idemo.

Korak 1: Instalirajte softver

1) Ako imate Windows OS, preuzmite datoteku OpenCV-2.3.1-win-superpack.exe (ili više kasnija verzija) i instalirajte biblioteku.

2) Preuzmite i instalirajte Microsoft Visual C++ 2010 Express. Ako imate 64-bitni Windows verzija, tada ćete također morati preuzeti Windows SDK(ali može biti problema za verziju 64; nisam uspio natjerati OpenCV da radi pod Windows 7 x64).

Pročitajte postupak postavljanja OpenCV-a za Visual C++ na službenoj stranici.

Korak 2. Montaža kamere i servo uređaja

Dizajn nisam učinio "izdržljivim", jer nakon postizanja konačnog cilja sve rastavljam za sljedeći projekt.
Pričvrstio sam web-kameru na servomotor osi X, a ona ju je zauzvrat pričvrstio na servomotor osi Y. I učvrstio sam cijelu ovu strukturu stezaljkom iz "treće ruke".

Korak 3: Povezivanje

Spajanje servomotora:
Žuta igla servo osi X povezana je s iglom 9 Arduino kontroler
Žuti pin servo osi Y spojen je na pin 10 Arduino kontrolera
Crveni Vcc pin iz servoa spaja se na 5V pin
Crni GND pin iz servo uređaja spojen je na GND pin Arduino kontrolera

Veza web kamere:
Web kamera se povezuje s računalom putem USB sučelje. C++ program identificira web-kameru prema broju USB priključka. Možda ćete morati navesti port u programu.

Spajanje Arduino UNO kontrolera:
Kontroler se također povezuje s računalom putem USB sučelja. U sustavu se pojavljuje virtualni COM port koji se mora dodati u programski kod u C++.

Nekako je došla ideja da se oglasim Arduino kontrola, ali sam Arduino nije dovoljan, jer... za sustav pametna kuća Također morate komunicirati s računalom i njegovim sustavima.

Pronalaženje rješenja:

BitVoicer
naišao sam razne vrstečlanke koji koriste BitVoicer u kombinaciji s Arduinom, no problem je u tome što BitVoicer radi samo na Windowsima, a to ne dopušta korištenje sustava na jednostavni uređaji kao Rasberry Pi koji pokreće Unix.
Arduino prepoznavanje glasa
Arduinom se također može upravljati glasom zahvaljujući modulu za prepoznavanje glasa, ali za sada ga nemam želju kupiti i postoje brojne neugodnosti pri korištenju ovog modula: ograničena količina naredbe, zamorna obuka, nove naredbe zahtijevaju flashanje modula, što je već nedostatak ako je sustav otklonjen i instaliran.

Riješenje

Počeo sam tražiti rješenje za više platformi koje bi omogućilo sustavu da radi na više operativni sustavi. Našao ovo: Knjižnica govora u tekst za Java/obradu. Kompleks se implementira na temelju jezika Obrada (Java) I Google Speach API O mačku se već prije pisalo. Ova odluka Omogućuje praćenje glasa u stvarnom vremenu omogući AutoRecord(), označite ograničenje glasnoće enableAutoThreshold(), Spojiti vanjski mikrofoni getLineIn(), navedite jezik prepoznavanja setLanguage(String). Kompletan popis značajki i specifičnosti dostupan je na web stranici razvojnog programera: http://stt.getflourish.com. Za rad nam je potreban Google Speech API ključ. Ovdje je opisano kako ga dobiti: www.chromium.org/developers/how-tos/api-keys. Jedina negativna točka je što Google Speech omogućuje obradu samo 50 zahtjeva dnevno, ali u praksi se obradi više od 500 zahtjeva.

Radi lakšeg snalaženja u tekstu u budućnosti, prilažem sve izvore koji već sadrže glasovne naredbe, vezu na Arduino pločicu, skicu za Arduino ploče, glasovna potvrda fraza i sve ostalo što je sada dostupno i radi: izvorni kodovi. Nakon preuzimanja, mapu GoogleTTS postavljamo u biblioteke Processing"a. Skica za Arduino nalazi se u mapi GoogleTTS/ArduinoSerial. Sve je napisano u Processing 3.0a4, dostupnom u pre-izdanju na službenoj web stranici.

Provedba("Slušaj moju naredbu!"):
Odlučili smo se za priznanje. Sada moramo uhvatiti naredbe koje su nam potrebne i donositi odluke na temelju njih. Za ovo je odgovoran odjel:
void commands() ( if (result.equals("arduino")) ( // Traženje podudaranja // Izvrši naredbu kada se primi podudaranje ) else if (result.equals("koliko je sati")) ( / / Izvrši naredbu kada se primi podudaranje ))
Glasovni odgovor
Sada nam treba alat koji će nam odgovoriti ljudskim glasom ako se pronađe podudaranje. Odabrani alat za implementaciju bio je Google prevoditelj, odnosno modul koji tekst pretvara u glas. Tekst se na zahtjev šalje Google poslužitelju i pretvara u zvučna datoteka i poslali nam natrag u mp3 formatu. Za ovo je odgovoran odjel:
void googleTTS(String txt, String language) ( // tekst se pretvara u zvuk pomoću naredbe googleTTS("text", "language") String u = "http://translate.google.com/translate_tts?tl="; u = u + jezik + "&q=" + txt; u = u.replace(" ", "%20"); pokušaj ( URL url= novi URL(u); pokušajte ( URLConnection connection = url.openConnection(); connection.setRequestProperty("User-Agent", "Mozilla/4.0 (kompatibilan; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; . NET CLR 1.2.30703)"); connection.connect(); InputStream je = connection.getInputStream(); File f = new File(sketchPath + "/" + txt + ".mp3"); OutputStream out = new FileOutputStream( f); bajt buf = novi bajt; int len; while ((len = is.read(buf)) > 0) ( out.write(buf, 0, len); ) out.close(); is.close( ); println("Datoteka stvorena: " + txt + ".mp3"); ) catch (IOException e) ( e.printStackTrace(); ) ) catch (MalformedURLException e) ( e.printStackTrace(); ) )

Odjeljak je odgovoran za izravnu obradu tekstualnih izraza:
void voicer(String s) ( // Izvršava se naredbom voicer("text") println(s); // koristi se za nadzor teksta File f = new File(sketchPath + "/" + s + ".mp3"); // Provjera datoteke // Ako datoteka već postoji, reproduciraj datoteku if(f.exists())( println("Datoteka već postoji! Puštam datoteku!"); player = minim.loadFile(s + ".mp3"); player.play (); ) // Ako datoteka još ne postoji, stvorite je else ( println("Datoteka još ne postoji! Stvaram!"); googleTTS(s, "ru"); player = minim.loadFile(s + ".mp3"); player.play(); ) )

Primjer implementacije prepoznavanja i glasovne potvrde:
void commands() ( if (result.equals("computer")) ( // Traženje podudarnog voiceer("Listen"); // Primanje glasovne potvrde // Izvršenje naredbe kada se primi podudarnost ) )
Ziv je!

Obrada + Arduino

Pa, čini se da je uspjelo, ali nešto nedostaje. Hajdemo sada "sprijateljiti se" s Arduinom.
Inicijaliziramo serijsku vezu u Obradi za slanje podataka Arduinu (za Mac korisnici i Unix):
String portName = Serial.list(); mojPort = novi serijski(ovo, naziv porta, 9600); myPort.bufferUntil("\n");

Za Windows korisnici:
String myPort = new Serial(ovo, "Vaš COM port", 9600); myPort.bufferUntil("\n");

I tamo pošaljite naredbu ako se pronađe podudaranje glasa:
void commands() ( if (result.equals("turn on the light")) ( // Ako je glasovna fraza prepoznata kao "turn on the light", tada izvršite zahtjev myPort.write("High"); / / Šalje naredbu High govorniku serijske veze ("Uključi svjetlo"); // Glasovna potvrda da je naredba izvršena ) else if (result.equals("Isključi svjetlo")) ( myPort.write( "Low"); // Šalje naredbu Low glasovniku serijske veze (" Isključivanje svjetla"); // Potvrda // Izvrši naredbu kada se primi podudaranje) )

Sada prijeđimo na Arduino ploču. Moramo slušati serijski port i kada pronađemo naredbu s popisa, izvršiti potrebnu akciju prema naredbi. Skica je vrlo jednostavna:
int led = 13; // LED pin na ploči void setup() ( Serial.begin(9600); // Inicijaliziraj serijsku vezu pinMode(led, OUTPUT); // LED pin prenosi podatke) void loop() ( int i=0; / / varijabla za stavljanje niza u međuspremnik char; // polje međuspremnika za stavljanje niza u if(Serial.available())( // Provjera serijski priključak za kašnjenje dostupnosti podataka (100); //stavimo ono što smo pročitali u međuspremnik while(Serial.available() && i< 99) { buffer = Serial.read(); } //закрываем массив buffer="\0"; String val = buffer; if (val == "High") { // Если получили значение High Serial.println("Led is On"); // Отправляем в Serial подтверждение получения digitalWrite(led, HIGH); // Включаем светодиод } if (val == "Low") { // Если получили значение Low Serial.println("Led is Off"); // Отправляем в Serial подтверждение получения digitalWrite(led, LOW); // Выключаем светодиод } } }
Svi. Provjerimo.

Problemi i planovi:

Jer Ovog puta nisam radio programiranje, ne razumijem u potpunosti neke stvari u procesu otklanjanja pogrešaka. Bio bih zahvalan ako bi mi netko mogao reći kako riješiti dolje navedene probleme:

Najosnovniji problem je to što se ne izgovori cijela glasovna fraza. nestati zadnja slova. Iako zvučna datoteka dolazi s Google poslužitelji V normalan oblik. Koliko ja razumijem situaciju: postoji problem s audio playerom, ali još nije jasno gdje točno.
- Već sam napisao da Google Speech API ima ograničenje od 50 zahtjeva dnevno, ali zapravo ispada više. U svakom slučaju, ovo nije dovoljno. Planiram registrirati lokalno priznanje glavni tim i tek nakon prepoznavanja ostatak teksta se šalje Googleu na obradu.Tražim rješenje.
- Mislim da ne bi škodilo poslati naredbe Arduino Ethernet štitu, jer... Neki sustavi mogu biti smješteni na znatnoj udaljenosti od glavnog računala i serijska veza ovdje više neće raditi. Ovih dana ću se pozabaviti ovom odlukom, jer... Nemam ruter da na njega povežem Arduino s Ethernet štitom.

To je sve! Nemojte suditi strogo na temelju linija koda! Upravo sam počeo proučavati ovu odskočnu dasku i bit ću vam iznimno zahvalan ako mi natrljate nos kako to ne treba raditi i pokažete mi kako to učiniti. Također će mi biti drago ako se i drugi zainteresirani pridruže ovom projektu – uvijek sam otvoren za komunikaciju!

Sjećate li se kako je prije nekoliko godina (a možda i sada) bila popularna ideja da se svjetlom u prostoriji upravlja pljeskanjem rukama? Ali, vrlo je zgodno, ležiš u krevetu, lijen si da ustaneš i ugasiš svjetlo pljeskom ruku, ili idemo kući, mrak je, dugo treba pronaći prekidač, a onda sa samog praga začuje se pljesak-dva i već svijetli. Čini mi se da je ovaj koncept još uvijek relevantan, ali se može primijeniti na više visoka tehnologija u usporedbi s onim što je bilo prije 5, 10 godina. Sada za relativno mali iznos možete kupiti nekoliko dijelova i programirati dizajn slične funkcije, o čemu pričati ćemo ispod.

Danas ćemo pogledati modul dizajniran za prepoznavanje glasovnih naredbi (uključujući samo glasove unutar snimljene glasovne naredbe) – Modul za prepoznavanje glasa V3.1 (V3) ili naziv za kodiranje koji se često susreće FZ0475.

Paket isporuke uključuje sam modul ( isprintana matična ploča Vrlo dobra kvaliteta), mikrofon na savitljivoj nozi s 3,5 mm jack konektorom i kutnim PLS kontaktima s korakom od 2,56 mm za ploču modula (ne mogu se koristiti ako su na drugi način spojeni na kontakte modula).

Danas postoji nekoliko vrsta modula slične funkcionalnosti. različitih proizvođača i programeri ili izvršenja. Ovaj modul prepoznavanje glasa, po mom mišljenju, ima određenu ravnotežu između cijene, funkcionalnosti i praktičnosti. Modul EasyVR bit će snažniji i znatno skuplji. Moduli temeljeni na LD3320 bit će jeftiniji i nezgodniji (nezgodni barem zato što nije lako pronaći normalan opis za njih, ali inače je ovo subjektivno).

Karakteristike modula za prepoznavanje glasa V3.1 (V3):

  • Napon napajanja - 5 volti
  • Potrošnja struje - do 40 mA
  • Sučelja – UART, GPIO
  • Preciznost prepoznavanja – 99% (pod idealnim uvjetima)
  • Domet - ovisi o mikrofonu koji se koristi; za standardni mikrofon uključen u kompletu, domet je 0,5 - 1 metar maksimalna udaljenost ako je glas dovoljno glasan, ako je glas tih, onda ćete morati približiti mikrofon ustima

Modul je mala uredna ploča na kojoj se nalazi glavni mikrokontroler (crna mrlja), 3,5 mm jack konektor za spajanje mikrofona i mikro krug brza memorija, GPIO, UART i strujni kontakti, par LED dioda i ostala potrebna oprema potrebna za rad sklopa - otpornici, kondenzatori, kvarc. Kompaktna veličina ploče omogućit će vam jednostavnu integraciju modula u vlastiti razvoj. Za povećanje dometa glasovnih naredbi, vjerojatno je potrebno koristiti mikrofon s pojačalom. Nakon što se postigne prihvatljiv raspon, modul je prikladan za korištenje u sustavima pametne kuće. Modul se bez modifikacija za poboljšanje radnog dometa može koristiti u stolnim sustavima upravljanja, kao iu sigurnosnim sustavima (kontrola i ograničenje pristupa). Kod standardnog mikrofona, zbog malog dometa, najpouzdanije je koristiti modul za prepoznavanje glasa kao slušalicu i bežično prenijeti naredbe kontroleru koji upravlja nečim pomoću baterije i bežičnih modula (na primjer, HC-05 ili HC-12 ili bilo koje druge prikladne). Modul može raditi bez vanjskog mikrokontrolera, budući da proizvođač osigurava funkcionalnu neovisnost, potrebno je samo jednom snimiti glasovne naredbe i postaviti postavke za samostalan rad uz pomoć vanjski uređaj(PC ili MK).

Dakle, da bismo počeli raditi s modulom za prepoznavanje glasa, moramo ga spojiti na računalo (trebate USB-UART adapter) ili na mikrokontroler (morate razviti programski kod za upravljanje modulom).

Ne postoji temeljna razlika u upravljanju i konfiguriranju modula između spajanja na računalo ili mikrokontroler, stoga ćemo radi jasnoće koristiti osobno računalo za konfiguraciju. Upute opisuju naredbe za modul u heksadecimalnom obliku, tako da će vam zbog praktičnosti trebati i terminal koji prenosi bajtove u heksadecimalnom obliku, na primjer, AccessPort (može se preuzeti na kraju članka). Osim toga, proizvođač se fokusira na korisnike Arduino platforme te daje biblioteku za korištenje ovog modula i upute za korištenje te biblioteke. Međutim, mnoge od nas mnogo više zanima rad sa samim modulom izravno nego kroz Arduino omotač.

Prije početka rada, pogledajmo ploču. Na krajevima ploče s desne strane nalazi se utičnica za spajanje mikrofona, s druge četiri kontakta UART sučelja. Na dnu se nalazi osam kontakata koji služe za emitiranje signala uzrokovanih prepoznavanjem glasovnih naredbi. Na vrhu, četiri pina konfigurirana kao ulaz signala koriste se za prebacivanje između grupa (od po sedam glasovnih naredbi) naredbi, ako se takva značajka koristi. A preostalih šest pinova na vrhu vjerojatno se koriste za spajanje na memoriju modula.

Za rad i konfiguraciju modula koristi se sustav naredbi. Opći obrazac okvir izgleda ovako:

Prve četiri naredbe 00, 01, 02, 03 koriste se za provjeru statusa modula i njegovih postavki. Sljedećih šest naredbi 10, 11, 12, 13, 14, 15 koriste se za promjenu postavki modula, uključujući kontrolu izlaznog priključka i postavke automatskog učitavanja. Zatim se koriste tri naredbe 20, 21, 22 za snimanje glasovnih naredbi. Sljedeće tri naredbe 30,31,32 koriste se za kontrolu prepoznavanja glasovnih naredbi. Naredbe 0A, 0D, FF koriste se samo kada podatke vraća sam modul. Zapravo nema puno naredbi i sve to nije tako strašno kao što se čini na prvi pogled u dokumentaciji za modul. Pogledajmo naredbe potrebne za rad s modulom za prepoznavanje glasa. Nisu sve postojeće naredbe praktične.

Važno je napomenuti da modul može raditi bez vanjskog upravljačkog mikrokontrolera, a također može samostalno kontrolirati nešto svojim izlaznim portovima. Da biste to učinili, trebate ih konfigurirati (naredbe 12, 13, 14).

Tim 12 – konfigurirati izlazne portove. Ova naredba konfigurira način rada izlaznih priključaka modula za prepoznavanje glasa.

Format: | AA | 03 | 12 | NAČIN | 0A |

Pri čemu MODE može imati četiri vrijednosti: 0 – pulsni način rada (kada se aktivira glasovna naredba, izlaz koji odgovara naredbi će promijeniti svoje stanje za vrijeme postavljeno naredbom 13), 1 – način prebacivanja (prebacivanje ili okretanje) (svaki put pokrenuta je glasovna naredba, izlaz koji odgovara glasovnoj naredbi je invertiran), 2 – uključen način rada (kada se aktivira glasovna naredba, izlaz će prijeći u stanje logičke jedinice i više neće ići u stanje logičke nule, reset je provodi se naredbom 14), 3 – isključeno stanje (slično uključenom načinu rada, samo naprotiv, kad se aktivira glasovna naredba, izlaz prelazi u stanje logičke nule).

Najpraktičniji je način rada prekidača, koji ne zahtijeva dodatne naredbe. Pulsni način rada bilo bi dobro, ali logika ovog moda je takva da kada se aktivira glasovna naredba, on izdaje logičku jednom, na vrijeme od 10 ms do 1 s. Nije dovoljno. Iako, ovisno o zahtjevima za ovaj način rada, može biti koristan. Načini uključivanja i isključivanja implementirani su nezgodno jer zahtijevaju izvršavanje dodatnih naredbi.

Tim 13 – postavljanje trajanja pulsa odgovarajućeg načina rada.

Format: | AA | 03 | 13 | RAZINA | 0A |

Gdje LEVEL ima vrijednost od 00 do 0F (što odgovara trajanju od 10 ms do 1 s).

RAZINA trajanje
0x00 10 ms
0x01 15 ms
0x02 20 ms
0x03 25 ms
0x04 30 ms
0x05 35 ms
0x06 40 ms
0x07 45 ms
0x08 50 ms
0x09 75 ms
0x0A 100 ms
0x0B 200 ms
0x0C 300 ms
0x0D 400 ms
0x0E 500 ms
0x0F 1 s

Tim 14 – resetirati izlaz portova u stanje dano modusima uključeno ili isključeno.

Format: | AA| 03 | 14 | FF | 0A | - resetirati sve izlazne portove

| AA| 03+n | 14 | IO0 | ... | ION | 0A | - resetirati odabrane izlazne portove

Gdje je n broj pinova koji se selektivno resetiraju, IO0...IOn je popis ovih pinova u okviru za slanje podataka.

Dalje, da bi se glasovne naredbe mogle izvršiti, one moraju biti snimljene u modul (uvježbajte modul). Ovdje postoji ograničenje. Istovremeno se može prepoznati samo sedam naredbi, iako se može snimiti mnogo više. Kako bi se proširio raspon glasovnih naredbi koje će biti prepoznate, koristi se sustav grupiranja (naredba 32) kojim se upravlja preko ulaznih portova modula. Postavljanjem konfiguracije signala na ovim pinovima odabirete grupu naredbi koje će biti prepoznate. To je zbog ograničene izvedbe glasovnog upravljača modula.

Tim 20 - snimanje jedne ili više glasovnih naredbi.

Format: | AA| 03+n | 20 | R0 | ... | Rn | 0A |

Gdje je n broj snimljenih glasovnih naredbi (ako se snima jedna naredba n=0, dvije naredbe n=1 i tako dalje u skladu s općim formatom za prijenos naredbi Lenght - duljina), R0...Rn brojevi glasovnih naredbi (AA 03 20 03 0A - naredba za snimanje treće glasovne naredbe).

Tim 21 - snimite jednu glasovnu naredbu i postavite potpis za nju.

Format: | AA| 03+SIGLEN | 21 | SNIMITI | SIG | 0A |

Gdje je RECORD broj glasovne naredbe, SIG je potpis (može se sastojati od nekoliko bajtova, tako da svaki bajt može odgovarati kodiranju znakova abecede ako je potrebno), SIGLEN je broj bajtova koji čine potpis.

Tim 22 - dodati ili izbrisati potpis za odabranu glasovnu naredbu.

Format: | AA | 03+SIGLEN | 22 | SNIMITI | SIG | 0A | - dodavanje potpisa

| AA | 03 | 22 | SNIMITI | 0A | - uklanjanje potpisa

Prilikom snimanja glasovnih naredbi morate se voditi LED signalima. Nakon unosa naredbe kojom se pokreće proces snimanja žuta (narančasta) LED dioda počinje brzo treptati. Čim crvena LED dioda zasvijetli, morate izgovoriti glasovnu naredbu u mikrofon. U slučaju uspjeha, žuta (narančasta) LED lampica će zasvijetliti, a zatim ponovno crvena - trebate potvrditi glasovnu naredbu i izgovoriti je ponovo. U slučaju uspjeha, oba LED-a će svijetliti - glasovna naredba je spremljena.

Nakon što se glasovne naredbe snime u modulu, ništa se neće dogoditi dok se te naredbe ne stave u "Prepoznavač" modula. Da biste to učinili, trebate koristiti naredbu 30. Nakon izvršenja ove naredbe, modul će početi čekati da se glasovna naredba podudara sa spremljenim uzorcima. Istovremeno se može prepoznati samo sedam naredbi. U tom će slučaju žuti (narančasti) LED na ploči modula polako treptati.

Tim 30 - učitavanje zapisa u Prepoznavač modula.

Format: | AA| 2+n | 30 | R0 | ... | Rn | 0A |

Format odgovora je sljedeći: | AA | 07 | 0D | 00 | GRPM | R | RI | SIGLEN | SIG | 0A |

Gdje je GRPM informacija o grupi kojoj naredba pripada (ako se koristi), R je prepoznata glasovna naredba (pomoću ovih podataka možete razlikovati naredbe jedne od drugih ako se ne koriste potpisi), RI je indeks naredbe u prepoznavaču, SIGLEN je duljina potpisa u bajtovima, SIG - potpis (ako se koristi).

I na kraju, ako modul mora raditi samostalno, tada morate koristiti naredbu 15 za automatsko pokretanje prema unaprijed postavljenim postavkama prepoznavača. U tom će slučaju modul za prepoznavanje glasa raditi samostalno bez potrebe za inicijalizacijom nakon uključivanja.

Tim 15 - postavljanje prepoznavača na automatsko pokretanje kada je uključen.

Format: | AA| 03 | 15 | 00 | 0A | - onemogućiti funkciju automatskog pokretanja

| AA| 03+n | 15 | BITMAP | R0 | ... | Rn | 0A | - postavljanje funkcije automatskog pokretanja

Za kontrolu ispravnog izvršavanja naredbi, svaka od njih ima svoj odgovor. Ako je potrebno, sve podatke možete pronaći u dokumentaciji za modul za prepoznavanje glasa priloženoj na kraju članka. Ne zaboravite da sve numeričke vrijednosti predstavljen u heksadecimalni oblik.

Stoga, pomoću sustava naredbi, možete fleksibilno konfigurirati modul za prepoznavanje glasa za korištenje u različite svrhe. Ako jednostavne kontrole Budući da izlazni priključci modula nisu dovoljni, modul za prepoznavanje glasa može se povezati s drugim uređajima putem UART-a ili GPIO-a. Za bežična veza Možete koristiti prethodno razmatrane module.

Pomoću bežičnih modula možete spojiti modul za prepoznavanje glasa na sve uređaje gdje je to potrebno. Na primjer, spojimo ga na mikrokontroler koji će upravljati LED diodama na temelju dobivenih podataka o prepoznavanju glasovnih naredbi. Bežični moduli omogućuju prijenos podataka u dva smjera, pa po potrebi možete napisati inicijalizacijski kod za mikrokontroler glasovni modul i snimke glasovnih naredbi. U našem slučaju, pod kontrolom računala, nekoliko glasovnih naredbi je već snimljeno u modulu i prepoznavanje je konfigurirano za automatsko pokretanje kada se uključi napajanje, tako da ćemo za mikrokontroler registrirati samo prijem podataka i LED kontrolu s obzirom na te podatke. Mikrokontroler STM32F103C8T6 koristi USART1 za primanje podataka i pinove PB10...PB15 konfigurirane kao izlaz, koji upravlja LED diodama. Izvorni kod nalazi se u dodatku na kraju članka.

Malo o rezultatima

Prepoznavanje glasa nije sasvim točno. Ovisi o odabranim naredbama i glasu korisnika. Tijekom testiranja pronašao sam nekoliko negativnih točaka. Prilikom učenja naredbi modula odabrane su glasovne naredbe „jedan“ i „dva“. Naredba "dva" uvijek je prolazila jasno, ali naredba "jedan" često se identificirala kao naredba "dva" i kod druge naredbe se izvršavao u skladu s tim. Nadalje, pri pokušaju davanja glasovnih naredbi na engleskom (a one nisu bile snimljene u glasovnom modulu), naredba "jedan" gotovo je uvijek definirana kao "dva". Možda je sve u izgovoru, intonaciji i drugim aspektima ljudskog glasa ugrađenim u algoritam za kodiranje glasovnog modula izgovorenih naredbi. Međutim, ove tajne proizvođača otvoreni pristup nemoj dati. Osim toga, na kvalitetu prepoznavanja utječu vanjski uvjeti buke - buka s ulice, buka ventilatora, nasumični zvukovi itd. Proizvođač skreće pozornost na činjenicu da visoka razina točnost prepoznavanja odvija se u idealnim uvjetima. Ideja korištenja mikrofona s pojačalom će, naravno, povećati radni domet uređaja, ali će također povećati vjerojatnost grešaka, jer će pojačanje glasa također povećati buku.

Eventualno, ako imate niske zahtjeve za prepoznavanje glasa i izvršavanje glasovnih naredbi, onda će ovaj modul pošteno razraditi novac potrošen na njega.

Popis radioelemenata

Oznaka Tip Vjeroispovijest Količina BilješkaDućanMoja bilježnica
IC1 MK STM32

STM32F103C8

1 U bilježnicu
VR1 Linearni regulator

AMS1117-3.3

1 U bilježnicu
MOD1, MOD3 Bežični modulHC-122 U bilježnicu
MOD2 Modul za prepoznavanje glasaVR3.11 U bilježnicu
Z1 Kvarcni8 MHz1
  • Uradi sam ili uradi sam
  • Pozdrav Giktimes!

    Kao što naslov sugerira, ovaj će se članak usredotočiti na prepoznavanje brojeva na mikrokontroleru. Želio bih odmah rezervirati da ovaj članak neće pružiti izvor Za razmatranje tehnologije ili algoritma prepoznavanja, reći ću samo da se koriste ideje sustavnog pristupa. Neki od njih navedeni su u našim člancima (i ovdje). To je zbog činjenice da naš pristup teži originalnosti, ali zahtijeva pojašnjenje nekih pitanja. Netko bi mogao reći: "još jedan članak o programiranju mikrokontrolera." Nikako, potraga za sličnim projektima nije dala jasne rezultate, osim ovoga video. Iz rasprava na forumima jedno je jasno: ideja dobivanja sličan uređaj(kamera + mikrokontroler = izlazni rezultat prepoznavanja, a ne samo snimljena slika) došao je mnogima, ali je ostao bez implementacije. A prepoznavanje, po svemu sudeći, zahtijeva puno računalnih resursa i mikrokontroleri nisu prikladni za to, pogotovo o Arduinu je bilo izjava da je to općenito nemoguće. Ako ste zainteresirani, pogledajte kat.

    Kako bismo izbjegli očita pitanja, odgovorimo na njih:

    • Ne, ovo nije usluga prepoznavanja slika.
    • Ne, ovo nije OpenCV
    • Ne, ovo nisu neuronske mreže
    • Koristi se morfološka analiza objekata koji čine broj
    • Da, prepoznavanje vrši mikrokontroler!

    Ideja

    Ukratko, sve je počelo sa željom da se okušam i isprobam svoje ideje u prepoznavanju slika. Tijekom rasprave došli smo do zaključka da se s malo računalne snage možemo snaći u rješavanju ovog problema. Iz očitih razloga nećemo opisivati ​​pojedinosti tih rasprava.

    Montaža

    Dakle, zadatak je postavljen, potrebna je provedba. Bez odstupanja od već ustaljenog
    uzimamo ono što nam je pri ruci. A imao sam pri ruci par Arduino Unosa, stari optički miš i CD jedinicu. Usput, za što bi koristio senzor? optički miš Kao kamera za dobivanje slike ponukalo nas je nešto što smo davno pročitali, a zapravo i sav ostali “mišji” materijal. Jedino što smo trebali učiniti je odlemiti senzor i cijeli njegov kabelski snop radi lakšeg korištenja, te na njega zalijepiti leću koju smo pažljivo “iščupali” iz CD pogona. To je bilo potrebno kako bi se povećala udaljenost od subjekta do kamere, inače brojke naše veličine ne bi stale i bio bi vidljiv samo mali dio. Usput, pokušali smo pričvrstiti optiku s web kamere ispred objektiva s CD pogona, ali nekako nije išlo.

    Više


    Tada se postavilo pitanje kako ovu kameru postaviti iznad subjekta. Ovdje nam je puno pomogao stari pokvareni mikroskop koji je ležao besposlen. S poštovanjem smo uklonili mehanizam za kontrolu pozornice s njega. Ovaj mehanizam nam je omogućio pomicanje kamere u samo dvije osi, pa je odmah došla ideja da koristimo vodilicu laserske glave s CD pogona. Sve je to bilo pričvršćeno za kućište dugotrajne CD jedinice. Kao rezultat, dobili smo cool mehanizam za pozicioniranje kamere.

    Više


    Ukupno: imamo takozvanu kameru, postoji mehanizam za pozicioniranje, ostaje samo staviti papirić s brojem i dobiti sliku s kamere. Tu su počeli “problemi”. Budući da su karakteristike "miša" optički senzor vrlo oskudni za korištenje kao kamera, počeli su improvizirati s osvjetljenjem.

    Više


    Postalo je jasno da neće biti moguće samo istaknuti intenzitet; smjer vanjskog svjetla također se prilagođava. Morao sam uključiti još jedan Arduino da kontroliram intenzitet pozadinskog osvjetljenja ( Naravno, bilo je moguće kontrolirati ga drugačije, ali kasnije ne samo pozadinskim osvjetljenjem, već i prebacivanjem brojeva na indikatoru). Na kraju se pokazalo da je snimanje na svjetlu puno bolje. A ako, primjerice, koristite svjetleći indikator od sedam segmenata kao metu, senzor ga savršeno dobro vidi. Sada imamo indikator i traku s bijelim brojevima ispunjenu crnom pozadinom kao objekte snimanja.

    lijevo je slika u sivim tonovima dobivena od indikatora (takvu sliku primamo od senzora), desno je binarizirano.

    Više


    Opći pogled na montiranu instalaciju


    mogućnost rane instalacije


    Blok prepoznavanja


    Važnu ulogu u našoj instalaciji ima tzv. jedinica za prepoznavanje (na gornjoj slici). Kao što vidite, sastoji se od Arduino Uno i dobro poznatog wifi transmitera ESP8266. Da objasnim, potreban nam je wifi odašiljač kako bismo vidjeli rezultat prepoznavanja na tabletu. Aplikacija na tabletu šalje zahtjev, Arduino po primitku zahtjeva “hvata” sliku sa senzora miša, zatim je binarizira. Nakon binarizacije dolazi do prepoznavanja, a nakon njegovog završetka generira se odgovor. U odgovoru šaljemo rezultat prepoznavanja i 41 bajt za izradu binarizirane slike na zaslonu tableta, da tako kažemo, radi jasnoće.

    Ako pogledate unatrag, Arduino ima dobre funkcije: rad s kamerom, prepoznavanje i rad s esp8266. Ono što nije moglo ne utjecati na rad je da smo se morali nositi s nedostatkom pamćenja. Nikada nisam mislio da ću ikada morati vratiti svaki bajt sjećanja.

    Demonstracija procesa prepoznavanja

    Umjesto zaključka

    To je sve. Predstoji još puno posla. I prvi zadatak: prepoznavanje brojeva (nizova brojeva) snimljenih “ljudskom” kamerom (a ne “senzorom miša”) i prijenos razvijene tehnologije na ESP8266 te smanjenje intenziteta borbe za svaki bajt memorije.

    Rado ćemo odgovoriti na Vaša pitanja.

    Najbolji članci na temu