Co som cakal od napisu?
Ano, ved to nemuselo byt uplne podrobne, cakal som bud principy alebo prdstavenie kniznice pre Arduino, co dokaze rozpoznat par hlasovych povelov.
V casopise Aradio - prakticka alektronika sa asi v roku 2016 objavil clanok, co to riesil, ale ciastocne hardwerovo a zmestilo sa to do jedneho clanku.
Ten clanok co tu je, podla mna nie je na titulku Rootu, ale na osobny blog autora (spravil riesenie, ktore mu vyhovuje a riesi jeho problem, no je to take juniorske a krehke rienie).
Praveze tam nebola ziadna uemla inteligencia ani nejaky advanced processing.
Ide vyuzit neysmetrickost zvukovych vln ludskeho hlasu.
V tom clanku to rieisli tak, ze sledovali intenzitu zvuku na niekolko vybranych frekvenciach (4-6?) a na zakalde ich zmien v case v pohyblivom okne vyhodnotili povel. K tomu tam bolo nejake analogove predspracovanie.
Na to existuje projekt JARVIS (vo franzustine)
https://www.openjarvis.com/
Navod v nemcine:
https://schmidt-feldberg.de/2018/03/17/sprachsteuerung-auf-dem-raspberry-pi-mit-jarvis/
Malem jsem prestal cist po slove "google", ale aby bylo hodnoceni fair, precetl jsem to do pulky. Davam 3 orwelly z 10. Nejvetsim slabinou je, ze autor nijak neresi problematiku zamezeni spinani postrannim kanalem, tudiz je mozne, ze nejaky ninja zapne svetla nebo zvysi teplotu nejakym tlacitkem, aniz by Google vedel kdo a kdy, a ztrati tak prehled. Na druhe strane pokud je ikona mikrofonu na webu jen takove placebo pro uzivatele a Chrome lifruje data do Googlu bez ohledu na to, na co klikaji, nebo neklikaji, mohlo by to byt slusnych 5-6 orwellu z 10.
Rozpoznavanie hlasu v offline (napriklad vytocit cislo kontaktu v zozname) dokazala robit moja Nokia 5800 pred 10 rokmi.
https://en.wikipedia.org/wiki/Nokia_5800_XpressMusic
Keys and input method
......
Voice commands
.....
Ja rozdiel medzi rozpoznavanim hlasu a rozpoznavanim hlasovych povelov.
Rozpoznavanim hlasu sa mysli prevod lubovolnej reci na text.
Rozpoznavanim hlasovych povelov je to, ze krabicku naucite regovat na niekolko hlasovych povelov.
Na to prve treba vykonny pocitac.
To druhe ti zvladne aj 8 bitovy jednocip (vedeli to uz ciernobiele mobilne telefony).
a co je podla teba "zapni svetlo", "nastav kurenie"... su to hlasove povely. Nemam potrebu diktovat slohove prace, ked chcem vypnut svetlo. Pre mna uplne staci jednoducha postupnost: svetlo obyvacka [vypni/zapni] a to sa da aj offline.
Toto je perfektny pripad, ako jednoduche veci robit komplikovane. Ja mam tiez rozpracovanu inteligentnu domacnost, ale u mna nic z toho nesmie ist von, a zaroven je to doplnok. Cize, ked sa to pokazi, tak stale viem to svetlo zapnut vypinacom a nastavit si kurenie rucne (tam bude len monitoring, ovladanie nechavam na nieco vyladene).
Mam 15 let starej telefon ... a umi to. Uplne offline. A umely to i mnohem starsi. Zadnej duvod posilat cokoli kamkoli neni.
BTW: Ty chces doma rvat na topeni aby pridalo nebo ubralo? Muzu podobne rvat na svy auto ... jo, vyzkousel sem to, funguje to, a nepouzivam to, stejne jako vsichni co sou pri smyslech. Trenovat nic nemusis, na par vymenovanych slov to funguje obstojne i bez toho.
BTW2: Rozpoznavani hlasu (offline a pouze en) umely widle (XP) uz v okamzik uvedeni na trh.
AAAA, twl, to snad neni mozny! Dnesni mladez si
1) neumi ani precist specifikace HTTP - aby vedelo ze za hlavickou je prazdny radek
2) nevidi ten pattern, ze tam je prazdny radek!!
Rikat pocitadlu radku parser, me klepne.
Hlavne ze je tam zapojen cloud a milion blbosti ktere si neskrtnou az vypadne pripojeni do Internetu, nebo to provozovatel sluzby vzda.
A jeste ten bulvarni nadpis - cekal jsem rozpoznavani hlasu na MCU, nebo prinejhorsim pouziti zajimaveho ASSP.
No to je mazec. Kuchařskou obdobou by byly špagety s točeným salámem, zalité šlehačkou.
Ale zase kdyby to fakt fungovalo, tak by se s tím daly dělat fajn věci:
https://threepanel.com/t/cube-drone/18/157
Tak se taky přidám k chvále článku, shrnu to v několika bodech.
1) Správně navržený systém je autonomní, pokud to užití zařízení nevyžaduje jinak (např. telefon bude sotva krabička bez nějaké krabičky u někoho dalšího a nějaké telekomunikační infrastruktury). V případě, že lokálně ovládám zařízení na tom samým místě, musí se vše odehrát na tom místě.
2) Správně navržený systém je spolehlivý. Jenom výčet SPoF mimo kontrolu uživatele je docela dlouhý (LAN, router, konektivita u ISP, infratruktura, aplikace v čmoudu,...)
3) Soukromí. To nemůže nikdo myslet vážně, trvale nahrávat zvuk v místnosti a posílat to někomu, proti komu je NSA jenom 3x louhovaný pytlík čaje.
4) Ovládání hlasem nefunguje. Vždycky je to tak, že se vzorkuje zvuk, nějak se přechroupá a nakonec se určuje pravděpodobnost, že uživatel řekl co řekl. Když se práh nastaví nízko, jsou tam falešný triggery, když vysoko, je to nespolehlivý. U nás na jednom projektu vycházela váha na cca 30%. I pak to reaguje, kdy nemá. Mám historky z praxe, kdy puštěný rádio dokázalo úplně zmást voice recognition a zařízení se chovalo úplně náhodně. Zákazníci byli nadšení.
5) Když už, tak na hraní se zvukem je optimální 32b DSP. Vzhledem k 16b vzorkování a 16b koeficientům je to tak akorát. Pro zpracování hlasu je potřeba uvažovat min. 8kHz, tj. vzorkování 16kHz. A tohle tahat skrz 8b RISC prakticky bez pamětí? Kdyby tam byl nějaký TMS320, BlackFin nebo dsPIC neřeknu, ale Arduino?
6) Kdo říká, že na MCU není diakritika nebo znaková sada dle vlastního výběru?
Ani se nedivím, že je ten článek anonymní. Autor asi tuší, že po tomhle výkonu by dostal ve vývojové firmě místo maximálně jako svačinářka... Sorry za drsný slova, ale je to tak.
Ďakujem pekne za názor. Pane Petre, iste ste si všimli, že článok patrí do sekcie Bastlírna. Je to bastl, nie je to profesionálna aplikácia, je to niečo, čo zostaví človek, lebo sa mu to hodí a je to účelné.
Je smutné, že nevidíte benefit článku v tom, že je zadarmo a ukazuje, ako je možné priniesť interaktívnu formu ovládania napríklad už do existujúceho online projektu. Niekto by to určite mohol využiť napríklad ak už má inteligentnú domácnosť postavenú na webovom rozhraní a len prekopíruje časť kódu a môže to užívať a prispôsobiť si to na mieru a to i laik so svojimi príkazmi pre svoje výstupy, ovládanie.
Okrem toho je možné použiť akýkoľvek svetový jazyk vrátane regiónov a je to možné skombinovať aj pre použitie viet. Systém funguje výborne aj na mužský/ženský/detský hlas. Urobte podobný projekt vy offline a urobte test pre rôzne hlasy, rôznu intonáciu a rôzny prízvuk a som zvedavý, či sa dostanete k zrovnateľným a bezporuchovým výsledkom. Taktiež by som si rád pozrel, ako by ste Arduino, ktoré offline lokálne nahráva hlas dokázali hlasovo ovládať z Ameriky do Česka, pretože s mojim konceptom to funguje.
Ešte sa rád vyjadrím k niektorým bodom vášho systému, s ktorými nesúhlasím:
2.) Nie je to dlhé. Stále sme na úrovni milisekúnd a pri dnešných rýchlostiach internetu v stovkách Mb/s to user ani nepocíti. Verím, že vám na pozadí beží mnoho aplikácii, ktoré sa vzdialene niekam pripájajú (trebars anonymne hlasenia od Chromu pre zlepšenie služieb Googlu) a to vám nevadí. Ale request z Arduina na .txt súbor beriete ako niečo, čo brzdí celý koncept.
3.) Trvale sa nič nenahráva. Systém je určený na on demand request. Hlas sa nahráva od kliku na mikrofón až po ukončenie hovorového slova. Je tu napríklad nevýhoda, že ak je v okolí mikrofónu hluk, nahráva stále a výsledok bude iný ako sa očakáva (podmienka sa nesplní). Preto je možné na úrovni klientského Javascriptu ošetriť systém na nahrávanie práve niekoľkých sekúnd záznamu. (takže si prosím ešte raz webaplikáciu vyskúšajte, aby ste lepšie porozumeli ako funguje)
6.) Nevedel som o možnosti nastaviť špecifickú znakovú sadu pre Arduino, využívam iba default-né nastavenie. Ak by som použil diakritiku (zrejme nejaké nastavenie v ArduinoIDE), musel by takúto zmenu urobiť každý používateľ, ktorý by si webaplikáciu stiahol. Úpravu na nediakritický tvar na strane webservera vidím ako veľkú výhodu, ktorá zvyšuje kompatibilitu a menšiu poruchovosť.
"Je smutné, že nevidíte benefit článku v tom, že je zadarmo a ukazuje, ako je možné priniesť interaktívnu formu ovládania napríklad už do existujúceho online projektu. Niekto by to určite mohol využiť napríklad ak už má inteligentnú domácnosť postavenú na webovom rozhraní a len prekopíruje časť kódu a môže to užívať a prispôsobiť si to na mieru a to i laik so svojimi príkazmi pre svoje výstupy, ovládanie."
Je smutné, že nevidíte benefit skoku z okna v tom, že je zadarmo a ukazuj, jak je možné jendoduchou formou vyřešit finanční problémy v již existujícím životě...
Zadarmo != Benefit
(a navíc je to placený, buďto reklamou, nebo od přispěvatelů, takže i v tomhle se pleteš...)
"Okrem toho je možné použiť akýkoľvek svetový jazyk vrátane regiónov a je to možné skombinovať aj pre použitie viet. Systém funguje výborne aj na mužský/ženský/detský hlas. Urobte podobný projekt vy offline a urobte test pre rôzne hlasy, rôznu intonáciu a rôzny prízvuk a som zvedavý, či sa dostanete k zrovnateľným a bezporuchovým výsledkom."
Tak prvně definujme "bezporuchový". To znamená, že pracuje trvale. V bodu 2 je snad krásný výčet SPoF. Lokální řešení bude vždycky "bezporuchovější".
Druhá věc je chybovost...
"Taktiež by som si rád pozrel, ako by ste Arduino, ktoré offline lokálne nahráva hlas dokázali hlasovo ovládať z Ameriky do Česka, pretože s mojim konceptom to funguje."
To je ale zásadní nepochopení. "Ovládání hlasem" je jiný use case, než "ovládání hlasem z jiné lokality". V prvním případě konektivita nutná je, ve druhým ne, a liší se zásadně způsob realizace (z pohledu HW i SW). Myslím, že hodně lidí tady doufalo v ten první use case.
"2.) Nie je to dlhé. Stále sme na úrovni milisekúnd a pri dnešných rýchlostiach internetu v stovkách Mb/s to user ani nepocíti."
Nepíšu nic o nějaké latenci ani o přenosové rychlosti apod. SPoF = Single Point Of Failure - jedno místo selhání- A tam je jich navíc, proti lokálnímu systému, víc než dost. Proto se liší ty dva use case.
"Verím, že vám na pozadí beží mnoho aplikácii, ktoré sa vzdialene niekam pripájajú (trebars anonymne hlasenia od Chromu pre zlepšenie služieb Googlu) a to vám nevadí. Ale request z Arduina na .txt súbor beriete ako niečo, čo brzdí celý koncept."
Ne, neběží, nemám Widle. Zbytek se dá dobře filtrovat (PrivacyBadger, firewall, ...). Navíc nejde o request na cílový soubor, ale o posílání audio dat.
Btw, jistě vám na účtu běží spousta plateb, například za licence na SW. Jednu platbu navíc v řádu desítek € přece nepocítíte. Tak jich klidně přidejme 20, ono se to nějak snese.
"Trvale sa nič nenahráva. Systém je určený na on demand request. Hlas sa nahráva od kliku na mikrofón až po ukončenie hovorového slova. Je tu napríklad nevýhoda, že ak je v okolí mikrofónu hluk, nahráva stále a výsledok bude iný ako sa očakáva (podmienka sa nesplní). Preto je možné na úrovni klientského Javascriptu ošetriť systém na nahrávanie práve niekoľkých sekúnd záznamu. (takže si prosím ešte raz webaplikáciu vyskúšajte, aby ste lepšie porozumeli ako funguje)"
To ale vůbec nedává smysl. Pokud už na něco klikám nebo něco mačkám, tak to můžu zapnout rovnou a nemusím šaškovat s hlasovým ovládáním (Occamova břitva). Je to akorát bezpečnostní riziko (odposlech) a několik článků s možností chyby navíc, doplněný nespolehlivostí řešení. Navíc ta web aplikace přece není součást zařízená a vyžadovat pro ovládání něco navíc je barbarství.
"6.) Nevedel som o možnosti nastaviť špecifickú znakovú sadu pre Arduino, využívam iba default-né nastavenie. Ak by som použil diakritiku (zrejme nejaké nastavenie v ArduinoIDE), musel by takúto zmenu urobiť každý používateľ, ktorý by si webaplikáciu stiahol."
Z toho si nic nedělej, běžný uživatel Arduina neví nic ani o možnosti multitaskingu.
Pointa je v tom, že char = int8_t a stačí napsat funkci, která extra znaky na vstupu namapuje do záporných hodnot (ty se nepoužívají). IDE o tom přece nemusí ani vědět.
"Úpravu na nediakritický tvar na strane webservera vidím ako veľkú výhodu, ktorá zvyšuje kompatibilitu a menšiu poruchovosť."
Naopak. Diakritika rozlišuje různý slova, který by bez ní byly stejný. Odstraněním diakritiky redukuješ data, který ve finálním zpracování oceníš. Pokud teda nešišláš, pak by taková úprava asi měla smysl.
Poruchovost - od slova "porucha" - stav, kdy je zařízení mimo provoz. Chceš říct, že máš tak blbě napsanou aplikaci v Arduinu, že zařízení vytuhne s nutností HW restartu, pokud se v tom textovým souboru vyskytne znak mimo {0x00, 0x20...0x7e}? S tím bys měl rychle něco dělat.
To mas marny ....
Znam osobne cloveka, kterej si (za nehorazny prachy) nechal udelat ten "chytrej" barak. V kazdy mistosti ma na zdi cvaknute iphone a v nem nejakou custom appku. Samo se mu to podelalo, a prisel s tim, jestlo se to neda nejak poresit, protoze za rekonfiguraci chteji dalsi hromadu $$$. Nebyl schopnej si ani rozsvitit, protoze vypinace sou prece zbytecny. Jo a hlasovy ovladani to samozrejme ma taky.
Stejne tak sem se opravdu nasmal v jiny domacnosti, kde prozmenu dali na tu reklamu na tema ze draty nejsou treba, a vypinac sice byl, ale bezdratovej. Neustale lezou po byte a vymenujou baterky, coz je fajn specielne uprostred noci. Navic jim krasne muzes blikat svetlama trebas z notesu s wifinou ... idealne tak ve 3 rano.
Jj, frikulíni jsou nebezpeční i sami sobě. Tenhle to ale povýšil ještě o level, je to i bastlíř. Dokonce Pan Bastlíř, když to staví na Arduinu a má problém rozlišit, co je IDE, co je programovací jazyk a co je binárka, kerou do toho Arduina naleje (soudě podle toho, co předvedl s diakritikou). Tohle bych nebral ani za souseda přes ulici.
Me na tom teda fascinuje to, ze to co se da vyresit jednim vypinacem kterej tam nainstalujes a na pristich 100let na nej zapomenes, budes resit 150ti komponentama ze kterych se kazda jedna behem pristich 5 let zcela jiste podela. To teda v tom lepsim pripade, protoze guugl ti (nejen)API zmeni zcela jiste mnohem driv.
Jo, to je taky fakt. Drát je drát. A nejlepší API pro ovládání světla je bezpotenciálový kontakt - nejlíp dokumentovaný, zpětná kompatibilita do 19. století a nějakou dobu doufám ještě fungovat bude... A ještě jsem u něj nezaznamenal, že by nesedělo CRC nebo nedošel ACK. Jediná nevýhoda je, že není dost cool, protože není v čmoudu :(
Môže sa stať, že pri čítaní slova "Čau" z textového súboru ho prečíta ako "ÄŚau" či "?au".
Podstatné už bylo řečeno, jen bych rád autorovi ještě vysvětlil, jak funguje ten problém s diakritikou v souborech... Je to častý problém nepochopení principů znakových sad u Arduino začátečníků.
Mikroprocesor nemá obvykle žádný OS a jako takový ani nepoužívá žádnou konkrétní znakovou sadu. Zato programátor, který píše kód už v nějakém konkrétním jazyce ví, jestli používá v daném jazyce 8bitové znakové funkce a datové typy nebo vícebitové. Něco jako char oproti wchar (wide-char) apod. To souvisí také s tím, jaká znaková sada je nastavená v editoru, kde člověk píše kód, protože pak se znakové/řetězcové konstanty do čipu ukládají právě s číselnými hodnotami odpovídajícími zvolené sadě. Problém "ÄŚau" nastává tehdy, když text byl uložen vícebytovým kódováním (např. UTF-8), ale je interpretován (nikoliv čten, ale zobrazen např. na seriové lince se špatně nastaveným kódováním) pomocí 1bytové (např. ve Widlích oblíbené Win1250). Druhá varianta je prostě jen interpretování přes špatnou tabulku se stejnou velikostí znaku (např. problém Win1250 vs. Latin2 - tady zrovna ne, protože Č je tam kódováno stejně).
Pak samozřejmě záleží také na tom, jakou znakovou sadu používá třeba terminál na seriovou linku nebo třeba displej či font. Mikroprocesor totiž nečte "paznaky". Čte prostě čísla odpovídající znakové sadě, ve které si to člověk uložil...
Je fajn, že se aspoň někdo snaží napsat tu něco zajímavého. Nicméně redakční rada by měla mít dost soudnosti nepustit ven amatérismus plný začátečnických nedostatků a s neodpovídajícím téměř bulvárním nadpisem...