• No results found

Multiplatformn´ı aplikace pro hlasov´e ovl´ad´an´ı

N/A
N/A
Protected

Academic year: 2022

Share "Multiplatformn´ı aplikace pro hlasov´e ovl´ad´an´ı"

Copied!
58
0
0

Loading.... (view fulltext now)

Full text

(1)

Multiplatformn´ı aplikace pro hlasov´ e ovl´ ad´ an´ı

Diplomov´ a pr´ ace

Studijn´ı program: N2612 – Elektrotechnika a informatika Studijn´ı obor: 1802T007 – Informaˇcn´ı technologie Autor pr´ace: Bc. V´aclav Langr

Vedouc´ı pr´ace: Ing. Petr ˇCerva, Ph.D.

Konzultant: Ing. Ondˇrej Smola

(2)

Multi-platform application for voice control

Master thesis

Study programme: N2612 – Electrical Engineering and Informatics Study branch: 1802T007 – Information Technology

Author: Bc. V´aclav Langr Supervisor: Ing. Petr ˇCerva, Ph.D.

Consultant: Ing. Ondˇrej Smola

(3)
(4)
(5)
(6)

Podˇ ekov´ an´ı

Chtˇel bych podˇekovat vedouc´ımu t´eto pr´ace Ing. Petru ˇCervovi, Ph.D. a tak´e Ing. Ondˇreji Smolovi za velice pˇr´ınosn´e konzultace, rady a trpˇelivost, bez kter´ych by tato pr´ace nevznikla.

(7)

Abstrakt

Tato diplomov´a pr´ace se zamˇeˇruje na v´yvoj nov´e generace jiˇz exis- tuj´ıc´ıho ˇreˇsen´ı pro ovl´ad´an´ı osobn´ıho poˇc´ıtaˇce pouze pomoc´ı rozpo- znan´ych hlasov´ych povel˚u. Diplomov´a pr´ace prov´az´ı pouˇzit´ym ty- pem parametrizace, samotn´ym detekov´an´ım ˇreˇcov´ych a neˇreˇcov´ych segment˚u, rozpozn´an´ım hlasov´eho povelu a n´asledn´ym vykon´an´ım rozpoznan´eho povelu. Z´aroveˇn ukazuje strukturu moˇzn´ych povel˚u a jej´ı rozˇsiˇritelnost.

Vypracov´an´ı prob´ıhalo v nˇekolika navazuj´ıc´ıch kroc´ıch.

Nejd˚uleˇzitˇejˇs´ı ˇc´ast´ı bylo vytvoˇren´ı knihovny pro samotnou parametrizaci vstupn´ıho audio sign´alu. Po t´eto f´azi n´asledovalo vytvoˇren´ı dalˇs´ıho modulu pro detekci ˇreˇcov´ych ´usek˚u a jejich odesl´an´ı rozpozn´avac´ımu serveru. Po ´uspˇeˇsnˇe zvl´adnut´em odes´ıl´an´ı ˇreˇcov´ych segment˚u n´asleduje konstrukce struktury pro samotn´e ovl´ad´an´ı poˇc´ıtaˇce.

Po koneˇcn´em vytvoˇren´ı potˇrebn´ych modul˚u autor pˇristoupil k tvorbˇe samotn´e multiplatformn´ı aplikace. Vytv´aˇren´ı prob´ıhalo po- moc´ı knihovny Electron, kter´a umoˇzˇnuje tvorbu aplikac´ı s vyuˇzit´ım bˇeˇznˇe dostupn´ych webov´ych technologi´ı, napˇr. HTML, CSS nebo JavaScript.

Kl´ıˇcov´a slova: Electron, JavaScript, hloubkov´e neuronov´e s´ıtˇe, hlasov´e ovl´ad´an´ı, detektor ˇreˇcov´e aktivity

(8)

Abstract

The focus of this master thesis is on the development of a new generation based on an existing solution for controlling a personal computer only by using recognized spoken commands. The mas- ter thesis describes the type of parameterization used, detection of speech and non-speech segments, recognition of spoken commands and execution of a recognized command. At the same time, the master thesis describes the structure of possible commands and its extensibility.

The elaboration has been divided into separate steps. The most important part was the creation of a library for parameterization of an audio signal input. After this step a new module for detection of speech segments and its dispatch to a recognition server was created.

After the successful creation of a speech segment sender the con- struction of a computer controller structure followed. After the suc- cessful creation of all necessary modules, the author created the final cross-platform application. The application was created by using an Electron framework, which allows the creation of appli- cations by using common web technologies, for example HTML, CSS or JavaScript.

Keywords: Electron, JavaScript, deep neural networks, voice con- trol, speech activity detector

(9)

Obsah

1 Uvod´ 13

1.1 C´ıle pr´ace . . . 14

2 Struktura navrˇzen´e multiplatformn´ı aplikace 15 3 Vyvinut´e moduly 17 3.1 Parametrizace . . . 17

3.1.1 Pˇr´ıprava sign´alu . . . 18

3.1.2 MelFBank pˇr´ıznaky . . . 22

3.2 Detekce ˇreˇcov´ych segment˚u . . . 27

3.2.1 Pouˇzit´a neuronov´a s´ıt’ . . . 27

3.2.2 Vyhlazen´ı v´ystupu neuronov´e s´ıtˇe . . . 28

3.3 Odes´ılatel a rozpozn´an´ı hlasov´eho povelu . . . 33

3.3.1 Nekorektn´ı rozpozn´an´ı . . . 34

3.4 Vykonavatel hlasov´eho povelu . . . 37

3.4.1 Knihovna RobotJS . . . 37

3.4.2 Struktura povel˚u . . . 38

4 Popis vytvoˇren´eho uˇzivatelsk´eho rozhran´ı 39 4.1 Angular . . . 39

4.2 Electron . . . 40

4.3 Vytvoˇren´ı aplikace pomoc´ı knihovny Electron . . . 40

4.4 Distribuce aplikace . . . 46

4.4.1 Zabalen´ı aplikace . . . 46

4.4.2 Vytvoˇren´ı instal´atoru . . . 47

5 Experiment´aln´ı vyhodnocen´ı 49 5.1 Vyhodnocen´ı detektoru . . . 49

5.2 Vyhodnocen´ı rozpozn´avaˇce . . . 50

6 Z´avˇer 52 6.1 Pˇr´ınosy pr´ace . . . 53

6.2 Dalˇs´ı rozvoj aplikace . . . 54

Literatura 55

(10)

Pˇr´ılohy 58 Pˇr´ıloha A: Obsah pˇriloˇzen´eho CD . . . 58

(11)

Seznam obr´ azk˚ u

2.1 Struktura multiplatformn´ı aplikace . . . 15

3.1 Uk´azka Melovy stupnice . . . 17

3.2 Postup uˇzit´ı vybran´e knihovny . . . 18

3.3 Z´akladn´ı kask´ada pˇrevzorkov´an´ı . . . 19

3.4 Zjednoduˇsen´a kask´ada pˇrevzorkov´an´ı . . . 20

3.5 Pˇrevzorkov´an´ı pomoc´ı objektu OfflineAudioContext . . . 20

3.6 Porovn´an´ı pamˇet’ov´ych n´arok˚u . . . 22

3.7 Algoritmus funkce ”addData“ . . . 23

3.8 Uk´azka Hammingova ok´enka . . . 24

3.9 Uk´azka 10 troj´uheln´ıkov´ych filtr˚u pro vzorkovac´ı frekvenci o hodnotˇe 16 kHz . . . 25

3.10 Uk´azka plnˇe propojen´e vrstvy . . . 27

3.11 tanh . . . 28

3.12 SoftMax . . . 28

3.13 hard tanh . . . 28

3.14 Z´akladn´ı model automatu . . . 29

3.15 Model automatu s klouzav´ym pr˚umˇerem . . . 30

3.16 Model automatu s klouzav´ym pr˚umˇerem a filtrac´ı . . . 31

3.17 Uk´azka vyhlazen´ı v´ystupu neuronov´e s´ıtˇe koneˇcn´ym automatem . . . 32

3.18 Model automatu detekuj´ıc´ı konec ˇreˇci pomoc´ı tˇr´ı neˇreˇcov´ych ´usek˚u . . 33

3.19 Audio nahr´avka s ukonˇcen´ım pˇrenosu . . . 35

3.20 Audio nahr´avka s ukonˇcen´ım pˇrenosu po ´upravˇe modulu . . . 36

4.1 Z´akladn´ı vzhled aplikace . . . 41

4.2 Signalizace detektoru ˇreˇci . . . 42

4.3 Z´akladn´ı okno aplikace . . . 43

4.4 Aktualizovan´e okno aplikace . . . 43

4.5 Okno uˇzivatelsk´eho nastaven´ı . . . 44

4.6 Uk´azka pˇrihl´aˇsen´ı uˇzivatele . . . 45

(12)

Seznam vzorc˚ u

Vzorec 1 - Hornopropustn´ı filtr pro odstranˇen´ı stejnosmˇern´e sloˇzky . . . 22

Vzorec 2 - Pˇrevodn´ı vztah z Hertzovy stupnice do Melovy stupnice . . . 24

Vzorec 3 - Pˇrevodn´ı vztah z Melovy stupnice do Hertzovy stupnice . . . 25

Vzorec 4 - Procentu´aln´ı ne´uspˇeˇsnost rozpozn´avaˇce . . . 49

Vzorec 5 - Procentu´aln´ı ne´uspˇeˇsnost detekce ˇreˇci . . . 49

Vzorec 6 - Procentu´aln´ı vyj´adˇren´ı detekce klidov´eho ´useku jako ˇreˇcov´eho . . . 50

(13)

1 Uvod ´

Hlavn´ım z´amˇerem vzniku t´eto diplomov´e pr´ace bylo vytvoˇren´ı nov´e generace jiˇz existuj´ıc´ıho ˇreˇsen´ı a to v podobˇe programu MyVoice. Ten se zamˇeˇruje obzvl´aˇstˇe na lidi s tˇelesn´ymi postiˇzen´ımi a jejich potˇrebu ovl´adat poˇc´ıtaˇc v´yluˇcnˇe pomoc´ı hlasov´ych povel˚u, tj. bez pouˇzit´ı rukou. Obecnˇe lze popsat dvˇe existuj´ıc´ı varianty pˇr´ıstupu. Prvn´ı moˇznost´ı je izolovan´e zpracov´an´ı a v tomto pˇr´ıpadˇe bude tedy pro- gram oˇcek´avat vˇzdy pouze jedin´y povel v promluvˇe. To je pˇr´ıstup vyuˇzit´y jiˇz ve zm´ınˇen´em programu MyVoice. Druhou alternativou je pak spojit´e zpracov´an´ı, kter´e umoˇzˇnuje uˇzivateli vyslovit nˇekolik povel˚u za sebou bez toho, aby musel ˇcekat po vyˇrˇcen´ı prvn´ıho povelu na jeho proveden´ı.

Na trhu existuje nˇekolik moˇzn´ych ˇreˇsen´ı. Jednou z moˇznost´ı je vyuˇz´ıt funkce operaˇcn´ıho syst´emu Windows a to funkce Rozpozn´av´an´ı ˇreˇci. Funguje velice ob- dobnˇe jako program MyVoice, bohuˇzel nen´ı pˇripraven pro ˇcesk´y jazyk. V operaˇcn´ım syst´emu Windows ale existuje dalˇs´ı funkce to a Cortana. Ta umoˇzˇnuje, podobnˇe jako konkurenˇcn´ı Siri od firmy Apple Inc., vytv´aˇret ud´alosti v kalend´aˇri, diktovat email, ovl´adat nastaven´ı poˇc´ıtaˇce, apod. Nicm´enˇe neumoˇzˇnuje ovl´ad´an´ı pohybu a simulov´an´ı stisku tlaˇc´ıtek myˇsi.

Dalˇs´ı z moˇznost´ı, kter´a se nab´ız´ı pro ˇcesk´y trh, je program JetVoice. Ten je velice podobn´y programu MyVoice, umoˇzˇnuje tak´e ovl´ad´an´ı poˇc´ıtaˇce pouze pomoc´ı hlasov´ych povel˚u, pˇrid´av´an´ı nov´ych povel˚u, probl´emem vˇsak je, ˇze vznikl jiˇz v roce 2002 a byl udrˇzov´an pouze do roku 2016. A nav´ıc je tento program dostupn´y, jako program MyVoice, pouze pro uˇzivatele operaˇcn´ıho syst´emu Windows.

Aktu´aln´ı generace vyuˇz´ıv´a standardn´ı algoritmy pro rozpozn´an´ı hlasov´eho po- velu izolovan´eho diktov´an´ı. Probl´emem t´eto verze jsou ale obt´ıˇze spojen´e s distribuc´ı

(14)

a udrˇzovatelnost´ı. Program MyVoice je kompletnˇe instalov´an na stranˇe uˇzivatele a tedy pˇri aktualizaci je nutn´y jeho aktivn´ı z´asah. Tato nev´yhoda by mˇela b´yt od- stranˇena v nov´e verzi tak, ˇze se bude jednat o aplikaci typu klient-server a tedy pro aktualizaci nebude muset uˇzivatel podnikat ˇz´adn´e dalˇs´ı kroky.

Dalˇs´ım pˇr´ınosem nov´e generace by mˇela b´yt moˇznost ovl´adat i jin´e platformy, neˇz souˇcasn´e syst´emy podporuj´ı. Ve st´avaj´ıc´ı verzi je program MyVoice dostupn´y pouze pro operaˇcn´ı syst´em Windows. S novou generac´ı dojde k rozˇs´ıˇren´ı i na dalˇs´ı operaˇcn´ı syst´emy, napˇr. macOS nebo Linux.

Neposledn´ım d˚uvodem vzniku nov´e generace je i to, ˇze v aktu´aln´ı generaci je nutn´a synchronizace uˇzivatele s programem a to tak, ˇze uˇzivatel vyˇrkne vybran´y povel, n´aslednˇe ˇcek´a na rozpozn´an´ı povelu a pot´e jeˇstˇe na jeho vykon´an´ı. Z´aroveˇn je uˇzivatel omezen t´ım, ˇze nem˚uˇze ˇr´ıct v´ıce pˇr´ıkaz˚u za sebou. Tato pr´ace se snaˇz´ı popsan´e probl´emy odstranit a aplikaci tak zefektivnit.

1.1 C´ıle pr´ ace

Bˇehem vypracov´av´an´ı diplomov´e pr´ace tak vznikne nov´y syst´em zamˇeˇren´y prim´arnˇe na handicapovan´e, kteˇr´ı nemaj´ı jinou moˇznost, neˇz vyuˇz´ıt hlasov´eho ovl´ad´an´ı pro kontrolu osobn´ıho poˇc´ıtaˇce. Tento syst´em pak bude fungovat jako multiplatformn´ı, z´aroveˇn bude tak´e l´epe udrˇzovateln´y. Nov´a aplikace by pak mˇela vyuˇz´ıvat spojit´eho zpracov´an´ı a doc´ılit tak komfortnˇejˇs´ıho a intuitivnˇejˇs´ıho pouˇz´ıv´an´ı. Z´aroveˇn tak bude eliminov´an probl´em synchronizace uˇzivatele s aplikac´ı.

V´ysledkem t´eto diplomov´e pr´ace by mˇel b´yt prototyp nov´e generace. Ten bude obsahovat pouze vybranou skupinu hlasov´ych povel˚u pro ovl´ad´an´ı myˇsi. Po dokonˇcen´ı prototypu se pˇredpokl´ad´a dalˇs´ı rozˇsiˇrov´an´ı tak, aby byla umoˇznˇena pln´a konfigurovatelnost aplikace, tak jak je to moˇzn´e v souˇcasn´e verzi programu MyVoice.

(15)

2 Struktura navrˇ zen´ e multiplatformn´ı apli- kace

Jak jiˇz bylo naznaˇceno v pˇredchoz´ı kapitole, struktura aplikace byla navrˇzena typu klient-server. Server rozpozn´avaj´ıc´ı hlasov´e povely je jiˇz pˇripraven´y ´Ustavem In- formaˇcn´ıch technologi´ı a elektroniky a je tedy nutn´e vytvoˇrit klienta. V´ysledn´a struktura m´a pak n´asleduj´ıc´ı podobu:

Server

Klient

Zasílání řečových úseků Příjem rozpoznaných povelů

Knihovna parametrizace

Odesílatel řečových

úseků

Vykonavatel povelů Modul

snímání mikrofonu

Modul pro načtení sítě

Detektor řečové aktivity Vyhlazující

konečný automat

Zastavující konečný automat Modul pro

záznam odesílání

Modul pro záznam zpráv

ze serveru

Obr´azek 2.1: Struktura multiplatformn´ı aplikace

S navrˇzenou strukturou souvis´ı i volba jazyka. V dneˇsn´ı dobˇe existuje nˇekolik pˇr´ıstup˚u k v´yvoji aplikac´ı s r˚uzn´ymi jazyky. Podle zvolen´eho jazyka je n´asledn´e

(16)

pˇrenesen´ı aplikace pro dalˇs´ı platformu r˚uznˇe obt´ıˇzn´e. Je moˇzn´e zah´ajit v´yvoj aplikace ze zadan´eho t´ematu s nˇekter´ym z tradiˇcnˇejˇs´ıch jazyk˚u, jako je napˇr. C++ nebo Java, ale v dneˇsn´ı dobˇe, kdy je zamˇeˇrena pozornost nejv´ıce na webov´e aplikace, je vhodn´e myslet i na tuto alternativu. Proto byl vybr´an jazyk JavaScript, kter´y je nejv´ıce pouˇz´ıvan´y pr´avˇe v t´eto oblasti.

Jedn´a se o interpretovan´y multiplatformn´ı jazyk s podporou objektovˇe ori- entovan´eho programov´an´ı. Ve vˇetˇsinˇe pˇr´ıpad˚u se pouˇz´ıv´a jako doplˇnuj´ıc´ı element webov´ych str´anek umoˇzˇnuj´ıc´ı pokroˇcilou funkcionalitu. Avˇsak existuj´ı i knihovny umoˇzˇnuj´ıc´ı vytvoˇren´ı klasick´e aplikace pro stoln´ı poˇc´ıtaˇce.

V´yvoj klienta byl, dle zvolen´e struktury, rozdˇelen do nez´avisl´ych modul˚u. Ty prov´adˇej´ı jednotliv´e ˇcinnosti, popsan´e v kapitole 3 a komunikuj´ı spolu pˇres vyuˇzit´ı zpˇetn´eho vol´an´ı nebo asynchronn´ıch vol´an´ı. Pr´avˇe toto synchronizov´an´ı je velice obt´ıˇzn´e, protoˇze jazyk JavaScript je pouze jednovl´akenn´y a neumoˇzˇnuje vytv´aˇren´ı pomocn´ych vl´aken jako napˇr. jazyk Java nebo C++. Veˇsker´a ˇcinnost pak prob´ıh´a tak, ˇze sn´ıman´y sign´al z mikrofonu je vˇzdy pˇred´an kask´adˇe funkc´ı pro parametrizaci z vytvoˇren´e knihovny. Vektor parametr˚u je n´aslednˇe pˇred´an modulu ShiftBuffer, kter´y uchov´av´a potˇrebn´y poˇcet tˇechto vektor˚u pro dopˇredn´y pr˚uchod neuronovou s´ıt´ı a vyhlazovac´ım automatem. Pouze kdyˇz je zjiˇstˇena ˇreˇc, dojde k nastaven´ı pˇr´ıznak˚u v modulu sn´ım´an´ı mikrofonu a modulu odesilatel. Uveden´y pˇr´ıznak pak indikuje ˇreˇcov´y stav. Odesilatel n´aslednˇe zah´aj´ı komunikaci se serverem a zaˇcne odes´ılat na vyˇz´ad´an´ı serveru ˇreˇcov´e ´useky. Ze serveru pˇrich´az´ı postupnˇe rozpoznan´e hluky a povely, kter´e se pˇredaj´ı modulu vykon´avaj´ıc´ımu povely, kde je vyuˇzita knihovna RobotJS pro vykon´av´an´ı jednotliv´ych povel˚u, viz kapitola 3.4. Pouˇzit´a knihovna je multiplatformn´ı a dok´aˇze tud´ıˇz ovl´adat r˚uzn´e operaˇcn´ı syst´emy. Takto vznikne provazuj´ıc´ı modul, kter´y vyuˇz´ıv´a grafick´e uˇzivatelsk´e rozhran´ı vytvoˇren´e pomoc´ı knihovny Electron. To je pops´ano v kapitole 4.

(17)

3 Vyvinut´ e moduly

3.1 Parametrizace

V t´eto kapitole bude podrobnˇe pops´an postup z´ısk´an´ı vstupn´ıho sign´alu ve zvo- len´em jazyce a n´asledn´a parametrizace. Lze pracovat v klasick´e Hertzov´e stupnici, avˇsak pro re´alnou ˇreˇc toto nen´ı v´yhodn´e. Klasick´a Hertzova stupnice d´av´a d˚uraz na vˇsechny frekvence ve stejn´e m´ıˇre, aˇckoliv pro zpracov´an´ı ˇreˇci je d˚uleˇzit´a oblast niˇzˇs´ıch frekvenc´ı, ve kter´ych prob´ıh´a ˇreˇc a naopak je m´enˇe d˚uleˇzit´a oblast vyˇsˇs´ıch frekvenc´ı, kde je jiˇz velmi m´alo ˇreˇcov´e aktivity. Z popsan´eho je v´yhodnˇejˇs´ı vyuˇz´ıt Melovu stupnici, kter´a zohledˇnuje d˚uleˇzit´e frekvenˇcn´ı oblasti. Uk´azku Melovy stup- nice lze vidˇet na n´asleduj´ıc´ım obr´azku:

0 500 1000 1500 2000 2500 3000 3500 4000

Hertzova stupnice 0

500 1000 1500 2000 2500

Melova stupnice

Obr´azek 3.1: Uk´azka Melovy stupnice

(18)

3.1.1 Pˇ r´ıprava sign´ alu

Prvn´ım, a tak´e nejd˚uleˇzitˇejˇs´ım, krokem je z´ısk´an´ı vstupn´ıho sign´alu z analogovˇe digit´aln´ıho pˇrevodn´ıku. Toho lze ve zvolen´em jazyce doc´ılit nˇekolika zp˚usoby. Jed- nou z moˇznost´ı je vyuˇzit´ı nˇekter´e z bˇeˇznˇe dostupn´ych knihoven ve spr´avci bal´ıˇck˚u Node.JS[15]. Takov´ych knihoven existuje nepˇrebern´e mnoˇzstv´ı, napˇr. RecordRTC, React Native audio recording a byly pro ´uˇcely t´eto pr´ace postupnˇe vyzkouˇseny. Al- ternativou je velmi jednoduch´a knihovna microphone-stream, kter´a ale neposkytuje ˇz´adnou dalˇs´ı funkcionalitu. Postupn´ym testov´an´ım vybran´ych knihoven se ovˇsem narazilo na probl´em. Ne vˇsechny knihovny spolupracuj´ı se zvolenou knihovnou pro vytvoˇren´ı v´ysledn´e aplikace, o kter´e bude ˇreˇc v kapitole 4. Postupn´ym zkouˇsen´ım, proˇc k tomuto probl´emu doch´az´ı, bylo zjiˇstˇeno, ˇze knihovny nespr´avnˇe ˇz´adaj´ı o potˇrebn´e opr´avnˇen´ı a tud´ıˇz se ˇz´adost o opr´avnˇen´ı k vyuˇzit´ı uˇzivatelova mikrofonu nezobraz´ı. Takov´eto chov´an´ı nen´ı ˇz´adouc´ı a aplikace by se mˇela chovat tak, ˇze obdrˇz´ı pˇr´ıstup k mikrofonu, aniˇz by uˇzivatel musel ˇz´adost potvrzovat. Proto byla zvolena knihovna microphone-stream, kter´a toto splˇnuje.

Knihovna poskytuje velmi jednoduch´e aplikaˇcn´ı rozhran´ı a postupuje se dle n´asleduj´ıc´ıho diagramu:

Získání přístupu

Vytvoření objektu

Nastavení události

"data"

Nastavení události

"format"

Byl přístup získán? Ano

Informování uživatele

Ne

Obr´azek 3.2: Postup uˇzit´ı vybran´e knihovny

(19)

Jak je patrn´e z diagramu, nejdˇr´ıve se z´ısk´a potˇrebn´e opr´avnˇen´ı pro pˇr´ıstup k mikrofonu. N´asleduje vytvoˇren´ı a nastaven´ı instance tˇr´ıdy MicrophoneStream.

Po ´uspˇeˇsn´em vytvoˇren´ı instance je d´ale d˚uleˇzit´e nastavit potˇrebn´e ud´alosti a to konkr´etnˇe ud´alost

”data“ a

”format“. Prvn´ı z tˇechto ud´alost´ı slouˇz´ı k urˇcen´ı, jak se bude zpracov´avat z´ıskan´a ˇc´ast dat. Naopak ud´alost

”format“ slouˇz´ı k z´ısk´an´ı hodnoty vzorkovac´ı frekvence, se kterou jsou data sn´ım´ana z mikrofonu. To je velmi podstatn´y

´

udaj. V dalˇs´ıch kroc´ıch je pak vyuˇz´ıv´ana neuronov´a s´ıt’, kter´a byla tr´enov´ana na datech s konkr´etn´ı vzorkovac´ı frekvenc´ı.

Po ´uspˇeˇsn´em vytvoˇren´ı modulu, kter´y se star´a o sn´ım´an´ı mikrofonu, se mohlo pˇristoupit k dalˇs´ıˇc´asti pˇr´ıpravy sign´alu, a to pˇrevzorkov´an´ı. Pˇrevzorkov´an´ı vstupn´ıho sign´alu je z´asadn´ı, jelikoˇz zvolen´y jazyk neumoˇzˇnuje nastaven´ı konkr´etn´ıch hodnot pro sn´ım´an´ı a pouˇz´ıv´a z´akladn´ı hodnoty zjiˇstˇen´e operaˇcn´ım syst´emem. Pro tento modul jsou v z´asadˇe moˇzn´e dvˇe varianty ˇreˇsen´ı. Prvn´ı z nich, je vytvoˇren´ı kask´ady zpracov´avaj´ıc´ıch blok˚u a to napˇr´ıklad z:

1. Nadvzorkov´an´ı sign´alu s vloˇzen´ım L − 1 nul mezi jednotliv´e vzorky 2. Dolnopropustn´ı filtr s hraniˇcn´ı frekvenc´ıLπ

3. Dolnopropustn´ı filtr s hraniˇcn´ı frekvenc´ıMπ

4. Podvzorkov´an´ı sign´alu s uloˇzen´ım kaˇzd´eho M t´eho vzorku

vstup

Nadvzorkování L

Dolní propust zisk = L zlom = π/L

Dolní propust zisk = 1 zlom = π/M

Podvzorkování M

výstup

Obr´azek 3.3: Z´akladn´ı kask´ada pˇrevzorkov´an´ı

Vznikne tak kask´ada jako na obr´azku 3.3. D´ale je moˇzn´e uvedenou strukturu upravit. Jelikoˇz jsou v kask´adˇe dva dolnopropustn´ı filtry, lze je nahradit pouze jedn´ım dolnopropustn´ım filtrem s hraniˇcn´ı frekvenc´ı min(π

L,Mπ).

(20)

vstup

Nadvzorkování L

Dolní propust zisk = L zlom = min(π/L, π/M)

Podvzorkování M

výstup

Obr´azek 3.4: Zjednoduˇsen´a kask´ada pˇrevzorkov´an´ı

Alternativou ke kask´adov´emu zpracov´an´ı je vyuˇzit´ı moˇznosti zvolen´eho ja- zyka, jeˇz v sobˇe obsahuje jiˇz implementovanou moˇznost pˇrevzorkov´an´ı sign´alu. Z dokumentace [10] bylo zjiˇstˇeno, ˇze k tomu lze vyuˇz´ıt dostupn´y objekt OfflineAudi- oContext s postupem dle n´asleduj´ıc´ıho diagramu:

Získání instanci 

„OfflineAudioContext“

Vytvoření zdroje

Nastavení zdroje

Nastavení události

„oncomplete“

Spuštění převodu

Obr´azek 3.5: Pˇrevzorkov´an´ı pomoc´ı objektu OfflineAudioContext

Pˇri vytv´aˇren´ı nov´e instance tˇr´ıdy se zad´a poˇcet kan´al˚u vstupn´ıho sign´alu, poˇcet vzork˚u a c´ılov´a vzorkovac´ı frekvence. D´ale je d˚uleˇzit´e nastavit promˇennou

”oncomplete“. V tomto pˇr´ıpadˇe se bude jednat o funkci ud´avaj´ıc´ı, co se stane po pˇrevzorkov´an´ı sign´alu. V n´asleduj´ıc´ım kroku se pomoc´ı tohoto objektu vytvoˇr´ı nov´y

(21)

objekt typu AudioBuffer s obdobn´ymi parametry, jen vzorkovac´ı frekvence je ten- tokr´at vstupn´ı. Pr´avˇe do tohoto objektu se zkop´ıruj´ı vstupn´ı data. N´asleduje vy- tvoˇren´ı objektu typu AudioBufferSourceNode pomoc´ı funkce

”createBufferSource“

objektu AudioBuffer. Po potˇrebn´em propojen´ı objekt˚u jiˇz doch´az´ı pouze ke spuˇstˇen´ı pˇrevodu.

Pˇri prvn´ım testov´an´ı tohoto modulu se uk´azalo, ˇze modul nen´ı dostateˇcnˇe rychl´y pro re´aln´e pouˇzit´ı. Postupn´ym zjiˇst’ov´an´ım pˇr´ıˇciny bylo odhaleno, ˇze je tento probl´em zp˚usoben modulem pro pˇrevzorkov´an´ı. Pˇri pozorov´an´ı chov´an´ı tohoto mo- dulu z´aroveˇn byl odhalen nedostatek vybran´eho pˇr´ıstupu k ˇreˇsen´ı dan´eho probl´emu a t´ım jsou vysok´e pamˇet’ov´e n´aroky. Jelikoˇz se jedn´a prim´arnˇe o prostˇredek pro pˇrevzorkov´an´ı audio nahr´avky a nikoliv potenci´alnˇe nekoneˇcn´eho proudu dat, v´ysledn´a data z˚ust´avaj´ı v doˇcasn´e pamˇeti jako aktivn´ı, tj. s referenc´ı na nˇe, takˇze je nelze odstranit pomoc´ı algoritmu Garbage Collector.

Jak jiˇz bylo zm´ınˇeno, jazyk JavaScript neumoˇzˇnuje zvolen´ı konkr´etn´ıch hod- not pro sn´ım´an´ı mikrofonu. Proto byl pˇrepracov´an i modul pro sn´ım´an´ı mikrofonu a nahrazen pokroˇcilejˇs´ı knihovnou, kter´a toto umoˇzˇnuje. Z uveden´eho d˚uvodu byla vybr´ana knihovna RecordRTC jako vhodn´a n´ahrada. Ta, dle dokumentace [7], fun- guje velice obdobnˇe jako dosud navrˇzen´y pˇr´ıstup, avˇsak jsou zde drobn´e odliˇsnosti.

Jak je jiˇz zˇrejm´e, z´akladn´ı odliˇsnost je moˇznost volby vzorkovac´ı frekvence a bi- tov´e hloubky. Aˇckoliv se m˚uˇze jevit, ˇze tato knihovna upravuje sn´ım´an´ı mikrofonu, prob´ıh´a zde z´aroveˇn se sn´ım´an´ım tak´e pˇrevzorkov´an´ı, ˇc´ımˇz je dosaˇzeno moˇznosti volby parametr˚u sn´ım´an´ı mikrofonu. Z´aroveˇn umoˇzˇnuje definovat v jak´em datov´em form´atu chceme z´ıskat sn´ıman´a data.

Posledn´ı odliˇsnost´ı je form´at, v jak´em jsou sn´ıman´a data z´ısk´ana. V pˇredchoz´ım pˇr´ıpadˇe se jednalo o vzorky sign´alu, nyn´ı jsou z´ısk´any objekty typu Blob. Tyto ob- jekty jsou ve skuteˇcnosti soubory zadan´eho datov´eho typu, kter´e jsou uchov´av´any pouze v pamˇeti. Proto je nutn´e je pˇred dalˇs´ım zpracov´an´ım naˇc´ıst. K tomu lze vyuˇz´ıt standardn´ı tˇr´ıdy FileReader skriptovac´ıho jazyka JavaScript, a n´aslednˇe je dek´odovat podle typu souboru. Dalˇs´ı vlastnost´ı tohoto objektu je to, ˇze ho lze oznaˇcit jako ne- aktivn´ı a tak umoˇznit automatick´e spravov´an´ı pamˇeti pomoc´ı algoritmu Garbage

(22)

Collector. Touto zmˇenou doˇslo nejen ke zrychlen´ı cel´eho vytv´aˇren´eho modulu, ale tak´e pamˇet’ov´e n´aroky se velice sn´ıˇzily, viz 3.6.

0 50 100 150

0 2 4 6 8 10 12 14×105

Nový

Obr´azek 3.6: Porovn´an´ı pamˇet’ov´ych n´arok˚u

3.1.2 MelFBank pˇ r´ıznaky

Po pˇr´ıpravˇe sign´alu je moˇzn´e pˇristoupit k samotn´e parametrizaci. Ta je rozdˇelena do jednotliv´ych krok˚u. Prvn´ım z nich je pˇriˇcten´ı n´ahodn´eho ˇsumu o velmi mal´e hodnotˇe ke kaˇzd´emu vzorku sign´alu, typicky v rozsahu ⟨−1, 1⟩. To se prov´ad´ı z d˚uvodu typov´ych rozd´ıl˚u pˇrevodn´ık˚u pouˇz´ıvan´ych u zvukov´ych karet. Na nich lze pozorovat pˇrid´an´ı nˇekolika nulov´ych hodnot na zaˇc´atku a na konci vzorkovac´ıho procesu. To by znaˇcnˇe komplikovalo v´ypoˇcetnˇe v´yhodnˇejˇs´ı zpracov´an´ı pomoc´ı funkce logaritmu, kter´y nen´ı definov´an pro hodnotu v bodˇe 0.

Po pˇrid´an´ı n´ahodn´eho ˇsumu n´asleduje odstranˇen´ı stejnosmˇern´e sloˇzky zvu- kov´e karty. Stejnosmˇernou sloˇzku je moˇzn´e odstranit aplikov´an´ım hornopropustn´ıho filtru dle n´asleduj´ıc´ıho pˇredpisu:

y (n) = x (n) − α · x (n − 1) (Vzorec 1)

(23)

Jak je patrn´e, pro prvek vektoru y s indexem n plat´ı, ˇze je rozd´ılem prvku vstupn´ıho sign´alu x s indexem n a upraven´e hodnoty vstupn´ıho sign´alu s indexem n − 1 promˇennou α. Pro α promˇennou plat´ı α .

= 1, obvykle je pro tuto promˇennou ud´av´ana hodnota α = 0, 97, coˇz vych´az´ı z praktick´ych zkuˇsenost´ı, kdy se tato hod- nota jev´ı jako nejide´alnˇejˇs´ı.

Dalˇs´ım krokem je rozdˇelen´ı vstupn´ıho sign´alu do kr´atk´ych ´usek˚u s poˇzadovanou d´elkou a pˇrekryvem. K tomu byla vytvoˇreno tˇr´ıda ShiftBuffer, kter´a bude toto re- alizovat. Pˇri vytv´aˇren´ı nov´e instance je nutn´e specifikovat parametry jako velikost sledovan´eho okna, velikost pˇrekryvu jednotliv´ych oken a funkce, kter´e se pˇred´a sle- dovan´y ´usek dat. Tˇr´ıda samotn´a pak jiˇz obsahuje jen dvˇe podstatn´e funkce a to

”addData“ a

”rotateBuffer“. Funkce

”rotateBuffer“ je velice jednoduch´a, star´a se pouze o posun prvk˚u v intern´ı promˇenn´e pomoc´ı cyklu. Naopak funkce

”addData“ je sloˇzitˇejˇs´ı a obsahuje tedy prakticky veˇskerou funkcionalitu. Objekt v sobˇe uchov´av´a, kolik prvk˚u jiˇz obsahuje z n´asleduj´ıc´ıho ´useku. Pokud je zbytek menˇs´ı nebo roven d´elce nov´ych dat, dojde k pˇrekop´ırov´an´ı ˇc´asti dat a n´asledn´emu zpracov´an´ı ´useku.

N´asleduje kontrola, zda jsou k dispozici dalˇs´ı prvky. Pokud jsou, tak dokud je to moˇzn´e, dojde k jejich pˇrekop´ırov´an´ı a zpracov´an´ı. Zbytek dat se tak´e zkop´ıruje do vnitˇrn´ı promˇenn´e a poˇcet prvk˚u z dalˇs´ıho ´useku se zmˇen´ı dle zbyl´ych dat. Cel´y algoritmus je pops´an na n´asleduj´ıc´ım diagramu:

Je dostatek dat

Rotace

Přidání dat

Zpracování Ano

Je dostatek dat

Možnost dalšího zpracován Rotace

Přidání dat

Zpracování

Ano Spočtení, kolik

vzorků bylo získáno z dalšího

úseku

Rotace

Přidání dat Ne

Ne

Obr´azek 3.7: Algoritmus funkce

”addData“

(24)

Pro takto rozdˇelen´e ´useky jiˇz lze spoˇc´ıtat MelFBank pˇr´ıznaky. Nejprve se dan´y ´usek vyn´asob´ı Hammingov´ym ok´enkem po prvc´ıch. Pr˚ubˇeh tohoto ok´enka je zn´azornˇen na obr´azku 3.8.

0 50 100 150 200 250 300 350 400

vzorky [-]

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Amplituda [-]

Obr´azek 3.8: Uk´azka Hammingova ok´enka

Rozhoduj´ıc´ı je vytvoˇren´ı troj´uheln´ıkov´ych filtr˚u k urˇcen´ı v´ahy magnitudov´eho spektra, coˇz bude pops´ano d´ale. K vytvoˇren´ı tˇechto filtr˚u v Melovˇe stupnici je nutn´e specifikovat nejmenˇs´ı povolenou frekvenci, nejvˇetˇs´ı povolenou frekvenci a tak´e poˇcet filtr˚u N . Pro pˇrevod z klasick´e Hertzov´e stupnice do Melovy stupnice je pouˇzit n´asleduj´ıc´ı vzorec:

mel = 1127 · ln (

1 + hz 700

)

(Vzorec 2)

Pomoc´ı tohoto vztahu jsou zjiˇstˇeny hodnoty pro nejmenˇs´ı, resp. nejvˇetˇs´ı, po- volenou frekvenci v Melovˇe stupnici. N´aslednˇe lze vytvoˇrit N prvkov´y vektor aritme- tick´e posloupnosti s krajn´ımi body v nejniˇzˇs´ı a nejvyˇsˇs´ı povolen´e frekvenci v Melovˇe

(25)

stupnici. Takto z´ıskan´y vektor je n´aslednˇe zpˇetnˇe pˇreveden do klasick´e Hertzovy stupnice a to pomoc´ı inverzn´ı funkce k Vzorec 2. Cel´y tento proces byl proveden z d˚uvodu z´ısk´an´ı reprezentativnˇejˇs´ıch pˇr´ıznak˚u, neˇz by bylo moˇzn´e z´ıskat v klasick´e Hertzovˇe stupnici.

hz = 700 ·(

e1127mel − 1)

(Vzorec 3)

S takto pˇripraven´ym vektorem jiˇz lze sestavit troj´uheln´ıkov´e filtry, viz obr´azek 3.9. Jak je z nˇeho patrno, vytvoˇren´e pr˚ubˇehy jednotliv´ych filtr˚u maj´ı tvar rovnora- menn´ych troj´uheln´ık˚u, kde kaˇzd´y dalˇs´ı troj´uheln´ık dan´eho filtru zaˇc´ın´a pˇresnˇe pod vrcholem troj´uheln´ıku pˇredchoz´ıho filtru.

0 1000 2000 3000 4000 5000 6000 7000 8000

Frekvence [hz]

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Amplituda [-]

Obr´azek 3.9: Uk´azka 10 troj´uheln´ıkov´ych filtr˚u pro vzorkovac´ı frekvenci o hodnotˇe 16 kHz

(26)

Jelikoˇz se bude d´ale vyuˇz´ıvat Fourierova transformace, resp. jej´ı rychl´a alter- nativa, je d˚uleˇzit´e zkontrolovat d´elku dat a pˇr´ıpadnˇe ji doplnit nulov´ymi prvky. To umoˇzn´ı pouˇzit´ı v´ypoˇcetnˇe m´enˇe n´aroˇcn´ych algoritm˚u. S takto upraven´ymi daty jiˇz lze prov´est rychlou Fourierovu transformaci. Pro dalˇs´ı kroky je moˇzn´e zpracov´avat pouze polovinu v´ysledn´eho spektra, vyuˇz´ıv´a se pro tyto ´uˇcely v´yhodn´a vlastnost zrcadlov´e symetrie spektra. Ze spektra, kter´e je v oblasti imagin´arn´ıch ˇc´ısel, je n´aslednˇe zjiˇstˇeno magnitudov´e spektrum v oblasti re´aln´ych ˇc´ısel a to vypoˇcten´ım absolutn´ı hodnoty frekvenˇcn´ı oblasti. Pro z´ısk´an´ı pˇr´ıznak˚u jiˇz staˇc´ı vyn´asobit ma- tici troj´uheln´ıkov´ych filtr˚u spolu se zjiˇstˇen´ym magnitudov´ym spektrem. Vznikne tak N prvkov´y vektor pˇr´ıznak˚u. Ovˇsem i ten je nutn´e z parametrick´ych d˚uvod˚u praho- vat a to tak, ˇze pˇri hodnotˇe menˇs´ı neˇz je dan´y limit, bude nastavena nov´a hodnota.

Pokud je vˇsak hodnota vˇetˇs´ı neˇz zvolen´y pr´ah, je nov´a hodnota zjiˇstˇena jej´ı logarit- mickou hodnotou.

Dalˇs´ım krokem k vypoˇcten´ı MelFBank pˇr´ıznak˚u jsou normalizace. Prvn´ı z nich vyuˇz´ıv´a pr˚umˇer˚u zjiˇstˇen´ych pomoc´ı nˇekolika pˇr´ıznakov´ych vektor˚u. Normali- zace pak prob´ıh´a odeˇcten´ım zjiˇstˇen´eho lok´aln´ıho pr˚umˇeru od jednotliv´ych hodnot.

Druh´a z normalizac´ı prob´ıh´a jiˇz pomoc´ı glob´alnˇe zjiˇstˇen´ych hodnot. Ty byly zjiˇstˇeny a poskytnuty ´Ustavem informaˇcn´ıch technologi´ı a elektroniky. Zde jiˇz normalizace neprob´ıh´a pouze odeˇcten´ım pr˚umˇern´e hodnoty, ale tak´e jej´ım vydˇelen´ım zjiˇstˇenou smˇerodatnou odchylkou.

V n´asleduj´ıc´ı f´azi se bude vyuˇz´ıvat neuronov´a s´ıt’ pracuj´ıc´ı s kontextem. To bude zpracov´an aktu´aln´ı pˇr´ıznakov´y vektor a jeho okol´ı, kter´e lze nastavit pˇred samotn´ym tr´enov´an´ım s´ıtˇe. V tomto pˇr´ıpadˇe se zpracov´av´a aktu´aln´ı pˇr´ıznakov´y vektor, 25 minul´ych a 25 budouc´ıch pˇr´ıznakov´ych vektor˚u. Jak je tedy patrn´e, je zde nutn´e zav´est zpoˇzdˇen´ı. Mus´ı totiˇz doj´ıt k naˇcten´ı prvn´ıch 25 hodnot, neˇz bude moˇzn´e z´ıskat relevantn´ı hodnoty. K tˇemto ´uˇcel˚um lze vyuˇz´ıt jiˇz vytvoˇrenou tˇr´ıdu ShiftBuffer, kter´a pˇresnˇe tuto funkcionalitu obsahuje, staˇc´ı jen nastavit pˇr´ısluˇsn´e parametry, tj. velikost okna, pˇrekryvu okna a zpracov´avaj´ıc´ı funkce.

(27)

3.2 Detekce ˇ reˇ cov´ ych segment˚ u

Pro optimalizaci velikosti rozpozn´avan´ych dat je d˚uleˇzit´e detekovat pouze ˇreˇcov´e segmenty a teprve ty rozpozn´avat. K tomu lze vyuˇz´ıt princip hlubok´ych neuronov´ych s´ıt´ı.

3.2.1 Pouˇ zit´ a neuronov´ a s´ıt’

Jelikoˇz navrˇzen´ı a natr´enov´an´ı neuronov´e s´ıtˇe nen´ı hlavn´ım c´ılem t´eto diplomov´e pr´ace, byla jiˇz natr´enovan´a s´ıt’ poskytnuta ´Ustavem informaˇcn´ıch technologi´ı a elek- troniky. Jelikoˇz jiˇz byly z´ısk´any reprezentativn´ı pˇr´ıznaky, nen´ı nutn´e vyuˇz´ıt zde nˇekter´e ze sloˇzitˇejˇs´ıch typ˚u vrstev neuronov´ych s´ıt´ı, ale pouze plnˇe propojen´e vrstvy a uˇsetˇrit tak v´ypoˇcetn´ı v´ykon a pˇr´ıpadnˇe tak´e pamˇet’.

vstup

vstup

výstup

výstup

výstup

Obr´azek 3.10: Uk´azka plnˇe propojen´e vrstvy

Vyuˇzit´a neuronov´a s´ıt’ se skl´ad´a z plnˇe propojen´ych vrstev a m´a tak podobu jako na obr´azku 3.10. Je sloˇzena ze vstupn´ı vrstvy, ˇsesti skryt´ych vrstev a v´ystupn´ı vrstvy. Aby bylo moˇzn´e v˚ubec neuronovou s´ıt’ pouˇz´ıt, musely b´yt vytvoˇreny dalˇs´ı moduly. Prvn´ı z nich slouˇz´ı k naˇcten´ı neuronov´e s´ıtˇe z bin´arn´ıho souboru. To se skl´ad´a z naˇcten´ı hlaviˇcky souboru a pomoc´ı zjiˇstˇen´ych hodnot, tj. poˇctu vrstev

(28)

a jejich poˇctu neuron˚u. Dalˇs´ı souˇc´ast´ı uveden´eho modulu je pak naˇcten´ı zbytku souboru.

Jako druh´y byl vytvoˇren modul realizuj´ıc´ı dopˇredn´y pr˚uchod neuronovou s´ıt´ı.

Ten prob´ıh´a v cyklu tak, ˇze pro kaˇzdou vrstvu se spoˇc´ıt´a v´ystup z konkr´etn´ı vrstvy, pomoc´ı konfigurace je zjiˇstˇena aktivaˇcn´ı funkce a v dalˇs´ım kroku je pouˇzit v´ystup z vybran´e aktivaˇcn´ı funkce, kter´e byl pˇred´an v´ystup z dan´e vrstvy neuronov´e s´ıtˇe.

Z´ısk´an´ı konkr´etn´ı funkce pak prob´ıh´a pomoc´ı n´avrhov´eho vzoru Factory, kdy za pomoci n´azvu funkce je vr´acena reference na pˇr´ısluˇsnou realizuj´ıc´ı funkci.

Jako aktivaˇcn´ı funkce bylo implementov´ano hned nˇekolik funkc´ı, aktu´alnˇe pouˇz´ıvan´a funkce tanh a pro budouc´ı potˇreby funkce Sof tM ax a hard tanh. Pr˚ubˇehy tˇechto funkc´ı lze sledovat na pˇripojen´ych zobrazen´ıch:

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

Obr´azek 3.11: tanh

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1

Obr´azek 3.12: SoftMax

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

Obr´azek 3.13: hard tanh

3.2.2 Vyhlazen´ı v´ ystupu neuronov´ e s´ıtˇ e

V´ystup neuronov´e s´ıtˇe vˇsak m˚uˇze kol´ısat, je proto nutn´e v´ystup z neuronov´e s´ıtˇe vyhladit tak, aby se toto co nejv´ıce eliminovalo. Z tohoto d˚uvodu byl vyuˇzit a naimplementov´an koneˇcn´y automat, kter´y umoˇzˇnuje velice efektivnˇe ˇreˇsit popsan´y probl´em.

Jako prvn´ı byl vytvoˇren samotn´y koneˇcn´y automat. Ten se skl´adal pouze ze dvou stav˚u

”sS“ reprezentuj´ıc´ı ˇreˇcov´y stav a

”sN“ reprezentuj´ıc´ı klidov´y stav.

Pro pˇrechod z jednoho stavu do druh´eho staˇc´ı, aby na vstupu byla hodnota 0,

(29)

reprezentuj´ıc´ı ˇreˇcov´y ´usek, nebo 1 reprezenzuj´ıc´ı klidov´y ´usek. Automat tak z´ıskal n´asleduj´ıc´ı podobu:

sN sS

0

1 vstup

výstup výstup

1 0

Obr´azek 3.14: Z´akladn´ı model automatu

Nicm´enˇe tato struktura neˇreˇs´ı dan´y probl´em, jelikoˇz doch´az´ı k vracen´ı st´ale stejn´e hodnoty, jako ud´av´a neuronov´a s´ıt’, doch´az´ı prakticky pouze ke kop´ırov´an´ı hodnot. Proto musela b´yt pˇrid´ana logika, kter´a bude ovlivˇnovat v´ystup koneˇcn´eho automatu, napˇr. klouzav´y pr˚umˇer. Ten funguje na principu ukl´ad´an´ı n posledn´ıch hodnot, ze kter´ych se zjiˇst’uje pr˚umˇer a podle zadan´eho prahu se rozhoduje, zda jde o ˇreˇcov´y nebo klidov´y ´usek. Automat m´a po t´eto ´upravˇe podobu jako na obr´azku 3.15.

(30)

sN sS

průměr < práh vstup

výstup výstup

průměr ≥ práh

průměr < práh průměr ≥ práh

Obr´azek 3.15: Model automatu s klouzav´ym pr˚umˇerem

Bˇehem testov´an´ı vˇsak bylo zjiˇstˇeno, ˇze ani tento model nen´ı dostaˇcuj´ıc´ı. Pˇri zaˇc´atku sn´ım´an´ı dat z mikrofonu je chybnˇe rozpozn´ano nˇekolik ´usek˚u jako ˇreˇcov´ych a dojde tak k pokusu o rozpozn´an´ı. To je d´ano prim´arn´ı vlastnost´ı zvukov´ych karet a jejich dynamick´ym n´astupem, kter´y je pak chybnˇe detekov´an jako ˇreˇcov´e ´useky.

Jelikoˇz je souˇc´ast´ı vytv´aˇren´e aplikace i vizualizace detektoru ˇreˇci, mohl by se koncov´y uˇzivatel chybnˇe domn´ıvat, ˇze aplikace nefunguje spr´avnˇe. Proto byl pˇrid´an dalˇs´ı stav a to filtraˇcn´ı. Z´akladn´ım principem jeho fungov´an´ı je, ˇze pˇri zaˇc´atku detekce kontroluje, zda je klouzav´y pr˚umˇer vˇetˇs´ı neˇz zvolen´y pr´ah. Pokud je pr˚umˇer vˇetˇs´ı, pak z˚ust´av´a ve stejn´em stavu a pouze pokud je pr˚umˇer menˇs´ı, tak se stav zmˇen´ı na

”sN“. Koneˇcn´a podoba automatu je tedy n´asleduj´ıc´ı:

(31)

sN sS

průměr < práh vstup

výstup výstup

průměr ≥ práh

sF

průměr < práh

průměr ≥ práh

Obr´azek 3.16: Model automatu s klouzav´ym pr˚umˇerem a filtrac´ı

Takto pˇripraven´y koneˇcn´y automat jiˇz ´uspˇeˇsnˇe vyhlazuje v´ystup neuronov´e s´ıtˇe. Uk´azku vyhlazen´ı v´ystupu lze pak vidˇet na n´asleduj´ıc´ım obr´azku:

(32)

0 100 200 300 400 500 600 0

0.2 0.4 0.6 0.8 1

Obr´azek 3.17: Uk´azka vyhlazen´ı v´ystupu neuronov´e s´ıtˇe koneˇcn´ym automatem

I s takto vyhlazen´ym v´ystupem neuronov´e s´ıtˇe vˇsak m˚uˇze doj´ıt k tomu, ˇze dan´y ˇreˇcov´y ´usek bude chybnˇe rozpozn´an jako klidov´y a tedy nedojde k jeho odesl´an´ı na rozpozn´avaj´ıc´ı server. Proto je tento automat pouˇzit pouze pro detekci zaˇc´atku ˇreˇci a tedy musel b´yt vytvoˇren dalˇs´ı modul, kter´y detekuje jej´ı konec. K tomu lze opˇet vyuˇz´ıt pˇr´ıstup koneˇcn´ych automat˚u. Byl tedy zkonstruov´an modul, kter´y se- stav´ı automat dle zadan´ych parametr˚u. Zjednoduˇsenˇe lze ˇr´ıci, ˇze navrhovan´y auto- mat funguje tak, ˇze sleduje, kolik po sobˇe jdouc´ıch klidov´ych ´usek˚u bylo zjiˇstˇeno z vyhlazen´eho v´ystupu neuronov´e s´ıtˇe. Pouze pokud byl detekov´an zadan´y poˇcet klidov´ych ´usek˚u, zmˇen´ı se stav automatu a zastav´ı se odes´ıl´an´ı na rozpozn´avaj´ıc´ı server. Automat se resetuje pouze tehdy, pokud se nedoˇslo do koncov´eho stavu a byl rozpozn´an ˇreˇcov´y ´usek a nebo v pˇr´ıpadˇe, ˇze byl detekov´an zaˇc´atek nov´eho ˇreˇcov´eho

´

useku. Automat m´a pak n´asleduj´ıc´ı podobu:

(33)

sS

sN1 sN2 sNF

Vstup

1 0

0,1

0

Výstup 0

1 1

Obr´azek 3.18: Model automatu detekuj´ıc´ı konec ˇreˇci pomoc´ı tˇr´ı neˇreˇcov´ych ´usek˚u

3.3 Odes´ılatel a rozpozn´ an´ı hlasov´ eho povelu

Jak jiˇz bylo pˇredestˇreno v kapitole 2, je nutn´e detekovan´e hlasov´e ´useky odeslat na server rozpozn´avaj´ıc´ı, jak´y hlasov´y povel byl ˇreˇcen. Je moˇzn´e vybrat z nˇekolika typ˚u

´

uloh, napˇr. hlasov´e ovl´ad´an´ı, diktov´an´ı a dalˇs´ı. Pˇr´ıstup k tomuto serveru spolu s dokumentac´ı [4] byl poskytnut ´Ustavem informaˇcn´ıch technologi´ı a elektroniky.

Veˇsker´a komunikace zaˇc´ın´a pˇrihl´aˇsen´ım uˇzivatele a z´ısk´an´ım pˇr´ısluˇsn´ych au- torizaˇcn´ıch a autentizaˇcn´ıch token˚u. N´aslednˇe je vyuˇzita knihovna umoˇzˇnuj´ıc´ı ko- munikaci se serverem a z´ısk´av´an´ı odpovˇed´ı z nˇej. Ta umoˇzˇnuje vytvoˇren´ı klienta, kter´y se nastav´ı pomoc´ı n´asleduj´ıc´ıch parametr˚u:

1. Dom´ena serveru

2. Autorizaˇcn´ı token vybran´e ´ulohy

3. Form´at sn´ıman´eho zvuku, tj. datov´y typ vzork˚u, vzorkovac´ı frekvence a poˇcet kan´al˚u

(34)

4. Slovn´ık uˇzivatele

N´aslednˇe se pˇri pˇr´ıchodu ˇreˇcov´ych ´usek˚u nav´aˇze spojen´ı a urˇc´ı se, jak maj´ı b´yt z´ıskan´e v´ysledky zpracov´any. Existuje nˇekolik zp˚usob˚u, jak v´ysledky zpracov´avat a to podle typu ´ulohy. Jelikoˇz se z´ısk´avaj´ı i nepotvrzen´e hypot´ezy, je moˇzn´e jich vyuˇz´ıt k vykon´an´ı operace a pˇri pˇr´ıchodu potvrzen´e hypot´ezy bud’ vykonan´e operace opravit, pˇri rozpozn´an´ı jin´eho povelu, nebo nevykonat nic pˇri potvrzen´ı spr´avnosti p˚uvodn´ı hypot´ezy. Jelikoˇz tyto nepotvrzen´e hypot´ezy lze z´ıskat v´yraznˇe rychleji neˇz potvrzen´e, m´a to tu v´yhodu, ˇze uˇzivatel prakticky okamˇzitˇe vid´ı odezvu aplikace.

To lze vyuˇz´ıt napˇr´ıklad u hlasov´eho diktov´an´ı, pˇri kter´em tak m˚uˇze doj´ıt k opravˇe chybnˇe rozpoznan´ych slov. Druh´y pˇr´ıstup je filtrovat veˇsker´e z´ıskan´e v´ysledky a zpracovat pouze potvrzen´e hypot´ezy. Zde je rychlost odezvy o nˇeco niˇzˇs´ı neˇz v pˇredchoz´ım pˇr´ıpadˇe, ale nevyskytuje se zde komplikace s uchov´an´ım informace o pˇredchoz´ıch stavech. Pr´avˇe tento pˇr´ıstup byl zvolen pro dalˇs´ı ˇreˇsen´ı.

3.3.1 Nekorektn´ı rozpozn´ an´ı

Bˇehem testov´an´ı tohoto modulu vˇsak bylo zjiˇstˇeno nekorektn´ı rozpozn´av´an´ı po- vel˚u. Pro ´uˇcely testov´an´ı byly vytvoˇreny dalˇs´ı dva moduly, kter´e se staraj´ı o zazna- men´av´an´ı ˇcinnosti.

Prvn´ı z nich se star´a o z´aznam odeslan´ych ´usek˚u. Zaznamen´av´an´ı prob´ıh´a tak, ˇze na zaˇc´atku inicializace je modulu AudioLogger pˇred´ana vzorkovac´ı frekvence spolu s poˇzadovan´ym n´azvem. N´aslednˇe pˇri odes´ıl´an´ı ´usek˚u jsou tyto ´useky pˇred´any modulu pro uchov´an´ı v pamˇeti a teprve pˇri pˇr´ıjmu ukonˇcovac´ı zpr´avy, z´ıskan´e od serveru, jsou ´useky uloˇzeny do form´atu WAV pomoc´ı knihovny wav-encoder[9].

Druh´y modul pro zaznamen´av´an´ı, CommandLogger, se star´a o zachov´an´ı zpr´av pˇrijat´ych od serveru, coˇz jsou informace o rozpoznan´ych ruˇs´ıch a povelech.

Na zaˇc´atku inicializace je modulu pˇred´an n´azev tak, aby byl jednoznaˇcnˇe sp´arov´an audio z´aznam a k nˇemu n´aleˇzej´ıc´ı informace. Modul n´aslednˇe pˇri pˇrijmu zpr´avy uloˇz´ı z´ıskan´e obsahy zpr´av do textov´e souboru TXT.

Po zakomponov´an´ı do odesilatele AudioSender, z kapitoly 3.3, vˇsak bylo

(35)

zjiˇstˇeno, ˇze z´ıskan´e nahr´avky jako takov´e jsou odes´ıl´any korektnˇe bez pˇreruˇsen´ı mezi jednotliv´ymi ´useky nebo pˇredˇcasn´eho ukonˇcen´ı. Pˇri testov´an´ı na z´ıskan´e nahr´avce vˇsak byl povel ´uspˇeˇsnˇe rozpozn´an. D´ıky t´eto informaci mohla b´yt modulu Com- mandLogger n´aslednˇe pˇred´av´ana nav´ıc informace o tom, jak dlouhou ˇc´ast nahr´avky server rozpozn´aval. S touto informac´ı a porovn´an´ım d´elky audio nahr´avky bylo pozo- rov´ano, ˇze modul AudioSender neodes´ıl´a veˇsker´a data, viz 3.19, zejm´ena pˇri delˇs´ıch nahr´avk´ach.

0 0.5 1 1.5 2 2.5

-0.08 -0.06 -0.04 -0.02 0 0.02 0.04 0.06 0.08

Amplituda [-]

Obr´azek 3.19: Audio nahr´avka s ukonˇcen´ım pˇrenosu

Po tomto zjiˇstˇen´ı vznikla nov´a verze modulu odesilatele, kter´a nepos´ıl´a pouze detekovan´e ˇreˇcov´e ´useky, ale veˇsker´e z´ıskan´e ´useky. Nicm´enˇe v´ysledek byl velice podobn´y pˇredchoz´ımu pˇr´ıpadu. Proto byl d´ale sledov´an modul AudioSender. Pˇri pozorov´an´ı chov´an´ı modulu bylo zjiˇstˇeno, ˇze po r˚uznˇe dlouh´e dobˇe byla komunikace s rozpozn´avac´ım serverem ukonˇcena. Uveden´a pozorov´an´ı vedla k domnˇence, ˇze modul nez´ısk´av´a ´useky s dostateˇcnou rychlost´ı. Pˇri jednoduch´em testu, kdy bylo pˇrid´ano ˇcek´an´ı po vybranou dobu, byl tento pˇredpoklad potvrzen. Pˇri pˇrid´an´ı ˇcek´an´ı s dobou

(36)

100 ms jiˇz k tomuto jevu nedoch´azelo, ale nastal nov´y probl´em. Modul se v´yraznˇe zpomaloval a to v z´avislosti na d´elce odes´ılan´ych ´usek˚u. Proto byly pˇrepracov´any moduly pro sn´ım´an´ı sign´alu z mikrofonu a odes´ıl´an´ı. Do modulu AudioSender byl pˇrid´an nov´y pˇr´ıznak urˇcuj´ıc´ı, zda detektor st´ale rozpozn´av´a ˇreˇcov´e segmenty. Tento pˇr´ıznak je pˇred´an modulem pro sn´ım´an´ı. N´aslednˇe, pokud server poˇzaduje dalˇs´ı

´

useky, ale z´aroveˇn je st´ale detekov´ana ˇreˇc, je odesl´ana odpovˇed’ s pr´azdn´ym vektorem dat.

0 1 2 3 4 5 6 7

-0.1 -0.08 -0.06 -0.04 -0.02 0 0.02 0.04 0.06 0.08 0.1

Amplituda [-]

Obr´azek 3.20: Audio nahr´avka s ukonˇcen´ım pˇrenosu po

´

upravˇe modulu

Pokud by nebyl odesl´an pr´azdn´y vektor dat, server by poslal zpr´avu o ukonˇcen´ı rozpozn´av´an´ı a komunikace by byla pˇreruˇsena bˇehem odes´ıl´an´ı dalˇs´ıch dat. D´ıky t´eto modifikaci je jiˇz odes´ıl´ana kompletn´ı nahr´avka, kromˇe nˇekolika posledn´ıch klidov´ych

´

usek˚u, viz obr´azek 3.20.

(37)

3.4 Vykonavatel hlasov´ eho povelu

Po z´ısk´an´ı rozpoznan´ych hlasov´ych povel˚u je nutn´e naimplementovat modul, kter´y bude dan´e povely n´aslednˇe vykon´avat. Zde je moˇzn´e opˇet volit ze dvou zp˚usob˚u ˇreˇsen´ı. Prvn´ı z nich je pro dan´e platformy, Windows, macOS, atd., vytvoˇrit jed- noduch´y program, kter´y by se spouˇstˇel pomoc´ı funkce v JavaScriptu s patˇriˇcn´ym parametrem. Druh´y pˇr´ıstup, kter´y byl vybr´an jako vhodnˇejˇs´ı, je vyuˇzit´ı jiˇz existuj´ıc´ı knihovny a pouze jej´ı rozˇs´ıˇren´ı o dalˇs´ı funkcionalitu pro potˇreby aplikace.

3.4.1 Knihovna RobotJS

Jednou z dostupn´ych knihoven je knihovna RobotJS. Ta umoˇzˇnuje ovl´adat kur- zor myˇsi, kl´avesnici a dokonce i sn´ımat obrazovku monitoru. Z dokumentace [8]

bylo zjiˇstˇeno, ˇze pro samotn´e ovl´ad´an´ı kurzoru myˇsi jsou pak d˚uleˇzit´e funkce

”get- MousePos“,

”moveMouseSmooth“,

”mouseClick“ a

”getScreenSize“. Jak jiˇz n´azvy funkc´ı napov´ıdaj´ı, jedn´a se o funkce pro zjiˇstˇen´ı pozice, vykon´an´ı pohybu a vytvoˇren´ı ud´alosti tlaˇc´ıtka myˇsi. Pro samotn´y pohyb kurzoru myˇsi pak existuje jeˇstˇe alterna- tivn´ı funkce

”moveMouse“, kter´a vykon´av´a stejnou ˇcinnost, ale kurzor se posune do dan´eho bodu okamˇzitˇe a ne, jako v pˇr´ıpadˇe funkce

”moveMouseSmooth“, postupnˇe.

Jelikoˇz jsou tyto operace blokuj´ıc´ı, tedy po zavol´an´ı dan´e funkce se mus´ı ˇcekat na jej´ı dokonˇcen´ı, vyvst´av´a zde ot´azka, kterou z nich je vhodnˇejˇs´ı pouˇz´ıt. Pˇri vyuˇzit´ı okamˇzit´eho pˇresunu, v pˇr´ıpadˇe

”moveMouse“, nedoch´az´ı k zablokov´an´ı aplikace na tak dlouhou dobu, jako v pˇr´ıpadˇe

”moveMouseSmooth“, ale uˇzivatel nebude moci sledovat plynul´y pohyb kurzoru do pˇr´ısluˇsn´eho m´ısta. To m˚uˇze v´est ke zmaten´ı uˇzivatele a sn´ıˇzen´ı uˇzivatelsk´eho komfortu.

Co je vˇsak nutn´e podotknout, je fakt, ˇze tato knihovna podporuje pouze ovl´ad´an´ı pro hlavn´ı monitor poˇc´ıtaˇce. V pˇr´ıpadˇe, ˇze tedy bude kurzor na jin´em monitoru neˇz hlavn´ım, nen´ı moˇzn´e jej takto ovl´adat.

(38)

3.4.2 Struktura povel˚ u

Po sezn´amen´ı se s knihovnou RobotJS bylo moˇzno pˇristoupit k n´avrhu struktury povel˚u. Jelikoˇz p˚uvodn´ı verze programu MyVoice mˇela rozdˇeleny pˇr´ıkazy do skupin podle toho, co chtˇel uˇzivatel dˇelat, bylo i zde vytvoˇreno obdobn´e uspoˇr´ad´an´ı. Proto byla navrˇzena stromov´a struktura, kter´a tyto poˇzadavky nejl´epe vystihuje.

Z´akladem je abstraktn´ı tˇr´ıda AbstractController, kterou budou n´aslednˇe dalˇs´ı tˇr´ıdy reprezentuj´ıc´ı skupinu povel˚u implementovat. Abstraktn´ı tˇr´ıda obsahuje dvˇe d˚uleˇzit´e metody,

”doOperation“ a

”getPossibilities“. Funkce

”doOperation“ proch´az´ı strukturu do hloubky a teprve v posledn´ı skupinˇe testuje veˇsker´e dostupn´e povely.

Pˇri pr˚uchodu strukturou zpˇet se testuj´ı jiˇz jen n´avratov´e povely pro zpˇetn´y pohyb mezi skupinami. Funkce

”getPossibilities“ funguje velice obdobnˇe, ale nevykon´av´a ˇz´adn´y povel. Tato funkce pouze vrac´ı veˇsker´e moˇznosti aktivn´ı skupiny a n´avratov´e povely.

Byl vytvoˇren slovn´ık povel˚u dle pravidel pro pˇrepis z graf´emov´e podoby do fonetick´e dle [1]. Byly tak vytvoˇreny prvn´ı dvˇe skupiny povel˚u, z´akladn´ı skupina a skupina myˇs. Z´akladn´ı skupina je pouze koˇrenem cel´e struktury a obsahuje tedy skupinu myˇs jako moˇzn´y povel. Pro skupinu myˇs bylo vytvoˇreno prvn´ıch 17 povel˚u a to pro pohyb myˇsi o r˚uznˇe velkou vzd´alenost, kliknut´ı myˇs´ı, prav´e tlaˇc´ıtko myˇsi a dvojit´y klik.

(39)

4 Popis vytvoˇ ren´ eho uˇ zivatelsk´ eho rozhran´ı

Pro vytvoˇren´ı grafick´eho zobrazen´ı aplikace je moˇzn´e vyuˇz´ıt nˇekterou z veˇrejnˇe do- stupn´ych knihoven. Takov´ychto knihoven je dnes vˇetˇs´ı mnoˇzstv´ı a je tedy jen na program´atorovi, jakou z nich si vybere. V t´eto kapitole budou pops´any nejzn´amˇejˇs´ı z veˇrejnˇe dostupn´ych knihoven.

4.1 Angular

Jako prvn´ı moˇznost se nab´ız´ı knihovna Angular. Ta je vyv´ıjena spoleˇcnost´ı Goo- gle. Jedn´a se o knihovnu pro vytv´aˇren´ı jednostr´ankov´ych aplikac´ı implementuj´ıc´ı n´avrhov´y vzor MVC. Lze tedy vytvoˇrit ˇsablonu pomoc´ı znaˇckovac´ıho jazyka HTML a pomoc´ı speci´aln´ıho z´apisu ji dynamicky doplˇnovat.

Veˇsker´a tvorba zaˇc´ın´a vytvoˇren´ım standardn´ı HTML struktury. Co je vˇsak rozd´ıln´e, je to, ˇze jiˇz v elementu

”html“ je pouˇzit atribut

”ng-app“ identifikuj´ıc´ı apli- kaci. Obdobnˇe je tomu s elementem

”body“, kter´y pˇredstavuje kontrol´er a m´a tedy atribut

”ng-controller“. S takto pˇripraven´ym dokumentem jiˇz lze pracovat pomoc´ı knihovny Angular.

Co bylo vˇsak zjiˇstˇeno pˇri testov´an´ı, je to, ˇze pˇri pouˇzit´ı t´eto knihovny nemus´ı doj´ıt ke spr´avn´emu importu knihoven. To bylo pozorov´ano napˇr´ıklad s knihovnou keras-js slouˇz´ıc´ı k pouˇzit´ı natr´enovan´e s´ıtˇe v knihovnˇe jazyka Python Keras.

Z popsan´eho d˚uvodu byla vybr´ana jin´a knihovna, a sice Electron, pro vy- tvoˇren´ı grafick´e uˇzivatelsk´e aplikace pro zajiˇstˇen´ı bezprobl´emov´eho importu kniho- ven a rychlejˇs´ı v´yvoj.

(40)

4.2 Electron

Vhodnou alternativou je knihovna Electron. Ta byla p˚uvodnˇe urˇcena pro editor Atom, avˇsak s pˇrib´yvaj´ıc´ı popularitou se v t´eto knihovnˇe zaˇcaly vytv´aˇret i dalˇs´ı aplikace. Pomoc´ı n´ı tak vznikly napˇr. aplikace jako Skype nebo Visual Studio Code.

Prvotn´ı struktura aplikace je vˇzdy rozdˇelena do tˇr´ı soubor˚u:

1. package.json 2. main.js 3. index.html

Z´akladn´ı informace o n´azvu, verzi, apod. obsahuje soubor

”package.json“, ve kter´em jsou z´aroveˇn uchov´any potˇrebn´e z´avislosti na dalˇs´ı knihovny. O vytvoˇren´ı okna aplikace a jej´ıho spuˇstˇen´ı se pak star´a soubor

”main.js“. V tomto souboru jsou definov´ana jednotliv´a okna aplikace, jejich z´akladn´ı vzhled, ud´alosti, ale tak´e za- chycov´an´ı asynchronn´ıch zpr´av z jednotliv´ych oken aplikace. Naproti tomu soubor

”index.html“ jiˇz obsahuje informaci o prvc´ıch okna, jejich um´ıstˇen´ı, stylizaci pomoc´ı CSS apod.

4.3 Vytvoˇ ren´ı aplikace pomoc´ı knihovny Electron

Nejprve bylo nutno definovat vytvoˇren´ı poˇzadovan´eho uˇzivatelsk´eho okna aplikace.

Dle dokumentace [3], k tomu slouˇz´ı objekt BrowserWindow. Jelikoˇz nen´ı ˇz´adouc´ı, aby bylo moˇzno skr´yt okno nebo ho pˇrekr´yt jinou aplikac´ı, je nutn´e nastavit potˇrebn´e promˇenn´e, tj. AlwaysOnTop a Minimizable. Protoˇze je nutn´e zadat uˇzivatelsk´e jm´eno a heslo pro pˇr´ıstup k rozpozn´avaj´ıc´ımu serveru, byla pˇrid´ana dalˇs´ı definice pro okno obsahuj´ıc´ı nastaven´ı.

Podle toho, zda se jedn´a o v´yvoj´aˇrskou nebo z´akaznickou verzi se z´aroveˇn pˇrid´a moˇznost zobrazit dalˇs´ı dvˇe okna. Okno s nastaven´ım parametrizace, segmen- tace, apod. a rozhran´ı pro odes´ıl´an´ı soubor˚u.

(41)

Pro zachov´an´ı stejn´eho uˇzivatelsk´eho komfortu, byla vizu´aln´ı podoba navrˇzena co nejpodobnˇeji p˚uvodn´ı verzi programu MyVoice, tedy pˇrehled aktu´alnˇe dostupn´ych povel˚u, aktu´aln´ı skupina a tlaˇc´ıtka pro spuˇstˇen´ı, resp. zastaven´ı, sn´ım´an´ı mikrofonu.

D´ale byl pˇrid´an vizu´aln´ı prvek indikuj´ıc´ı aktivitu detektoru a nastaven´ı prahu pro koneˇcn´y automat s klouzav´ym pr˚umˇerem z kapitoly 3.2.

Pro prvek reprezentuj´ıc´ı nastaven´ı prahu byl pouˇzit posuvn´ık spolu s ud´alost´ı

”change“, pomoc´ı kter´e se zobraz´ı aktu´aln´ı hodnota posuvn´ıku, resp. prahu koneˇcn´eho automatu. Pro tlaˇc´ıtka byla vyuˇzita ud´alost

”click“, ve kter´e se jiˇz vyuˇzije funkce z nov´eho modulu

”renderer“. V´ysledn´a podoba aplikace je tedy n´asleduj´ıc´ı:

Obr´azek 4.1: Z´akladn´ı vzhled aplikace

Jak jiˇz bylo pˇredestˇreno, vznikl nov´y modul, kter´y vytv´aˇr´ı prov´az´an´ı mezi dosud vytvoˇren´ymi moduly. V ud´alostech tlaˇc´ıtek se n´aslednˇe pouˇzij´ı funkce

”star- tRecording“, resp.

”stopRecording“. Aby bylo sn´ım´an´ı co moˇzn´a nejobecnˇejˇs´ı, bylo nutno pˇredat funkci modulu sn´ımaj´ıc´ım mikrofon. Tato funkce budu zpracov´avat z´ıskan´e ˇcasov´e ´useky. Popsan´a funkce vznikla vyuˇzit´ım jiˇz existuj´ıc´ıch funkc´ı z knihovny pro pˇr´ıpravu sign´alu a pouze se aplikuj´ı jednotliv´e funkce na z´ıskan´a data.

(42)

Takto zpracovan´a data jsou vstupem, jak jiˇz bylo ˇreˇceno, objektu ShiftBuffer pro z´ısk´an´ı ´useku o konkr´etn´ı d´elce.

Protoˇze je tˇr´ıda ShiftBuffer implementov´ana obecnˇe, oˇcek´av´a tak´e jako sv˚uj parametr funkci, kterou se bude zpracov´avat ´usek sign´alu. Bylo tedy nutn´e vytvoˇrit dalˇs´ı funkci, ve kter´e prob´ıh´a aplikov´an´ı ok´enka, vypoˇcten´ı MelFBank pˇr´ıznak˚u a transformace.

Jelikoˇz je n´asleduj´ıc´ım krokem z´ısk´an´ı urˇcit´eho poˇctu tˇechto pˇr´ıznakov´ych vektor˚u, byla zde opˇet vyuˇzita tˇr´ıda ShiftBuffer, tentokr´at s jinou zpracov´avaj´ıc´ı funkc´ı. Tato funkce jiˇz pouˇz´ıv´a z´ıskan´a data jako vstup neuronov´e s´ıtˇe. Popsan´y v´ystup je n´aslednˇe vyhlazen koneˇcn´ym automatem s klouzav´ym pr˚umˇerem a doch´az´ı k urˇcen´ı, zda se jedn´a o ˇreˇcov´y ˇci klidov´y ´usek.

Pˇri detekci ˇreˇcov´eho ´useku dojde k vytvoˇren´ı nov´eho objektu typu AudioSen- der, kter´emu se pˇred´a ˇc´ast uchovan´ych dat pro korektn´ı rozpozn´an´ı na stranˇe serveru a kompenzace ˇcasov´e prodlevy. Z´aroveˇn, jelikoˇz doˇslo k detekci ˇreˇcov´ych ´usek˚u, do- jde k vizu´aln´ı signalizaci uˇzivateli. Tuto signalizaci lze pozorovat na n´asleduj´ıc´ım obr´azku:

Obr´azek 4.2: Signalizace detektoru ˇreˇci

(43)

Od tohoto momentu jiˇz nedoch´az´ı k uchov´av´an´ı nˇekolika m´alo posledn´ıch

´

usek˚u a jsou pˇred´av´any pˇr´ımo odesilateli a tak´e parametrizaci pro detekci ukonˇcen´ı hlasov´eho povelu. N´asleduje odesl´an´ı jiˇz z´ıskan´ych ´usek˚u na server a zachycen´ı pˇr´ıchoz´ıch zpr´av.

Pro aktualizaci moˇzn´ych povel˚u byla vytvoˇrena tˇr´ıda, MainController imple- mentuj´ıc´ı AbstractController. Pˇripraven´e funkce funguj´ı obdobnˇe, ale je zde zpra- cov´av´an v´ystup funkce

”doOperation“ urˇcuj´ıc´ı, zda byl povel vykon´an. To bylo pro- vedeno z toho d˚uvodu, aby ovl´ad´an´ı uˇzivatelsk´eho rozhran´ı nebylo souˇc´ast´ı abs- traktn´ı tˇr´ıdy a bylo tak moˇzn´e ji pouˇz´ıt i v jin´em projektu neˇz tomto. Aktualizace uˇzivatelsk´eho rozhran´ı prob´ıh´a pak tak, ˇze je zmˇenˇen text elementu zobrazuj´ıc´ı po- sledn´ı pˇr´ıkaz, byl-li vykon´an a tak´e elementu zobrazuj´ıc´ıho aktu´aln´ı skupinu. Ovˇsem s takto vytvoˇrenou funkc´ı pro aktualizaci uˇzivatelsk´eho rozhran´ı by koncov´y uˇzivatel nevidˇel, jak´e povely m˚uˇze d´ale vykon´avat. Proto funkce nav´ıc pˇri zmˇenˇe skupiny maˇze seznam povel˚u a pro kaˇzd´y moˇzn´y povel pˇrid´a nov´y element, napˇr. typu

”h5“

s dostateˇcn´ym zv´yraznˇen´ım, s textem povelu. Tˇr´ıda MainController je pak pouˇzita jako koˇren cel´e struktury. Uk´azku aktualizace grafick´eho uˇzivatelsk´eho rozhran´ı lze pak vidˇet na n´asleduj´ıc´ıch obr´azc´ıch:

Obr´azek 4.3: Z´akladn´ı okno aplikace

Obr´azek 4.4: Aktualizo- van´e okno aplikace

(44)

Dalˇs´ım oknem je uˇzivatelsk´e nastaven´ı. To obsahuje informace o dom´enˇe, pˇrihlaˇsovac´ım jm´enˇe a hesle, ale tak´e prahu, kter´y si m˚uˇze kaˇzd´y uˇzivatel nastavit podle sv´ych potˇreb. Nicm´enˇe zde vznikla nutnost perzistentn´ıho ukl´ad´an´ı nastaven´ı.

Pr´avˇe proto, ˇze toto knihovna Electron neumoˇzˇnuje, byla pouˇzita dalˇs´ı knihovna a to electron-store. Ta umoˇzˇnuje na jak´emkoliv m´ıstˇe vytvoˇrit soubor typu JSON a do nˇej ukl´adat ´udaje. Z´aroveˇn obsahuje moˇznost ˇsifrov´an´ı tohoto souboru a zamezen´ı tak ˇcten´ı a ´upravy uˇzivatelem. S touto knihovnou tedy vznikl dalˇs´ı modul a to konfiguraˇcn´ı vytvoˇren´y podle [5]. D´ıky tomu, bylo moˇzn´e nahradit pevnˇe nastaven´e hodnoty jednoduch´ym vol´an´ım pˇr´ısluˇsn´e funkce v tomto modulu.

Obr´azek 4.5: Okno uˇzivatelsk´eho nastaven´ı

S takto pˇripraven´ym modulem jiˇz lze vytvoˇrit okno uˇzivatelsk´eho nastaven´ı.

Pˇri prvotn´ım vytvoˇren´ı okna se koncov´emu uˇzivateli zobraz´ı tak, jako je na obr´azku 4.5. Zb´yv´a jen prov´az´an´ı ud´alost´ı tlaˇc´ıtek s potˇrebn´ymi funkcemi pro uloˇzen´ı dat.

(45)

V pˇr´ıpadˇe zmˇeny hodnoty prahu pro koneˇcn´y automat s klouzav´ym pr˚umˇerem je toto velmi jednoduch´e. Uloˇzen´ı se provede pouze zavol´an´ım pˇr´ısluˇsn´e funkce v kon- figuraˇcn´ım modulu. Ovˇsem v pˇr´ıpadˇe nastaven´ı dom´eny, pˇrihlaˇsovac´ıho jm´ena nebo hesla nelze takto postupovat. Pˇri zad´an´ı nespr´avn´e informace, napˇr. nespr´avn´eho uˇzivatelsk´eho jm´ena nebo hesla, by uˇzivatel nebyl nijak upozornˇen a pˇri pˇr´ıˇst´ım spuˇstˇen´ı aplikace by to vedlo k nefunkˇcnosti aplikace. Proto se pˇri ud´alosti tlaˇc´ıtka z´aroveˇn odes´ıl´a poˇzadavek o autentizaˇcn´ı a autorizaˇcn´ı tokeny. Podle odpovˇedi je pak bud’ uˇzivateli zobrazeno upozornˇen´ı na nespr´avnost jm´ena ˇci hesla a nebo se pˇri ´uspˇeˇsn´em pˇrihl´aˇsen´ı vyp´ıˇse jen informaˇcn´ı zpr´ava do v´yvoj´aˇrsk´e konzole, coˇz se vyuˇz´ıv´a napˇr. pˇri dalˇs´ım v´yvoji.

Obr´azek 4.6: Uk´azka pˇrihl´aˇsen´ı uˇzivatele

Zde se ale m˚uˇzeme setkat s dalˇs´ı komplikac´ı. Pˇri ˇz´adosti, kter´a je asynchronn´ı, a n´asledn´em zavˇren´ı okna nastaven´ı, dojde k pˇreruˇsen´ı komunikace se serverem.

Proto je nutn´e pˇredat zpr´avu o ud´alosti jin´e komponentˇe. K tomuto pˇred´an´ı zpr´avy existuje v knihovnˇe Electron tˇr´ıda ipcRenderer, kter´a asynchronnˇe pˇred´a zpr´avu

(46)

hlavn´ı ˇc´asti aplikace s identifik´atorem a pˇr´ıpadnˇe dalˇs´ımi parametry. V hlavn´ı ˇc´asti je pak pouˇzita komponenta ipcMain z knihovny pro pˇr´ıjem zpr´avy. Nicm´enˇe pˇri ˇz´adosti z hlavn´ı ˇc´asti aplikace dojde k zablokov´an´ı cel´e aplikace po dobu vykon´av´an´ı ˇz´adosti. Tedy ani toto nen´ı dostaˇcuj´ıc´ı a vyhovuj´ıc´ı ˇreˇsen´ı. Nicm´enˇe existuje jeˇstˇe dalˇs´ı komponenta, j´ıˇz lze vyuˇz´ıt a to hlavn´ı okno aplikace. Zde je postup velice obdobn´y, z hlavn´ı ˇc´asti aplikace je odesl´ana dalˇs´ı zpr´ava, tentokr´at ale s jin´ym identifik´atorem, kter´a se pˇrijme v hlavn´ım oknˇe aplikace opˇet pomoc´ı ipcRenderer.

T´ım je zajiˇstˇeno vykon´an´ı pˇrihl´aˇsen´ı po delˇs´ı dobu a je tedy m´enˇe pravdˇepodobn´e pˇreruˇsen´ı pˇrihlaˇsov´an´ı. Po ´uspˇeˇsn´em pˇrihl´aˇsen´ı jsou z´aroveˇn uloˇzeny autentizaˇcn´ı a autorizaˇcn´ı tokeny pro dalˇs´ı vyuˇzit´ı.

4.4 Distribuce aplikace

Jak bylo ˇreˇceno v kapitole 1, aplikace by mˇela b´yt funkˇcn´ı pod r˚uzn´ymi operaˇcn´ımi syst´emy. Tak jak je vytvoˇren´a aplikace pops´ana do kapitoly 4.3 by nebyla vhodn´a ke spouˇstˇen´ı na poˇc´ıtaˇci koncov´eho uˇzivatele tak, jak je zvykl´y v klasick´ych apli- kac´ı. Bylo by nutno instalovat dalˇs´ı podp˚urn´e programy. Toto bude vyeliminov´ano zabalen´ım aplikace a vytvoˇren´ım instal´atoru.

4.4.1 Zabalen´ı aplikace

Prvn´ım krokem k distribuci aplikace je zabalen´ı do spustiteln´e podoby. To prob´ıh´a pomoc´ı knihovny Electron packager. Proto byla pˇrid´ana reference na tuto knihovnu do souboru

”package.json“, jeˇz byl zm´ınˇen v kapitole 4.

Jako prvn´ı byl zvolen operaˇcn´ı syst´em Windows. Pro ten byl nejprve pˇripraven z´akladn´ı pˇr´ıkaz definuj´ıc´ı platformu, architekturu, n´azev aplikace spolu s pˇrep´ınaˇcem signalizuj´ıc´ım zabalen´ı kompletn´ıho projektu do souboru

”app.asar“. Avˇsak takto pˇripraven´y pˇr´ıkaz by v´ysledek uloˇzil do stejn´eho m´ısta, jako je cel´y projekt a bylo by tedy obt´ıˇzn´e oddˇelit, co je souˇc´ast´ı projektu a co souˇc´ast´ı zabalen´e aplikace.

Proto byla definov´ana tak´e cesta, kam bude v´ysledek uloˇzen spolu s pˇrep´ınaˇcem signalizuj´ıc´ım pˇrepis star´e verze. Aˇckoliv je toto dle dokumentace [11] spr´avn´y po-

(47)

stup, pˇri spuˇstˇen´ı aplikace byla objevena ˇrada chyb t´ykaj´ıc´ıch se ˇspatn´eho importu podp˚urn´ych knihoven. Pˇri bliˇzˇs´ım zkoum´an´ı souboru

”app.asar“ bylo zjiˇstˇeno, ˇze i pˇres kompletn´ı zabalen´ı projektu do tohoto souboru doˇslo k odstranˇen´ı veˇsker´ych knihoven potˇrebn´ych pro korektn´ı fungov´an´ı aplikace. Pˇri proch´azen´ı dokumentace bylo n´aslednˇe zjiˇstˇeno, ˇze s takto pˇripraven´ym pˇr´ıkazem doch´az´ı k vynech´an´ı ne- potˇrebn´ych knihoven z projektu pro optimalizaci velikosti aplikace. Byl tedy pˇrid´an parametr

”--no-prune“ zamezuj´ıc´ı t´eto optimalizaci. Po pouˇzit´ı uveden´eho pˇr´ıkazu je jiˇz aplikace korektnˇe zabalena pro spuˇstˇen´ı bez dalˇs´ıch podp˚urn´ych prostˇredk˚u.

Pro zabalen´ı aplikace pro dalˇs´ı platformy jiˇz je moˇzn´e pouˇz´ıt stejn´y pˇr´ıkaz, avˇsak s patˇriˇcnou ´upravou architektury a platformy.

4.4.2 Vytvoˇ ren´ı instal´ atoru

Pro instalaci multiplatformn´ı aplikace u koncov´eho uˇzivatele je vhodn´e vytvoˇrit instal´ator. Proto byly vyuˇzity dalˇs´ı knihovny, kter´e vytvoˇr´ı poˇzadovan´e instal´atory ze zabalen´ych verz´ı aplikace.

Jako prvn´ı operaˇcn´ı syst´em, pro kter´y byl vytvoˇren instal´ator, je syst´em Win- dows. Pro ´uˇcely vytvoˇren´ı instal´atoru byla pouˇzita knihovna electron-winstaller. Ta vyˇzaduje vytvoˇren´ı skriptu, ve kter´em je funkce obsahuj´ıc´ı parametry, jako jm´eno autora, v´ystupn´ı sloˇzka nebo n´azev instal´atoru. Pot´e jiˇz lze pouze spustit tento skript pomoc´ı jednoduch´eho pˇr´ıkazu. Nicm´enˇe s takto pˇripraven´ym instal´atorem nedojde napˇr. k vytvoˇren´ı z´astupce na ploˇse, naopak aplikace se spust´ı pˇri samotn´e instalaci, ale i odinstalaci, apod. Pomoc´ı dokumentace [12] bylo zjiˇstˇeno, ˇze s touto knihov- nou je nutn´e zachytit v hlavn´ı ˇc´asti aplikace i nov´e ud´alosti. Pˇri jednotliv´ych f´az´ıch doch´az´ı k pˇred´an´ı nˇekter´eho z parametr˚u aplikaci a pr´avˇe pomoc´ı tˇechto parametr˚u lze ovlivnit chov´an´ı aplikace. Tedy napˇr. vytvoˇrit z´astupce na ploˇse uˇzivatele bˇehem instalace nebo aktualizace aplikace.

Dalˇs´ım vybran´ym operaˇcn´ım syst´emem byl syst´em macOS. Pro vytvoˇren´ı instal´atoru pro tento syst´em byla vyuˇzita knihovna electron-installer-dmg. Zde je postup velice jednoduch´y, pouze byl dle dokumentace [14] sestaven pˇr´ıkaz, kter´y vytvoˇr´ı instal´ator. Pˇr´ıkaz se skl´ad´a z:

(48)

1. Um´ıstˇen´ı zabalen´e aplikace 2. N´azvu instal´atoru

3. V´ystupn´ı sloˇzky

4. Pˇr´ıznaku pro pˇrepis jiˇz existuj´ıc´ıho instal´atoru

Jako posledn´ı byl vybr´an operaˇcn´ı syst´em Debian a dalˇs´ı, kter´e z uveden´eho vych´azej´ı. Zde byla pouˇzita knihovna electron-installer-debian[13]. U tohoto operaˇcn´ıho syst´emu je postup obdobn´y jako v pˇr´ıpadˇe vytvoˇren´ı instal´atoru pro syst´em Win- dows. Nejprve byl vytvoˇren soubor typu JSON, definuj´ıc´ı vlastnosti jako je n´azev, v´ystupn´ı sloˇzka, apod. S takto pˇripraven´ym skriptem jiˇz bylo moˇzn´e pouˇz´ıt pˇr´ıkaz s parametry jako je: um´ıstˇen´ı aplikace, konfigurace.

References

Related documents

Asociace se prov´ ad´ı pˇri navazov´ an´ı spojen´ı v aplikaˇ cn´ı vrstvˇ e a pˇri asociaci si klient a server stanov´ı urˇ cit´ e komunikaˇ cn´ı parametry, kter´ e

Není u tohoto dílu větší odpor vzduchu oproti hladkému

Hodnocen´ı navrhovan´ e vedouc´ım diplomov´ e pr´ ace: velmi dobře Hodnocen´ı navrhovan´ e oponentem diplomov´ e pr´ ace: výborně minus.. Pr˚ ubˇ eh obhajoby diplomov´

Pr´ ace navazuj´ıc´ı na tuto by se mohly zab´ yvat vlivem r˚ uzn´ ych pˇredpomiˇ novaˇ c˚ u na ˇ casovou n´ aroˇ cnost ˇreˇsen´ı pˇri pouˇ zit´ı monolitick´

Zkoumanému podniku navrhujete změnu organizačního schématu společnosti na agilnější variantu v podobě společnosti orientované na projekty?. Myslíte, že tato změna bude

Hodnocen´ı navrhovan´ e vedouc´ım diplomov´ e pr´ ace: výborně Hodnocen´ı navrhovan´ e oponentem diplomov´ e pr´ ace: výborně.. Pr˚ ubˇ eh obhajoby diplomov´ e

Osobnˇ e jsem si v´ ybˇ erem t´ eto diplomov´ e pr´ ace rozˇs´ıˇril znalosti studiem nume- rick´ ych algoritm˚ u, a z´ aroveˇ n prohloubil sv´ e program´ atorsk´ e

Bezprostˇrednˇ e po v´ ybˇ eru z´ akladov´ eho frameworku bylo nutn´ e vytvoˇrit koncept cel´ e architektury nov´ ych frameworkov´ ych souˇ c´ ast´ı, kter´ e umoˇ zn´ı