Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Televizori (Smart TV)
  • Prepoznavanje cifara na mikrokontroleru. Arduino glasovna kontrola s obradom i Google Speech API

Prepoznavanje cifara na mikrokontroleru. Arduino glasovna kontrola s obradom i Google Speech API

U ovom Arduino tutorijalu pokazat ćemo vam kako koristiti Android mobilnu aplikaciju i HC-05 Bluetooth modul za glasovnu kontrolu LED-a.

Za ovaj tutorijal potreban nam je minimum komponenti. Nakon što završite lekciju, možete zakomplicirati shemu i dopuniti je uređajima po svom ukusu.

  • Arduino UNO
  • HC-05 Bluetooth modul
  • Bread board
  • Žice
  • Otpornik 330 oma
  • Diode koje emituju svjetlost (LED)

Korak 2: Povezivanje HC-05 Bluetooth modula

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

Koristićemo VCC pin, GND pin, TXD pin i RXD pin. VCC pin bluetooth modula povezuje se na +3.3V iz Arduina. GND pin modula spaja se na Arduino GND (uzemljenje). TX pin bluetooth modula se povezuje na digitalni pin 0 (RXD), a RXD pin se povezuje na digitalni pin 1 (TXD).

Korak 3: Povezivanje LED dioda

Sljedeći korak u kreiranju glasovno kontroliranih LED dioda je povezivanje LED dioda na Arduino preko matične ploče.

Prvo spojite kratak kraj LED diode na masu. Zatim povežite dugi kraj svake od LED dioda na otpornik od 330 oma. Konačno, povežite trenutni otpor od LED dioda na digitalne pinove na Arduinu.

U ovom projektu, spojit ćemo jednu LED diodu na digitalni pin 2, drugu na digitalni pin 3, a posljednju LED diodu na digitalni pin 4.

Korak 4: Snaga

Za ovaj projekat možemo napajati Arduino preko bilo kojeg +5V napajanja. Možete koristiti USB port sa vašeg računara za napajanje Arduina, ali u ovom projektu ćemo koristiti prijenosnu bateriju od 5V. Uvjerite se da je GND Arduino spojen na uzemljenje matične ploče prije povezivanja napajanja na vaš Arduino.

Korak 5: Kod

Kod za naš projekat je ispod.

Korak 6: Korištenje mobilne aplikacije

Možete započeti testiranje svog projekta preuzimanjem Android aplikacije - BT Voice Control za Arduino (BT Voice Control for Arduino) koju je kreirao SimpleLabsIN.

Nakon što ste preuzeli i instalirali aplikaciju na svoj Android telefon, kliknite na traku menija u gornjem desnom uglu i odaberite "Poveži robota". U novom prozoru koji se pojavi odaberite HC-05 Bluetooth modul i povežite ga.

Sada kada govorite s određenim komandama od koda do uređaja putem aplikacije, određene LED lampice bi se trebale uključiti i isključiti. Pažljivije pogledajte kod gdje su naznačene komande i stavite svoj. Na primjer, umjesto "* prekidač na crveno", možete jednostavno odrediti "crveno". Ovo će učiniti komande bržim, kraćim i jasnijim.

Korak 7: konačni rezultat

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

Želimo Vam uspješne projekte! Ne zaboravite ostaviti komentare o projektu u našoj

U ovom projektu sam kombinovao detekciju lica i sistem za praćenje.

Ukratko, suština projekta: web kamera instalirana na rotacionom mehanizmu povezana je sa računarom koji radi pod operativnim sistemom Windows i sa instaliranim softverom Opencv... Ako program otkrije lice u vidnom polju web kamere, tada se izračunava centar lica. Koordinate X i Y se prenose na Arduino kontroler, koji je povezan sa računarom preko USB-a. Zauzvrat, Arduino kontroler, prema primljenim naredbama, kontrolira dva servomotora: u X koordinati i u Y koordinati, dakle. obezbeđen je sistem za praćenje.

OpenCV (Open Source Computer Vision Library) biblioteka se može preuzeti. Biblioteka je multiplatformska, trenutno postoji za sledeće operativne sisteme: Windows, Linux, Android, Mac OS pa čak i iOS. Biblioteka omogućava obradu slika u realnom vremenu. Napisano u C / C ++.

To. ovaj projekat je mješavina mekih i tvrdih rješenja. Obrada slike se vrši na računaru, a servo upravljanje pomoću kontrolera.

Dakle, ono što sam koristio za projekat:

softver:
Arduino IDE 1.0 za Windows

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

željezo:
Windows 7 SP1 računar
Arduino Uno ili kompatibilan + PSU
2 servosa
USB web kamera

Pa idemo.

Korak 1. Instaliranje softvera

1) Ako imate Windows OS, preuzmite datoteku OpenCV-2.3.1-win-superpack.exe (ili noviju verziju) i instalirajte biblioteku.

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

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

Korak 2. Pričvršćivanje kamere i servosa

Nisam napravio konstrukciju "trajnom", jer nakon postizanja konačnog cilja sve rastavljam za sljedeći projekat.
Veb kameru sam pričvrstio na servo motor osi X, a ona je zauzvrat fiksirala na servo motor osi Y. I cijelu ovu strukturu sam fiksirao u stezaljku iz "trećih ruku".

Korak 3. Povezivanje

Priključak servo motora:
Žuti pin sa servo osi X povezuje se na pin 9 Arduino kontrolera
Žuti pin servo Y osi povezuje se na pin 10 Arduino kontrolera
Crveni Vcc pin iz servo uređaja spaja se na pin od 5V
Crni GND pin iz servo uređaja spaja se na GND pin Arduino kontrolera

Veza sa web kamerom:
Web kamera je povezana sa računarom preko USB interfejsa. Program C ++ identificira web kameru po broju USB porta. Možda ćete morati navesti port u programu.

Veza Arduino UNO kontrolera:
Kontroler se takođe povezuje sa računarom preko USB interfejsa. U sistemu se pojavljuje virtuelni COM port, koji mora biti uključen u programski kod C ++.

Nekako je došla ideja da se napravi glasovna kontrola Arduina, ali jedan Arduino nije dovoljan, jer za sistem pametne kuće, takođe morate komunicirati sa računarom i njegovim sistemima.

Pronalaženje rješenja:

BitVoicer
Naišao sam na razne članke koji koriste BitVoicer u sprezi sa Arduinom, ali cijeli problem je u tome što BitVoicer radi samo na Windows-u, a to ne dozvoljava korištenje sistema na jednostavnim uređajima kao što je Rasberry Pi koji pokreće Unix.
Arduino prepoznavanje glasa
Arduino se može kontrolisati i glasom zahvaljujući modulu za prepoznavanje glasa, ali do sada nisam imao zadovoljstvo da ga kupujem i postoji niz neprijatnosti prilikom korišćenja ovog modula: ograničen broj komandi, zamorna obuka, nove komande zahtevaju bljeskanje modula, što je već mana ako je sistem otklonjen i instaliran.

Rješenje

Počeo sam da tražim rešenje za više platformi koje bi omogućilo da sistem radi na različitim operativnim sistemima. našao ovo: Biblioteka govora u tekst za Javu / obradu... Kompleks je realizovan na osnovu jezika Obrada (Java) i Google Speach API već smo pisali o mački. Ovo rješenje vam omogućava da pratite svoj glas u realnom vremenu omogući AutoRecord (), navedite ograničenje jačine zvuka enableAutoThreshold (), priključite eksterne mikrofone getLineIn (), naznačite jezik prepoznavanja setLanguage (String)... Kompletna lista karakteristika i specifičnosti nalazi se na web stranici programera: http://stt.getflourish.com. Za rad, potreban nam je Google Speech API ključ. Kako doći do njega je opisano ovdje: www.chromium.org/developers/how-tos/api-keys... Jedina negativna stvar je što vam Google Speech omogućava da obradite samo 50 zahtjeva dnevno, ali u praksi se obradi više od 500 zahtjeva.

Kako bih ubuduće olakšao navigaciju kroz tekst, prilažem sve izvore koji već sadrže glasovne komande, vezu na Arduino ploču, skicu za Arduino ploču, glasovnu potvrdu fraza i sve ostalo što već postoji i radni: izvori. Nakon preuzimanja, GoogleTTS folder se stavlja u biblioteke za obradu "a. Skica za Arduino se nalazi u folderu GoogleTTS / ArduinoSerial. Sve je napisano u Processing 3.0a4, dostupno u predizdanju na službenoj web stranici.

Implementacija("Slušaj moju komandu!"):
Odlučili smo se za priznanje. Sada treba da uhvatimo komande koje su nam potrebne i donesemo odluke o njima. Za ovo je zaslužna sekcija:
void commands () (if (result.equals ("arduino")) (// Traženje podudaranja // Izvršavanje naredbe prilikom prijema podudaranja) else if (result.equals ("koliko dugo")) (// Izvršavanje naredbe pri prijemu utakmice ))
Glasovni odgovor
Sada nam je potreban alat koji će nam odgovoriti ljudskim glasom ako se pronađe podudaranje. Kao alat za implementaciju odabran je Google Translate, odnosno modul koji pretvara tekst u glas. Tekst se šalje zahtjevom na Google server, pretvara se u zvučni fajl i šalje nam nazad u mp3 formatu. Za ovo je zaslužna sekcija:
void googleTTS (String txt, String jezik) (// tekst se pretvara u zvuk pomoću googleTTS komande ("text", "language") String u = "http://translate.google.com/translate_tts?tl="; u = u + jezik + "& q =" + txt; u = u.replace ("", "% 20"); pokušajte (URL url = novi URL (u); pokušajte (URLConnection veza = url.openConnection () veza. 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)"); .connect ( ); InputStream je = connection.getInputStream (); Datoteka f = nova datoteka (sketchPath + "/" + txt + ".mp3"); OutputStream out = novi FileOutputStream (f); byte buf = novi bajt; int len; while ((len = is.read (buf))> 0) (out.write (buf, 0, len);) out.close (); is.close (); println ("File created:" + txt + " .mp3 ");) catch (IOException e) (e.printStackTrace (;)) catch (MalformedURLException e) (e.printStackTrace (;))

Sekcija je odgovorna za direktnu obradu tekstualnih fraza:
void voicer (String s) (// Izvodi se naredbom voicer ("text") println (s); // koristi se za praćenje teksta Datoteka f = nova datoteka (sketchPath + "/" + s + ".mp3"); // Provjera datoteke // Ako datoteka već postoji, pusti datoteku if (f.exists ()) (println ("Datoteka već postoji! Reprodukcija datoteke!"); Player = minim.loadFile (s + ". mp3"); player.play ();) // Ako još nema fajla, kreirajte ga drugačije (println ("Još nema fajla! Kreiramo ga!"); GoogleTTS (s, "ru"); player = minim.loadFile (s + ".mp3"); player.play (;))

Primjer implementacije prepoznavanja i glasovne potvrde:
void komande () (if (result.equals ("kompjuter")) (// Tražim odgovarajućeg glasača ("Slušanje"); // Dobiti glasovnu potvrdu // Izvršavanje naredbe kada se dobije podudaranje))
On je živ!

Obrada + Arduino

Pa, čini se da je uspjelo, ali nešto nedostaje. Sada hajde da "sprijateljimo" sve ovo sa Arduinom.
Inicijalizirajte serijsku vezu u Obradi za slanje podataka na Arduino (za Mac i Unix korisnike):
String portName = Serial.list (); myPort = novi serijski (ovo, ime porta, 9600); myPort.bufferUntil ("\ n");

Za Windows korisnike:
String myPort = novi serijski (ovo, "Vaš COM port", 9600); myPort.bufferUntil ("\ n");

I tamo ćemo poslati komandu kada se pronađe glasovno podudaranje:
void komande () (ako je (result.equals ("upali svjetlo")) (// Ako je glasovna fraza prepoznata kao "upali svjetlo", onda izvršite zahtjev myPort.write ("High"); / / Šalje naredbu High govorniku serijske veze ("Uključi svjetlo"); // Glasovna potvrda izvršenja komande) inače ako (rezultat.equals ("isključi svjetlo")) (myPort.write ("Low "); // Šalje naredbu Low govorniku serijske veze (" Ugasi svjetlo "); // Potvrda // Izvršavanje naredbe po prijemu podudaranja))

Sada pređimo na Arduino ploču. Moramo osluškivati ​​serijski port i kada pronađemo naredbu sa liste, izvršiti potrebnu akciju prema komandi. Skica je vrlo jednostavna:
int led = 13; // Pin LED na ploči void setup () (Serial.begin (9600); // Inicijalizacija serijske veze pinMode (led, OUTPUT); // Pin LED prenosi podatke) void loop () (int i = 0; // varijabla za unos linije u međuspremnik char; // niz bafera za umetanje reda u njega if (Serial.available ()) (// Provjerite serijski port za kašnjenje podataka (100 ); // unosi čitanje u međuspremnik dok (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); // Выключаем светодиод } } }
Sve. Provjeravam.

Problemi i planovi:

Jer Nisam radio nikakvo programiranje prije ovog vremena, ne razumijem u potpunosti neke stvari u procesu otklanjanja grešaka. Bio bih zahvalan ako bi mi neko rekao kako da riješim probleme sa liste ispod:

Najosnovniji problem je što se ne izgovori cijela glasovna fraza. Posljednja slova nestaju. Iako zvučni fajl dolazi sa Google servera u svom normalnom obliku. Koliko sam shvatio situaciju: problem audio plejera, ali gde tačno još nije jasno.
- Već sam napisao da Google Speech API ima ograničenje od 50 zahtjeva dnevno, ali u stvari ispada više. U svakom slučaju, ovo nije dovoljno. Planiram registrirati lokalno prepoznavanje glavne komande i tek nakon prepoznavanja poslati ostatak teksta na obradu Google-u.Tražim rješenje.
- Mislim da neće škoditi poslati komande Arduino Ethernet štitu, jer neki sistemi mogu biti na pristojnoj udaljenosti od glavnog računara i serijska veza ovde više neće raditi. Pozabaviću se ovom odlukom jednog od ovih dana, tk. Nemam ruter za povezivanje Arduina sa Ethernet štitom na njega.

To je sve! Molimo vas da ne sudite strogo za linije koda! Upravo sam počeo da proučavam ovu odskočnu dasku i bit ću vam izuzetno zahvalan ako zabodete nos u to kako nije potrebno i pokažete mi kako se to radi. Također će mi biti drago ako se i drugi zainteresirani uključe u ovaj projekat - uvijek sam otvoren za komunikaciju!

Sjećate li se kako je prije nekoliko godina (a možda čak i sada) bila popularna ideja o kontroli svjetla u prostoriji pljeskanjem rukama? I, na kraju krajeva, vrlo je zgodno, ležiš u krevetu, previše lijen da ustaneš i pljesneš rukama sa svjetla ili ideš kući, mrak je, dugo pipaj prekidač, a evo sa samog praga je pljesak ili dva i svjetlo je već upaljeno. Čini mi se da je ovaj koncept još uvijek aktuelan, ali se na njega mogu primijeniti više tehnologije u odnosu na one koje su bile prije 5, 10 godina. Sada, za relativno mali iznos, možete kupiti nekoliko dijelova i programirati strukturu za slične funkcije, o čemu će biti riječi u nastavku.

Danas ćemo razmotriti modul dizajniran za prepoznavanje glasovnih komandi (uključujući samo glas unutar snimljene glasovne komande) - Modul za prepoznavanje glasa V3.1 (V3) ili uobičajeno ime kodiranja FZ0475.

Komplet za isporuku uključuje sam modul (štampana ploča vrlo dobrog kvaliteta), mikrofon na fleksibilnoj nozi sa 3,5 mm jack konektorom i ugaone PLS kontakte sa nagibom od 2,56 mm za ploču modula (ne mogu se koristiti ako na drugi način povežete kontakte modula).

Danas postoji nekoliko tipova modula sa sličnim funkcijama različitih proizvođača i programera ili dizajna. Ovaj modul za prepoznavanje glasa, po mom mišljenju, ima određenu ravnotežu između cijene, funkcionalnosti, pogodnosti. EasyVR modul će biti moćniji i znatno skuplji. Moduli bazirani na LD3320 će biti jeftiniji i nezgodni (nezgodni, barem zato što nije lako naći normalne opise na njima, ali inače je već subjektivno).

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

  • Napon napajanja - 5 volti
  • Potrošnja struje - do 40 mA
  • Interfejsi - UART, GPIO
  • Preciznost prepoznavanja - 99% (u idealnim uslovima)
  • Domet djelovanja - ovisi o korištenom mikrofonu, za standardni mikrofon iz kompleta, domet je 0,5 - 1 metar maksimalne udaljenosti sa dovoljno glasnim glasom, ako je glas tih, onda ćete morati približiti mikrofon tvojim ustima

Modul je mala uredna ploča na kojoj je glavni mikrokontroler (crna mrlja), 3,5 mm jack konektor za povezivanje mikrofona, fleš memorijski čip, GPIO, UART i kontakti za napajanje, par LED dioda i ostatak potrebnog tijela nalaze se kompleti potrebni za rad kola - otpornici, kondenzatori, kvarc. Kompaktna veličina ploče omogućit će vam da lako integrirate modul u vlastite dizajne. Da bi se povećao opseg glasovnih komandi, verovatno je potrebno koristiti mikrofon sa pojačalom. Nakon dostizanja prihvatljivog raspona, modul je pogodan za upotrebu u sistemima pametnih kuća. Bez modifikacija za poboljšanje radnog dometa, modul se može koristiti u sistemima upravljanja desktopom, kao iu sigurnosnim sistemima (kontrola i ograničenje pristupa). Sa standardnim mikrofonom, zbog kratkog dometa, sigurnije je koristiti modul za prepoznavanje glasa kao slušalice i bežično prenositi komande do kontrolera koji kontrolira nešto pomoću baterije i bežičnih modula (na primjer, HC-05 ili HC-12 ili bilo koji drugi prikladan). Modul je u stanju da radi i bez eksternog mikrokontrolera, pošto je proizvođač postavio funkcionalnu nezavisnost, potrebno je samo jednom snimiti glasovne komande i podesiti podešavanja za samostalan rad pomoću eksternog uređaja (PC ili MK).

Dakle, da bismo započeli rad s modulom za prepoznavanje glasa, potrebno ga je povezati ili na računalo (potreban je USB-UART adapter) ili na mikrokontroler (potrebno je razviti programski kod za upravljanje modulom).

Ne postoji suštinska razlika u kontroli i konfiguraciji modula između povezivanja na računar ili na mikrokontroler, stoga ćemo, radi jasnoće, koristiti PC za konfiguraciju. Upute opisuju naredbe za modul u heksadecimalnom obliku, stoga će vam, radi 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 i obezbjeđuje biblioteku za korištenje ovog modula i upute za korištenje ove biblioteke. Međutim, mnogi od nas su mnogo više zainteresirani za rad sa samim modulom direktno nego preko Arduino omotača.

Prije početka rada, hajde da shvatimo ploču. Na bočnim stranama ploče sa desne strane je konektor za mikrofon, na drugoj četiri pina UART interfejsa. Ispod je osam pinova koji se koriste za izlaz signala pokrenutih prepoznavanjem glasa. Na vrhu, četiri kontakta konfigurisana kao ulaz signala koriste se za prebacivanje između grupa (po sedam glasovnih komandi) komandi, ako se koristi ova funkcija. A ostalih šest pinova na vrhu se vjerovatno koristi za povezivanje sa memorijom modula.

Za rad i konfiguraciju modula koristi se komandni sistem. Opšti izgled okvira je sljedeći:

Prve četiri komande 00, 01, 02, 03 se koriste 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 izlaznih portova i postavke automatskog opterećenja. Nadalje, tri komande 20,21, 22 se koriste za snimanje glasovnih komandi. Sljedeće tri komande 30,31,32 se koriste za kontrolu prepoznavanja glasovnih komandi. Naredbe 0A, 0D, FF se koriste samo kada sam modul vraća podatke. Zapravo, nema mnogo komandi i sve to nije tako strašno kao što se na prvi pogled čini u dokumentaciji za modul. Razmotrimo naredbe potrebne za rad sa modulom za prepoznavanje glasa. Nisu svi postojeći timovi praktični.

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

Tim 12 - konfigurirati izlazne portove. Ova komanda postavlja način rada izlaznih portova modula za prepoznavanje glasa.

Format: | AA | 03 | 12 | MODE | 0A |

Gdje MODE može imati četiri vrijednosti: 0 - pulsni način rada (kada se aktivira glasovna komanda, izlaz koji odgovara komandi će promijeniti svoje stanje za vrijeme koje je zadala naredba 13), 1 - prekidač režima (prebacivanje ili okretanje) (svaki put aktivira se glasovna naredba, izlaz koji odgovara glasovnoj komandi je invertiran), 2 - uključen način (kada se aktivira glasovna komanda, izlaz će ići u stanje logičke jedinice i više neće ići u stanje logičke nula, reset se vrši komandom 14), 3 - isključen režim (slično uključenom režimu, ali obrnuto, kada se aktivira glasovna komanda, izlaz ide u stanje logičke nule).

Najpraktičniji je režim prebacivanja, koji ne zahtijeva nepotrebne komande. Impulsni režim bi bio dobar, ali logika ovog režima je takva da kada se aktivira glasovna komanda, ona daje logičku jedinicu jednom, na vreme od 10 ms do 1 s. To nije dovoljno. Iako, ovisno o tome koji su zahtjevi za ovaj način rada, može biti korisno. Režimi za uključivanje i isključivanje su nezgodno implementirani, jer zahtijevaju izvršavanje dodatnih naredbi.

Tim 13 - podešavanje trajanja impulsa odgovarajućeg načina rada.

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

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

NIVO 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 - resetovanje izlaznih portova u stanje određeno uključenim ili isključenim načinima.

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

| AA | 03 + n | 14 | IO0 | ... | Ion | 0A | - resetirajte odabrane izlazne portove

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

Dalje, da bi se glasovne komande izvršile, one moraju biti snimljene u modulu (obučite modul). Ovdje postoji ograničenje. Istovremeno se može prepoznati samo sedam komandi, iako se može snimiti mnogo više. Kako bi se proširio opseg glasovnih komandi koje će biti prepoznate, koristi se sistem grupisanja (komanda 32) kojim se upravlja putem ulaznih portova modula. Postavljanjem konfiguracije signala na ovim kontaktima vrši se odabir grupe komandi koje će se prepoznati. To je zbog ograničenih performansi korištenog modula glasovnog kontrolera.

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

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

Gdje je n broj snimljenih glasovnih naredbi (ako je jedna komanda snimljena n = 0, dvije komande n = 1, i tako dalje u skladu sa općim formatom prijenosa naredbe Dužina - dužina), R0 ... Rn je broj glasovnih komandi (AA 03 20 03 0A - komanda za snimanje treće glasovne komande).

Tim 21 - snimanje jedne glasovne komande i postavljanje potpisa za istu.

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

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

Tim 22 - dodati ili ukloniti potpis za odabranu glasovnu komandu.

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

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

U procesu snimanja glasovnih komandi potrebno je voditi se signalima LED dioda. Nakon unosa komande koja pokreće proces snimanja, žuta (narandžasta) LED dioda počinje brzo da treperi. Čim zasvijetli crvena LED dioda, potrebno je izgovoriti glasovnu komandu u mikrofon. Ako je uspješan, žuta (narandžasta) LED dioda će zasvijetliti, a zatim ponovo crvena - morate potvrditi glasovnu komandu, izgovoriti je ponovo. U slučaju uspjeha, oba LED dioda će se upaliti - glasovna komanda je sačuvana.

Nakon što su glasovne komande snimljene u modulu, ništa se neće dogoditi sve dok se ove komande ne stave u "Recognizer" modula. Da biste to učinili, koristite naredbu 30. Nakon izvršenja ove naredbe, modul će početi čekati da glasovna komanda odgovara sačuvanim uzorcima. Istovremeno se može prepoznati samo sedam komandi. U tom slučaju, žuta (narandžasta) LED dioda na ploči modula će polako treptati.

Tim 30 - učitavanje zapisa u "Recognizer" 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 komanda pripada (ako se koristi), R je prepoznata glasovna komanda (ovi podaci se mogu koristiti za razlikovanje komande jedna od druge ako se potpisi ne koriste), RI je indeks komande u prepoznavač, SIGLEN je dužina potpisa u bajtovima, SIG - potpis (ako se koristi).

I na kraju, ako modul treba da radi sam, onda je potrebno da koristite komandu 15 da ga automatski pokrenete u skladu sa unapred podešenim programom prepoznavača. U tom slučaju, modul za prepoznavanje glasa će raditi samostalno bez potrebe za inicijalizacijom nakon uključivanja.

Tim 15 - podešavanje automatskog pokretanja prepoznavača pri pokretanju.

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

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

Za kontrolu ispravnosti izvršenja naredbi, svaka od njih odgovara svom odgovoru. U slučaju takve potrebe, sve podatke možete pronaći u dokumentaciji za modul za prepoznavanje glasa koja se nalazi u prilogu na kraju članka. Ne zaboravite da su sve numeričke vrijednosti predstavljene u heksadecimalni formu.

Tako je korištenjem komandnog sistema moguće fleksibilno konfigurirati modul za prepoznavanje glasa za korištenje u različite svrhe. Ako jednostavna kontrola izlaznih portova modula nije dovoljna, tada se modul za prepoznavanje glasa može povezati s drugim uređajima putem UART ili GPIO. Za bežično povezivanje možete koristiti prethodno razmatrane module.

Koristeći bežične module, možete povezati modul za prepoznavanje glasa na bilo koji uređaj gdje je to potrebno. Na primjer, spojimo ga na mikrokontroler, koji će kontrolisati LED diode u vezi sa primljenim podacima o prepoznavanju glasovnih komandi. Bežični moduli omogućavaju prijenos podataka u dva smjera, pa se po potrebi za mikrokontroler može napisati kod za inicijalizaciju govornog modula i snimanje glasovnih komandi. U našem slučaju, nekoliko glasovnih komandi je već snimljeno u modulu pod kontrolom računara i autostart prepoznavanja je konfigurisan kada se uključi napajanje, stoga ćemo za mikrokontroler samo registrovati prijem podataka i LED kontrolu u odnosu na ove podatke . STM32F103C8T6 mikrokontroler koristi USART1 za primanje podataka i PB10 ... PB15 pinove konfigurisane za izlaz, koji se kontrolišu LED diodama. Izvorni kod se nalazi u dodatku na kraju članka.

Malo o rezultatima

Prepoznavanje glasa nije sasvim tačno. Zavisi od izabranih komandi i glasa korisnika. Tokom testiranja našao sam nekoliko negativnih točaka. Prilikom podučavanja komandi modula odabrane su glasovne komande "jedan" i "dva". Komanda “dva” je uvek bila jasna, ali je komanda “jedan” često bila definisana kao naredba “dva” i shodno tome se izvršavao kod druge komande. Nadalje, prilikom pokušaja davanja glasovnih komandi na engleskom (a one nisu snimljene u glasovnom modulu), komanda „jedan“ je skoro uvijek bila definirana kao „dva“. Možda se sve radi o izgovoru, intonaciji i drugim aspektima ljudskog glasa, ugrađenom u algoritam za kodiranje glasovnog modula izgovorenih komandi. Međutim, proizvođači ove tajne ne odaju u javnosti. Osim toga, na kvalitet prepoznavanja utiču vanjski uvjeti buke - zujanje s ulice, buka ventilatora, nasumični zvuci itd. Proizvođač skreće pažnju na činjenicu da se visok nivo tačnosti prepoznavanja odvija u idealnim uslovima. Ideja o korištenju mikrofona s pojačalom, naravno, povećat će domet uređaja, ali će također povećati vjerovatnoću grešaka, jer će se pojačanje glasa pojaviti i s pojačanjem buke.

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

Spisak radioelemenata

Oznaka Tip Denominacija Količina BilješkaRezultatMoja sveska
IC1 MK STM32

STM32F103C8

1 U notepad
VR1 Linearni regulator

AMS1117-3.3

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

    Kao što naziv implicira, ovaj članak će se fokusirati na prepoznavanje brojeva na mikrokontroleru. Odmah želim da rezervišem da ovaj članak neće dati izvorni kod, razmotriti tehnologiju ili algoritam prepoznavanja, samo ću reći da se koriste ideje sistematskog pristupa. Neki od njih su navedeni u našim člancima (i eto). To je zbog činjenice da naš pristup ima tendenciju da bude originalan, ali zahtijeva pojašnjenje nekih pitanja. Neko bi mogao reći: "još jedan članak o programiranju mikrokontrolera." Nikako, potraga za ovakvim projektima nije dala nikakve razumljive rezultate, osim ovoga video... Jedno je jasno iz rasprava na forumima: ideja o nabavci takvog uređaja (kamera + mikrokontroler = rezultat prepoznavanja na izlazu, a ne samo snimljena slika) došla je mnogima, ali je ostala bez implementacije. Da, a za prepoznavanje, prema općem mišljenju, potrebno je mnogo računskih resursa, a mikrokontroleri za to nisu prikladni, posebno su se čule izjave o Arduinu da je to općenito nemoguće. Ako postane zanimljivo, molim, ispod maca.

    Kako ne bi bilo očiglednih pitanja, odgovorit ćemo na njih:

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

    Ideja

    Ukratko, sve je počelo sa željom da se okušam i testiram svoje ideje u prepoznavanju slika. Tokom diskusije, došli smo do zaključka da sa malom računarskom snagom možemo riješiti ovaj problem. Iz očiglednih razloga, nećemo opisivati ​​detalje ovih rasprava.

    Instalacija

    Dakle, zadatak je postavljen, potrebna je implementacija. Bez odstupanja od već ustaljenog
    uzimamo ono što nam je pri ruci. I tu je bilo nekoliko Arduino Uno, stari optički miš i CD drajv pri ruci. Inače, dobili smo upit da koristimo senzor optičkog miša kao kameru da dobijemo sliku iz onoga što smo davno pročitali, a zapravo i sav ostatak "miš" materijala. Jedino što smo morali da uradimo je da skinemo senzor i sve njegove trake radi lakšeg korišćenja, kao i da zalepimo sočivo na njega, koje smo pažljivo iščupali iz CD drajva. To je bilo neophodno kako bi se povećala udaljenost od subjekta do kamere, inače se brojevi naše veličine nisu uklapali i bio je vidljiv samo mali dio. Inače, ispred sočiva sa CD drajva smo pokušali da pričvrstimo optiku sa web kamere, ali nekako nije išlo.

    Više


    Tada se postavilo pitanje kako postaviti ovu kameru preko subjekta. Mnogo nam je pomogao stari pokvareni mikroskop koji je ležao neaktivan. S poštovanjem uklonio od njega predmetni scenski kontrolni mehanizam. Ovaj mehanizam nam je omogućio da kameru pomeramo samo duž dve ose, a odmah je došla ideja da koristimo vođicu laserske glave sa CD drajva. Sve je to popravljeno na kućištu sa dugotrajnog CD drajva. Kao rezultat, dobili smo cool mehanizam za pozicioniranje kamere.

    Više


    Ukupno: imamo takozvanu kameru, postoji mehanizam za pozicioniranje, ostaje da stavimo komad papira sa brojem i dobijemo sliku iz kamere. Tu su počeli "problemi". Budući da su karakteristike optičkog senzora "miš" vrlo oskudne za korištenje kao kamera, počeli su improvizirati sa pozadinskim osvjetljenjem.

    Više


    Postalo je jasno da samo isticanje ne ide, intenzitet je važan, smjer vanjskog svjetla također se prilagođava. Morao sam da upalim drugu "arduinku" da bih kontrolisao intenzitet pozadinskog osvetljenja ( naravno da se moglo kontrolisati na drugačiji način, ali kasnije i ne samo pozadinsko osvetljenje, već i prebacivanjem brojeva na indikatoru). Na kraju se pokazalo da je snimanje na svjetlu mnogo bolje. A ako, na primjer, koristite svjetleći indikator od sedam segmenata kao metu, tada ga senzor općenito vidi savršeno. Dakle, sada imamo indikator i traku sa bijelim brojevima ispunjenim crnom pozadinom kao objektima snimanja.

    lijevo je slika u sivim tonovima dobijena od indikatora (takvu sliku dobijamo od senzora), desno je binarizirana.

    Više


    Opšti pogled na skupštinu


    ranu instalaciju


    Jedinica za prepoznavanje


    Važnu ulogu u našoj instalaciji igra takozvana jedinica za prepoznavanje (na slici iznad). Kao što vidite, sastoji se od Arduino Uno i dobro poznatog wifi predajnika. ESP8266... Da objasnim, potreban nam je wifi predajnik da bismo vidjeli rezultat prepoznavanja na tabletu. Aplikacija na tabletu šalje zahtjev, "arduinka", primivši zahtjev, "uzima" sliku sa senzora miša, zatim je binarizira. Nakon binarizacije dolazi do prepoznavanja, a nakon njenog završetka formira se odgovor. Kao odgovor, šaljemo rezultat prepoznavanja i 41 bajt za izgradnju binarizirane slike na ekranu tableta, da tako kažem, radi jasnoće.

    Ako pogledate unazad, onda je "arduinki" poverena dobra funkcionalnost: rad sa kamerom, i prepoznavanje, i rad sa esp8266. Ono što nije moglo da ne utiče na rad - morao sam da se nosim sa nedostatkom pamćenja. Nikada nisam mislio da ću ikada morati da povratim svaki bajt memorije.

    Demonstracija procesa prepoznavanja

    Umjesto zaključka

    To je sve, zapravo. Pred nama je još puno posla. I prvi zadatak: prepoznavanje brojeva (nizova brojeva) snimljenih "ljudskom" kamerom (a ne "senzorom miša") i prenošenje razvijene tehnologije na ESP8266 i smanjenje intenziteta borbe za svaki bajt memorije.

    Rado ćemo odgovoriti na vaša pitanja.

    Top srodni članci