}w!"#$%&'()+,-./012345<ya

Podobné dokumenty
Webové rozhraní pro interpret JVoiceXML

Semináˇr Java X J2EE Semináˇr Java X p.1/23

MATLABLINK - VZDÁLENÉ OVLÁDÁNÍ A MONITOROVÁNÍ TECHNOLOGICKÝCH PROCESŮ

TÉMATICKÝ OKRUH Softwarové inženýrství

Obsah. 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody

1 Uživatelská dokumentace

Karel Bittner HUMUSOFT s.r.o. HUMUSOFT s.r.o.

java remote method invocation Kateřina Fricková, Matouš Jandek

2015 GEOVAP, spol. s r. o. Všechna práva vyhrazena.

ZAŘÍZENÍ PRO VZDÁLENÝ SBĚR A PŘENOS DAT FIRMWARE

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

TELEFONNí LiNKA PREMiUM PRŮVODCE NASTAVENíM SLuŽBY MEET-ME KONFERENCE

Obsah. Kapitola 1. Předmluva 11 O této knize 13 Konvence...13

(Enterprise) JavaBeans. Lekce 7

Návod k obsluze IP kamery Zoneway. IP kamery jsou určené pro odbornou montáž.

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

Seznámení s prostředím dot.net Framework

INSTALACE PRODUKTU ONTOPIA KNOWLEDGE SUITE

APS Web Panel. Rozšiřující webový modul pro APS Administrator. Webové rozhraní pro vybrané funkce programového balíku APS Administrator

Nastavení provozního prostředí webového prohlížeče pro aplikaci

Úvod do Web Services

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

plussystem Příručka k instalaci systému

Software pro vzdálenou laboratoř

Úvod do aplikace SMS/MMS Manager

Formy komunikace s knihovnami

Komunikace s automaty MICROPEL. správa systému lokální a vzdálený přístup do systému vizualizace, umístění souborů vizualizace

1. Úvod do Ajaxu 11. Jak Ajax funguje? 13

PHP framework Nette. Kapitola Úvod. 1.2 Architektura Nette

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

Firmadat SMS Sender. aplikace pro odesílání SMS zpráv z Vašeho PC pomocí telefonu ZÁKLADNÍ INFORMACE A INSTALACE MILAN PASTOR, ROMAN NEPŠINSKÝ

Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.

Matematika v programovacích

1 Správce licencí Správce licencí Správce licencí Start > Všechny programy > IDEA StatiCa > Správce licencí Soubor > Správce licencí Licence

1. Webové služby. K čemu slouží? 2. RPC Web Service. 3. SOA Web Service. 4. RESTful Web services

STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST. Obor SOČ: 18. Informatika. Školní sdílení PC obrazovek. School sharing PC screens

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Hospodářská informatika

Olga Rudikova 2. ročník APIN

2015 GEOVAP, spol. s r. o. Všechna práva vyhrazena.

Common Object Request Broker Architecture

Firmadat SMS Sender. aplikace pro odesílání SMS zpráv z Vašeho PC pomocí telefonu ZÁKLADNÍ INFORMACE A INSTALACE MILAN PASTOR, ROMAN NEPŠINSKÝ

Internet Information Services (IIS) 6.0

Aplikace BSMS. Uživatelská příručka - 1 -

ELEKTRONICKÉ PODÁNÍ OBČANA

Instalace a první spuštění Programu Job Abacus Pro

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

IBM Tivoli Storage Manager 6.2 a IBM Tivoli Storage Manager FastBack 6.1.1

Dispatcher PDA Dokumentace

Webové rozhraní pro datové úložiště. Obhajoba bakalářské práce Radek Šipka, jaro 2009

Programovací software ConfigTool. Základní obsluha a postup připojení k zařízení přes USB a GPRS. Verze 2.00

Microsoft Office 2003 Souhrnný technický dokument white paper

T-Mobile Internet. Manager. pro Mac OS X NÁVOD PRO UŽIVATELE

}w!"#$%&'()+,-./012345<ya

Instalace programu ProGEO

Instalace a od-instalace aplikace Google / Android

mbank.cz mtransfer Okamžitá notifikace o mtransferu Dokumentace pro externího partnera

2015 GEOVAP, spol. s r. o. Všechna práva vyhrazena.

SEMESTRÁLNÍ PROJEKT Y38PRO

APS Administrator.OP

Programátorská příručka

Využití aplikace SketchUp pro tvorbu jednoduchého informačního systému

Motorola Phone Tools. Začínáme

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

ADMINISTRACE POČÍTAČOVÝCH SÍTÍ. OPC Server

Obsah. O autorech 9 Earle Castledine 9 Myles Eftos 9 Max Wheeler 9 Odborný korektor 10. Předmluva 11 Komu je kniha určena 12 Co se v knize dočtete 12

MATURITNÍ PRÁCE dokumentace

1 Webový server, instalace PHP a MySQL 13

INFORMAČNÍ SYSTÉMY NA WEBU

Novinky. Autodesk Vault helpdesk.graitec.cz,

Osnova. GIOP a IIOP IDL IOR POA. IDL Klient Server. 2 Historie. 3 Princip a základní pojmy. 4 Implementace. 5 Aplikace CORBA

APS mini.ed programová nadstavba pro základní vyhodnocení docházky. Příručka uživatele verze

Podpora skriptování v Audacity

Je to SMTP a POP3 server který spolupracuje s GSM branami Alphatech. Převádí SMS zprávy na y a y na SMS zprávy.

monolitická vrstvená virtuální počítač / stroj modulární struktura Klient server struktura

BRICSCAD V15. Licencování

Elektronická podpora výuky předmětu Komprese dat

MST - sběr dat pomocí mobilních terminálů on-line/off-line

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

KMI / TMA Tvorba mobilních aplikací

ČESKÉ VYSOKÉ UČENÍ TECHNIKÉ Fakulta elektrotechnická. Microsoft Sharepoint 2007 Workflows Průmyslové informační systémy

Tvorba informačních systémů

Obsah. Úvod 11 Zpětná vazba od čtenářů 13 Errata 14 Poznámka ke kódům 14

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Dokumentace k produktu IceWarp Notifikační nástroj

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

RMI - Distribuované objekty v Javě

Unified Communications. Customer Contact. Cisco Unified Contact Center Enterprise. Hlavní výhody. Způsoby nasazení

Servlety a JSP. Petr Adámek, petr.adamek@ibacz.eu

APS Web Panel. Rozšiřující webový modul pro APS Administrator

A4300BDL. Ref: JC

Kompletní manuál programu HiddenSMS Lite

Real Time programování v LabView. Ing. Martin Bušek, Ph.D.

Úvod. Klíčové vlastnosti. Jednoduchá obsluha

TELEFONNí LiNKA PREMiUM PRŮVODCE APLIKACí T UC-ONE - PC

Transkript:

MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY }w!"#$%&'()+,-./012345<ya Mobilní klient pro platformu JVoiceXML BAKALÁŘSKA PRÁCE Roman Smékal Brno, podzim 2013

Prohlášení Prohlašuji, že tato bakalářska práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Roman Smékal ii

Poděkování Děkuji vedoucímu práce Mgr. Lud ku Bártkovi, Ph.D., za námět práce a cenné rady při její realizaci. iii

Shrnutí Cílem této práce bylo navrhnout a sestrojit klientskou aplikaci pro platformu JVoiceXML, která by umožňovala uživatelům mobilních telefonů s operačním systémem Android používat tento volně dostupný interpret jazyka VoiceXML. Implementace této aplikace je součástí praktické části práce. iv

Klíčová slova JVoiceXML, dialogové systémy, VoiceXML, interpret, servlet, Android, syntéza řeči v

Obsah 1 Úvod................................... 1 2 Dialogové systémy a VoiceXML................... 3 2.1 Hlasové systémy......................... 3 2.2 VoiceXML............................. 4 2.2.1 Historie.......................... 4 2.2.2 Architektura........................ 5 2.2.3 Interprety VoiceXML................... 5 2.3 JVoiceXML............................. 6 2.3.1 Architektura........................ 7 2.3.2 Využívané technologie.................. 8 3 Platforma Android........................... 9 3.1 Dalvik Virtual Machine...................... 9 3.2 Aplikace.............................. 10 3.2.1 Životní cyklus aplikace................. 11 3.3 Vývojové nástroje......................... 14 3.3.1 Android SDK....................... 14 3.3.2 Eclipse........................... 14 4 Zadání a analýza problému...................... 15 4.1 HTTP modul............................ 15 4.2 Klientská aplikace pro OS Android............... 16 4.3 Návrh architektury........................ 16 5 Návrh řešení............................... 18 5.1 HTTP modul............................ 18 5.1.1 Webová aplikace..................... 18 5.1.2 Textový klient....................... 18 5.1.3 Návrh modulu...................... 19 5.2 Klient................................ 20 5.2.1 Hlasová syntéza..................... 21 5.2.2 Návrh klientu....................... 21 5.3 Komunikace............................ 22 6 Implementace.............................. 24 6.1 Použité technologie........................ 24 6.2 Popis HTTP modulu a jeho začlenění do JVoiceXML..... 25 6.2.1 Třída TextClient...................... 26 6.2.2 Třída HttpModule.................... 26 6.2.3 Chování modulu..................... 27 6.3 Popis klientské Aplikace pro Android............. 27 vi

6.3.1 Syntéza řeči........................ 28 6.3.2 Třída JVoiceXMLAndroidClient............ 28 6.3.3 Třída SettingsDialog................... 28 6.3.4 Třída MessageHandler.................. 29 6.3.5 Chování aplikace..................... 29 7 Závěr................................... 31 8 Přílohy.................................. 32 vii

1 Úvod Dávno před tím, než se lidé naučili zaznamenávat své myšlenky písmem, a tak je uchovávat na delší dobu, dorozumívali se mezi sebou ústně. Komunikace prostřednictvím mluvené řeči je nejpřirozenějším a zdaleka nejstarším způsobem přenosu informace mezi lidmi. Není proto divu, že při současných zvyšujících se možnostech výpočetní techniky usilují vědci a technici o to, aby se plnohodnotným partnerem člověka v mluveném dialogu mohl stát i počítač. Tento cíl je sledován zejména proto, že takový způsob komunikace může být člověku velmi prospěšný a často mu může i výrazně usnadnit život. [1] Jedním z výsledků tohoto bádání jsou dialogové systémy ovládané hlasem. Jejich hlavním přínosem pro uživatele je možnost rychle a intuitivně ovládat na dálku aplikace například pomocí svého mobilního telefonu. Používání mobilních telefonů bylo ještě nedávno zřídkavé. Tato zařízení byla původně určena pouze na hlasovou komunikaci v reálném čase mezi dvěma osobami. Postupem času se však tato zařízení zdokonalovala a rostla jejich četnost a obliba. V posledním desetiletí mobilní telefony zaznamenaly významný rozvoj, staly se prakticky součástí životního stylu, funkcionalitou se značně přiblížily počítačům a byly nazvány chytrými telefony. Tato zařízení často slouží pro komunikaci s dialogovými aplikacemi, jako jsou například objednávkové systémy. Dialogové systémy mají za úkol převzít uživatelský vstup, zpracovat ho a podle svého algoritmu na něj odpovědět. Interakce s uživatelem může být prováděna hlasovou, případně textovou formou. Mezi nástroje vyvíjené pro tyto účely patří JVoiceXML [2]. Ten obsahuje moduly pro rozeznání požadavků od uživatele, například ve formě řeči, a také moduly pro hlasovou syntézu odpovědí na ně. Je navržen k přijímání volání jednotlivých uživatelů a zpracování jimi určených dialogů. Dialogy probíhají podle připravených návrhů uložených ve formě dokumentů. Pro komunikaci uživatele s JVoiceXML je potřebná klientská aplikace, která se k programu vzdáleně připojuje. Tato práce se zaměřuje na možnosti komunikace JVoiceXML s klientskými aplikacemi. Cílem této práce je navrhnout a sestrojit klientskou aplikaci, která bude umožňovat uživatelům chytrých telefonů s operačním systémem Android používat platformu JVoiceXML. Pomocí této aplikace bude uživatel schopen vést dialog prostřednictvím textu i řeči. Pro splnění požadavků je nutné rozšířit JVoiceXML o modul, který k němu umožní přístup klientským aplikacím pomocí protokolu HTTP. Tento modul bude umožňo- 1

1. ÚVOD vat výběr požadovaných dokumentů ze zadaného umístění a jejich zpracování. Doplněním JVoiceXML o požadovanou funkcionalitu uživatelům poskytne nové způsoby využití tohoto programu. První část práce se věnuje hlasovým dialogovým systémům a JVoice- XML. Následuje popis platformy Android. Kapitola čtvrtá se věnuje zadání problému a analýze požadavků na implementaci. Následující kapitola na základě zjištěných poznatků obsahuje návrh řešení. Poslední část uvádí popis implementace, jednotlivých tříd a jejich funkcí. 2

2 Dialogové systémy a VoiceXML Dialogové systémy jsou informační systémy s dialogovým informačním rozhraním, které dovolují uživatelům komunikovat prostřednictvím textu a hlasu s počítačovými či internetovými aplikacemi, jako jsou databázové a expertní systémy či systémy automatického řízení, ovládání a monitorování. Hlavní výhodou dialogových systémů je způsob komunikace, který je přirozený uživateli. [1] 2.1 Hlasové systémy Důležitou součástí dialogových systémů jsou systémy hlasové. Ty umožňují komunikovat přirozenou řečí a využívají nástrojů pro syntézu a rozpoznání řeči jako prostředků k realizaci dialogu a získávání dat od uživatele. Tyto systémy převezmou uživatelský vstup, který podle svého vnitřního algoritmu zpracují a uživateli vytvoří odpověd. Takto formulované definici vyhovuje celá řada systémů hlasového dialogu, a to od jednoduchých systémů komunikujících pomocí malého počtu izolovaně vyslovovaných povelů až po systémy, které umožňují vést komunikaci s uživatelem souvislou přirozenou řečí. Současný stav vědní disciplíny i současné komerční aplikace hlasových dialogových systémů předpokládají, že hlasový dialog je omezen pouze na zvolenou aplikační oblast (například dialogový systém pro objednávání vstupenek do divadel, nákup po telefonu apod.) a nejde tedy o přirozenou a neomezenou konverzaci člověka s počítačem na libovolné téma. [1] I přes řadu problémů, s nimiž se systémy hlasové komunikace člověka s počítačem zatím potýkají, dochází stále častěji k jejich praktickému nasazování v průmyslové a společenské praxi. Standardní dialogové systémy jsou přitom nasazovány v těch praktických úlohách, kdy jde o hlasovou komunikaci s databázovými systémy, a to zejména, je-li osoba vzdálena od systému a může s ním komunikovat například pouze prostřednictvím telefonního spojení (vzdálený přístup k informačním a rezervačním systémům, objednávání zboží po telefonu apod.). Výhodou uvedeného způsobu komunikace je, že služba může být účastníkovi neustále k dispozici z jakéhokoli místa (má-li mobilní telefon). [1] Vývojem a popisem interaktivních dialogů ve formě hlasových aplikací, které jsou základem hlasových systémů, se zabývájí firmy pod záštitou konsorcia W3C [3]. Cílem je zavedením a zdokonalením standardů umožnit uživatelům telefonních sítí komunikaci s dialogovými aplikacemi po- 3

2.2. VOICEXML mocí řeči a telefonní klávesnice. Vývoj vedl k vytvoření konceptu hlasového prohlížeče (voice browser). Hlasový prohlížeč je softwarová aplikace, která představuje interaktivní hlasové rozhraní pro uživatele analogickým způsobem, jako webový prohlížeč představuje grafické rozhraní pro interpretaci HTML dokumentů. [4] W3C konsorcium sjednotilo všechny technologie hlasových prohlížečů, vyvíjených skupinou Voice Browser Working Group, pod projekt Voice Browser Activity [5], který obsahuje soubor specifikací W3C Speech Interface Framework [6]. Ten se skládá z několika významných standardů pro funkci hlasových prohlížečů. 2.2 VoiceXML VoiceXML 1 je klíčovým standardem Voice Browser Activity. Jedná se o značkovací jazyk, který vychází ze syntaxe XML 2 a je určen pro specifikaci interaktivních hlasových dialogů mezi člověkem a počítačem. Tento jazyk využívá rozpoznání řeči nebo DTMF signály 3 jako vstup a předehrané audio záznamy nebo syntézu řeči jako výstup. Cílem jazyka VoiceXML je umožnit komunikaci mezi člověkem a počítačem lidskou řečí a zpřístupnit webový obsah do dialogových systémů. [7] 2.2.1 Historie Vývoj jazyk VoiceXML začal již roku 1995 vytvořením projektu s názvem Phone Markup Language (PML) společností AT&T [8]. V roce 1999 již existovala řada dalších projektů, AT&T a Lucent [9] měli neslučitelné dialekty PML, Motorola měla svůj jazyk VoxML [10] a další společnosti také experimentovaly s myšlenkami na vlastní jazyk. Proto byl v té době vývoj jazyka sjednocen pod jeden projekt s názvem VoiceXML Forum, jehož úkolem bylo vytvořit jednotný standard. Výsledkem této spolupráce byla v roce 2000 první verze jazyka označeného jako VoiceXML 1.0. Nedlouho poté převzala vývoj jazyka společnost W3C, která vydala verzi 2.0., jež se stala mezinárodním standardem. Na tu navázalo pouze malými změnami aktuální rozšíření 2.1. Organizace W3C dále pokračuje ve vývoji tohoto jazyka a rozšiřuje jej o velké množství prvků, které se mají objevit v nadcházející verzi 3.0. [11] 1. Voice extensible Markup Language. 2. Extensible Markup Language. 3. DTMF - Dual-tone multi-frequency signaling. Tónová volba u telefonních zařízení. 4

2.2. VOICEXML 2.2.2 Architektura Dialogové aplikace umožňují přístup k informacím dvěma způsoby. Bud pomocí telefonu, který naváže telefonní spojení s VoiceXML serverem nebo klasickým způsobem přes HTTP 4 protokol a webovou stránku. VoiceXML server se skládá z interpretu jazyka VoiceXML (VoiceXML browser) a dokumentového serveru, který obsahuje dokumenty VoiceXML. Ten je většinou nezávislý a přistupuje se k němu pomocí HTTP požadavků. Tato architektura je znázorněna na obrázku 2.1. Obrázek 2.1: Architektura JVoiceXML aplikací [12] 2.2.3 Interprety VoiceXML Ke zpracování dokumentů VoiceXML slouží v běžných hlasových aplikacích interpret, který zprostředkovává komunikaci mezi člověkem a počítačem. Podle příkazů právě interpretovaného dokumentu vytváří syntézu hlasových výstupů a rozpoznává odpovědi uživatele. Většinou bývá připojený k veřejné telefonní síti, to umožní uživatelům komunikovat s aplikacemi pomocí telefonu. Uživatelský vstup může být odeslán ve zvukové 4. HTTP - HyperText Transfer Protocol. 5

2.3. JVOICEXML formě jako řeč nebo DTMF signál. Přijatý zvukový vstup je pak pomocí modulu pro rozpoznávání řeči zachycen a vyhodnocen. Existuje několik různých interpretů, které se liší podle licence. Komerční varianty většinou poskytují plnou podporu všech příkazů jazyka VoiceXML, ale často jsou dodávány jen jako součást většího systému. Nekomerční interprety jsou volně dostupné, ne vždy však podporují úplnou sadu příkazů z jazyka a jsou často stále ve vývoji. Jejich výhodou je ale to, že jsou otevřené pro další výzkum a rozšíření funkcionality. Libovolné nedostatky si lze vlastnoručně doprogramovat. Mezi komerční interprety patří například hlasová platforma Voxeo Prophecy IVR [13] od společnosti Voxeo Corporation nebo snadno rozšiřitelný Optim-Talk [14] poskytovaný firmou OptimSys. Mezi neplacené interprety patří PublicVoiceXML [15], který je navržen pro použití v levných telefonních systémech, využívajících jako vstup DTMF nebo externích modulů pro syntézu a rozpoznání řeči. Dalším volně dostupným a rychle se rozvíjejícím interpretem je JVoiceXML, který je napsaný v jazyce Java [16] a kterému se věnuje tato práce. 2.3 JVoiceXML JVoiceXML je open source interpret jazyka VoiceXML, který je psaný v objektově orientovaném programovacím jazyce Java, díky tomu je nezávislý na platformě. Podporuje standardy z Voice Browser Activity, zejména Voice- XML verze 2.0 a jeho rozšíření 2.1. Jeho projektovým manažerem je Dirk Schnelle-Walka. Je vyvíjen pod licencí GNU library general public licence [17], to umožňuje jeho bezplatné užití i pro komerční účely. Instalační soubory i zdrojové kódy jsou volně dostupné na serveru SourceForge.net. Interpret JvoiceXML Je navržen pro vytváření a zpracování hlasových dialogů, včetně syntézy řeči, rozpoznávání řeči nebo DTMF vstupů. Dále nabízí nástroje pro snadnou tvorbu VoiceXML dokumentů, nahrávání mluvených proslovů a konverzaci se smíšenou iniciativou. JVoiceXML je stále ve vývoji a některé XML elementy jazyka VoiceXML zatím nejsou podporovány, občas dochází i k chybám při interpretaci dokumentů, nicméně má tento interpret otevřenou architekturu a díky tomu je flexibilní a snadno rozšiřitelný. V současné době (podzim 2013) je aktuální verze interpretu 0.7.6. Součástí JvoiceXML je tvz. implementační platforma, která určuje, jakým způsobem je implementováno generování hlasového výstupu interpretu či rozpoznávání hlasového vstupu od uživatele. Jednou z těchto plat- 6

2.3. JVOICEXML forem je JSAPI [18], což je rozhraní pro rozpoznávání a syntézu řeči. Jvoice- XML poskytuje i platformu JTAPI [19] pro obsluhu příchozích telefonních hovorů nebo textovou platformu. U textové platformy komunikuje uživatel s interpretem pouze pomocí textových řetězců. Instalace JVoiceXML tyto platformy obsahuje, uživatel si při instalaci zvolí právě jednu platformu, která se bude o rozpoznávání vstupu a generování výstupu starat. Je možné použít i platformu vlastní. Hlavním cílem vývojářů JVoiceXML je vytvořit platformě nezávislý interpret jazyka VoiceXML, který bude zdarma dostupný všem uživatelům a který bude poskytovat možnost vlastního výběru použitých modulů. [20] 2.3.1 Architektura JvoiceXML běží jako samostatný server, funguje jako hlavní komponent, který obsahuje interpret, získává data z dokumentového serveru a vytváří sezení s klientskými aplikacemi. VoiceXML dokumenty jsou běžně uloženy na webovém serveru nebo v servlet kontejneru [21]. Přístup k nim je obvykle zajištěn přes protokol HTTP. JVoiceXML také podporuje jiné typy protokolů, jako je například file. Posledním důležitým komponentem architektury je klient, což je aplikace, která zajišt uje spojení s interpretem. Klientská aplikace se liší podle zvolené implementační platformy. Existují dva způsoby, kterými klient interaguje s interpretem. Bud pomocí JNDI 5 a protokolu RMI 6, klient tak získá přístup ke třídám a metodám interpretu pomocí jejich jmenných reprezentací, nebo pomocí CallManageru, který je navržen jako rozhraní pro připojení k telefonní síti. V současné době je zde pouze základní podpora telefonie. Celá architektura je zobrazena na obrázku 2.2. [20] Obrázek 2.2: Architektura JVoiceXML aplikací [20] 5. JNDI Java Naming and Directory Interface. Cílem JNDI je přinést použitelné rozhraní pro práci s různými jmennými a adresářovými službami. 6. RMI Remote Method Invocation. Mechanismus programovacího jazyka Java umožňující z jednoho virtuálního stroje volat metody objektů na jiném virtuálním stroji. 7

2.3. JVOICEXML 2.3.2 Využívané technologie JVoiceXML je svobodný software. Může být šířen a modifikován pod otevřenou licencí GNU Library General Public Licence od Free Software Foundation. Výhodou je, že využívá především volně dostupných technologií, jako jsou: Java - Je to objektově orientovaný programovací jazyk. To umožňuje dekompozici celého programu na jednotlivé části a tak je snadnější jej upravit nebo rozšiřovat podle potřeby. Části kódu JVoiceXML využívají výhod Java 7 API, proto je pro vývoj a úpravu potřebné mít nainstalovanou alespoň verzi J2SE 1.7. [16] Apache ANT - Jedná se o nástroj pro vývoj aplikací v jazyce Java určený k automatizaci činností, zejména na kompilaci a distribuci kódu. Doporučená verze je alespoň 1.7.0. Většina IDE 7 už má podporu ANT zabudovanou. [22] Log4J - Je pokročilý nástroj pro zaznamenání informací o běhu programu, je vyvíjen Apache Software Foundation [23] pod otevřenou licencí Apache License 2.0 [24] a je snadno obsluhovatelný. Pomocí něj lze do logovacích souborů zapsat dostatek informací, s různou úrovní důležitosti, potřebných pro ladění programu a zachytávání chyb. [25] Servlet kontejner - Pro spuštění JVoiceXML je potřeba dokumentového serveru, k tomu slouží například servlet kontejnery. V servlet kontejnery slouží ke spouštění aplikací, nazývaných servlety. Poskytují nástroje pro snadné zpracování příchozích požadavků a odesílání odpovědí. Nejznámějším volně dostupným kontejnerem je Apache Tomcat [26] od Apache Software Foundation. Dalšími příklady servlet kontejnerů jsou GlassFish [27], JBoss Application Server [28] nebo Jetty [29]. Všechny tyto servlet kontejnery poskytují dostatečnou funkcionalitu pro JVoiceXML, proto je na vývojáři, který z nich zvolí. V této práci byl zvolen servlet kontejner Jetty pro jeho snadnou obsluhu. [21] 7. IDE - Integrated Development Environment. Anglická zkratka pro vývojové prostředí. 8

3 Platforma Android Android je otevřená platforma od společnosti Google, která spadá pod Open Handset Alliance, je založena na Linuxovém jádře a je navržena především pro zařízení s dotykovým displejem, jako jsou chytré telefony a tablety. Platforma obsahuje kompletní softwarovou sadu včetně operačního systému, střední vrstvy (middleware), knihoven pro použití v aplikacích i samotné aplikace. Od základů byl vyvíjen jako skutečně otevřená platforma, která umožňuje vývojářům vytvářet přesvědčivé programy, využívající plně funkcionality a všech předností, které mobilní zařízení nabízejí, jako je zjištění a reagování na změnu polohy, odesílání a přijímání SMS, telefonování, využívání kamery nebo připojení k Internetu. Pro vývojáře také poskytuje zdarma nástroje pro vývoj Softwave Development Kit. Při psaní programů pro operační systém Android se využívá syntaxe programovacího jazyka Java a knihovny tříd, která připomíná podmnožinu knihovny Java SE 6 (a navíc obsahuje také rozšíření specifická pro Android). [30] 3.1 Dalvik Virtual Machine Při vývoji aplikací pro mobilní telefony je potřeba počítat s celou řadou omezení plynoucích z toho, že jsou mobilní telefony ve všech ohledech malé. Telefony mají velmi malou obrazovku a klávesnici. Parametry jako rychlost procesoru, velikost paměti nebo velikost úložného prostoru, jsou oproti stolním počítačům také velmi omezené. Proto bylo potřebné optimalizovat využití standardní Java Virtual Machine (dále jen Java VM), tak vznikla optimalizovaná verze pro mobilní platformy Dalvik Virtual Machine (dále jen Dalvik VM), autorem je Dan Bornstein. Na rozdíl od Java VM, která používá zásobníkovou architekturu, Dalvik VM používá architekturu založenou na registrech. Dále má Dalvik VM vylepšený garbage collector 1 a zredukovaný počet knihoven, aby spotřeboval méně úložného prostoru. Just In Time kompilátor 2 byl zaveden až od verze 2.2. Dalvik VM funguje tak, že nejprve vezme vygenerované soubory Java a potom je spojí do jednoho nebo více.dex 3 souborů. Zároveň tyto soubory zkomprimuje na přibližně poloviční velikost oproti.jar 4 souborům. [32] [33] 1. garbage collector automaticky určuje, která část paměti je už nepoužívaná a připravuje ji na opětovné použití 2. Just In Time kompilátor kompilátor, který překládá zdrojový kód do strojového kódu za běhu programu 3. dex Dalvik Executable 4. jar Java Archive 9

3.2. APLIKACE 3.2 Aplikace Aplikace pro Android jsou často psané v jazyce Java. Zdrojový kód je společně se všemi daty a zdroji zkompilován do souboru s příponou.apk 5. Veškerý kód v jednom.apk souboru je považován za právě jednu aplikaci a slouží k její instalaci. OS Android je více-uživatelský Linuxový systém, každá aplikace je po instalaci definována jako jeden uživatel a má přiřazeno unikátní ID. Systém pak nastaví oprávnění pro všechny soubory v aplikaci tak, že k nim má přístup pouze aplikace s daným ID. Standardně je každá aplikace spuštěna ve vlastním procesu a každý proces má svůj vlastní virtuální stroj, a tedy běží izolovaně od ostatních procesů. Android daný proces spustí, kdykoliv je aktivována daná část aplikace. Pokud pak systém potřebuje uvolnit pamět pro jiné aplikace, nebo daný proces už není nadále potřebný, tak ho systém ukončí. [34] [35] Systém Android zavádí princip minimálních oprávnění, to znamená, že každá aplikace má přístup jen a pouze k těm systémovým zdrojům, ke kterým má přidělená potřebná oprávnění. Při programování je tato práva potřebné nastavit v souboru AndroidManifest.xml a při instalaci pak musí uživatel přístup k požadovaným zdrojům potvrdit. Oprávnění jsou vyžadována například pro posílání SMS, připojení k Internetu nebo pro přístup ke kontaktům. Pokud chce aplikace přistoupit ke zdrojům, pro které nemá práva, pak ji systém přeruší. [34] Aplikace v OS Android se skládají ze 4 různých typů komponentů, každý komponent má svou specifickou roli a odlišný životní cyklus, který definuje, jak komponent vzniká a zaniká. Tyto komponenty jsou: Aktivita - anglicky Activity, je určená pro tvorbu uživatelského rozhraní, většinou reprezentuje jednu obrazovku, která plní právě jednu funkci. Dá se chápat jako analogie oken aplikace pro stolní počítač. [34] Dodavatel obsahu - anglicky Content provider. Dodavatel obsahu řídí společnou sadu aplikačních dat, uložených v zařízení, která jsou přístupná více různým aplikacím. Přes dodavatele obsahu mohou ostatní aplikace přistupovat k těmto sdíleným datům a dokonce je měnit. Například systém Android nabízí poskytovatele obsahu, který spravuje uživatelovy kontakty. Libovolná aplikace s příslušnými oprávněními pak může kontakty číst, nebo do nich i zapisovat. [36] 5. apk application package file. 10

3.2. APLIKACE Služba - anglicky Service. Dodavatelé obsahu a Aktivity jsou většinou entity s krátkou životností a lze je kdykoliv vypnout, kdežto služba je dlouhodobě běžící proces, který běží na pozadí a nemá uživatelské rozhraní. Služby se používají například k detekci RSS kanálů. [36] Záměr - anglicky Broadcast receiver. Jedná se o systémové zprávy, které jsou vyvolané různými událostmi, jako je vypnutí nebo zapnutí obrazovky, příchod SMS zprávy nebo vložení SD karty. Je možné vytvářet i záměry vlastní, a jejich prostřednictvím spouštět různé aktivity. [36] 3.2.1 Životní cyklus aplikace Zařízení Android mají omezené zdroje, proto je systému povoleno řídit dostupné zdroje tím, že ukončí běžící procesy nebo recykluje Android komponenty. Při návratu z aplikace na domovskou obrazovku se stav aplikace uloží, přestane využívat systémové zdroje, ale nevypne se, systém zachovává proces na zásobníku. Při opětovném spuštění aplikace pak není nutné načítat všechna data potřebná pro start. Pokud je ovšem operační pamět plná, tak systém může aplikaci vypnout a pamět tak uvolnit. Zásobník disponuje řídícím mechanismem typu LIFO (last in, first out - poslední dovnitř, první ven), jedná se tedy o klasickou frontu. Životním cyklem nazýváme různé stavy, kterými aplikace prochází v závislosti na jejím využití. Podle části aplikace pak rozlišujeme životní cykly aktivity, služby apod. [36] Aktivita se v průběhu svého života tedy může nacházet ve třech základních stavech - může být na popředí a mít uživatelský vstup, může být pouze viditelná (třeba jen částečně) nebo může být pozastavená na pozadí. Při přechodu aktivity mezi stavy jsou volány systémová zpětná volání (callbacky). Tyto callbacky vymezují jednotlivé stavy aktivity a definují její životní cyklus. [37] Celý životní cyklus aktivity se odehrává mezi zavoláním metod on- Create() a ondestroy(). Na začátku aplikace se zavolá metoda On- Create(), která slouží pro inicializaci aktivity, většinou se zde nastaví vzhled aktivity a připraví se všechny potřebné zdroje. Ty se uvolní s ukončením aplikace při zavolání metody ondestroy(). Viditelný cyklus se odehrává mezi voláním metod onstart() a on- Stop(). Po zavolání metody onstart() se aktivita stane viditelnou pro uživatele a ten s ní může komunikovat. Nemusí být plně viditelná - její část může být zakryta nebo může být vidět pod poloprůhledným pozadím jiné aktivity. Metoda onstrop() je zavolána, když aktivita přestává být viditelná pro uživatele. 11

3.2. APLIKACE Cyklus v popředí je mezi voláním metod onresume() a onpause(). Metoda onresume je volána, když aktivita začne dostávat uživatelský vstup. Aktivita je v tom momentu na vrcholu zásobníku a není nijak překryta jinou aktivitou. Metoda onpause() je volána těsně před ztrátou uživatelského vstupu, například když se nad aktivitou objeví nějaký dialog, nebo když je zařízení přepnuto do režimu spánku. Obrázek 3.1: Životní cyklus aktivity [38] Také služby mají svůj životní cyklus, který je podobný cyklu aktivit. Služby mohou být spuštěny bud na vykonání jedné operace, nebo mohou běžet delší dobu na pozadí a při tom například komunikovat s aktivitou. [37] 12

3.2. APLIKACE Služba typu Started je spuštěna voláním metody startservice(). Může běžet neomezeně dlouhou dobu po spuštění a to i pokud dojde ke zrušení komponenty, která službu vyvolala. Služba typu Bound je spuštěna voláním metody bindservice(). Tato služba umožňuje vytvořit klientům perzistentní spojení se službou. Když se klient připojí ke službě, zavolá se metoda onbind(). Klient se pak může odpojit metodou onunbind(). Metoda je aktivní, dokud existuje alespoň jedno persistentní spojení. Jakmile se odpojí všichni klienti, služba je ukončena metodou ondestroy(). Obrázek 3.2: Životní cyklus služby [39] 13

3.3. VÝVOJOVÉ NÁSTROJE 3.3 Vývojové nástroje Nástroje pro vývoj aplikací pro platformu Android jsou obsaženy v SDK (software development kit - balíček nástrojů pro vývoj), jako vývojové prostředí se běžně používá program Eclipse. [40] 3.3.1 Android SDK Android SDK poskytuje API knihovny a vývojářské nástroje potřebné k vytváření, testování a ladění aplikací pro Android. Je k dispozici zdarma pro platformy Windows, Linux i Mac OS. Mezi nástroje, obsažené v tomto balíku, patří emulátor, který simuluje běh operačního systému Android přímo na počítači. Dokáže simulovat zařízení různých konfigurací a velikostí, a tak umožnit a usnadnit testování aplikací i bez přítomnosti fyzických zařízení. 3.3.2 Eclipse Pro vývojové prostředí Eclipse je k dispozici plugin ADT (Android Development Tools), který upraví Eclipse na vývoj aplikací pro Android. Přidá nástroje pro grafický návrh aplikací, nástroj pro správu virtuálních mobilních zařízení a také integruje DDMS 6 přímo do vývojového prostředí. [40] 6. DDMS Dalvik Debug Monitor Server, nástroj určený na ladění a vyhledávání chyb v aplikaci. 14

4 Zadání a analýza problému Při návrhu aplikace je důležité rozložit si aplikaci na jednotlivé komponenty a pečlivě promyslet, jakým způsobem budou tyto komponenty fungovat a komunikovat spolu. Výsledek této práce má JVoiceXML rozšířit o možnost komunikace s uživatelem přes mobilního klienta na platformě Android. Klientská aplikace musí uživateli umožnit komunikaci s informačním systémem prostřednictvím mluveného dialogu i pomocí textu. Běžným způsobem komunikace mezi klientem a JVoiceXML interpretem je JNDI, díky čemuž dokáže aplikace vzdáleně volat Java třídy interpretu a jeho metody. Tento způsob komunikace pro klientské aplikace, běžící například na mobilních telefonech, není možný, proto je nutné navrhnout modul, který umožní komunikaci s klientskou aplikací jiným způsobem. Řešením je komunikace pomocí protokolu HTTP. Tak bude možné připojit se k programu z mobilních zařízení a textovou formou realizovat zadaný dialog. 4.1 HTTP modul Požadovaný modul musí být umístěný mezi klientskou aplikací a interpretem JVoiceXML na straně serveru, musí být schopný přijmout a rozlišovat různé druhy požadavků od klientské aplikace, předávat je interpretu a následně prezentovat výstupy interpretu zpět klientské aplikaci. Tento modul tedy bude spuštěn jako server na zpracování požadavků HTTP. Jednotlivá využití jsou uvedena na obrázku 4.1. HTTP modul je tedy rozšiřujícím modulem pro JVoiceXML, vytváří, udržuje a ruší sezení s interpretem. Klientské aplikaci musí poskytovat možnost načítat lokální VoiceXML dokumenty nebo načítat dokumenty přes sít zadáním adresy URL. V případě lokálních dokumentů musí modul vytvořit seznam všech dostupných dokumentů ve svém souborovém systému a umožnit uživateli jeden z nich zvolit k interpretaci. Pokud právě probíhá interpretace, modul poskytuje funkci pro přijetí textového výstupu interpretu a uživatelského vstupu. Musí také poskytovat klientovi možnost přerušit probíhající sezení. 15

4.2. KLIENTSKÁ APLIKACE PRO OS ANDROID Obrázek 4.1: Diagram užití HTTP modulu 4.2 Klientská aplikace pro OS Android Úlohou klientské aplikace ovládané uživatelem je připojit se k HTTP modulu a umožnit uživateli komunikaci s interpretem. Uživateli musí poskytovat možnost zadat sít ovou adresu HTTP modulu, ke kterému se má připojit a adresu požadovaného dokumentu, který má být interpretován. Dále musí zobrazovat uživatelovi výstupy interpretu a umožnit mu zadávat odpovědi formou textovou i hlasovou, a také umožnit přerušení interpretace. Využití mobilní aplikace je znázorněno na obrázku 4.2. 4.3 Návrh architektury HTTP modul bude s JVoiceXML interpretem komunikovat podle původní architektury, tedy pomocí JNDI. Bude umístěn mezi klientskou aplikací a interpretem. Zprávy mezi HTTP modulem a mobilní klientskou aplikací na platformě Android budou zprostředkovány pomocí protokolu HTTP. Návrh architektury je na obrázku 4.3. 16

4.3. NÁVRH ARCHITEKTURY Obrázek 4.2: Diagram užití Android aplikace Obrázek 4.3: Návrh architektury komponentů 17

5 Návrh řešení 5.1 HTTP modul Kvůli zachování platformní nezávislosti bude modul naprogramován v jazyce Java. Výsledný modul bude sloužit jako server pro komunikaci s klientskou aplikací a zároveň bude navazovat spojení s interpretem JVoice- XML. Z tohoto důvod bude modul tvořen dvěma třídami. Třída HttpModule bude zpracovávat HTTP požadavky od klientské aplikace. Třída Text- Client bude navržena jako textový klient JVoiceXML a pomocí JNDI bude vytvářet sezení a zprostředkovávat komunikaci mezi klientem a interpretem. Dále bude modul integrován do JVoiceXML tak, aby se spustil vždy se spuštěním JVoiceXML interpretu. 5.1.1 Webová aplikace Jednou z možností, jak docílit toho, aby modul podporoval zpracování HT- TP požadavků, je implementovat ho jako servlet a využít jeden z řady volně dostupných servlet kontejnerů, které jsou určeny pro webové aplikace. Existuje několik různých volně dostupných servlet kontejnerů. Tyto kontejnery jsou popsány v kapitole 2. Pro implementaci modulu je postačující kontejner obsahující pouze funkce pro zpracování HTTP požadavků a spouštění servletů. Pro účely této bakalářské práce postačí jednoduchý program Jetty, který je vydán pod otevřenou licencí Apache License 2.0. Ten nebude modul zatěžovat nadbytečnou funkcionalitou a snadno se obsluhuje. Třída HttpModule bude tedy představovat servlet. Celý modul se pak bude spouštět v kontejneru Jetty při startu JVoiceXML. 5.1.2 Textový klient Třída TextClient bude sloužit jako klient pro přístup k textové implementaci JVoiceXML. Třináct tříd z API org.jvoicexml.implementation.text nabízí prostředky pro vývojáře, kteří se chtějí zaměřit na textovou platformu. Pro účely této bakalářské práce bude využito především těchto tříd: Třída TextServer - Jedná se o rozhraní pro připojení k interpretu a výměnu zpráv textovou formou. Tato třída funguje jako socket server implementující rozhraní Runnable. Textový klienti implementující rozhraní TextListener, se k tomuto server připojují. Po spuštění si server ukládá své posluchače pomocí metody addtextlistener(textlistener). 18

5.1. HTTP MODUL Rozhraní TextListener - Rozhraní, které musí každý textový klient implementovat. Obsahuje pět metod, nejdůležitějšími z nich jsou outputssml(org.jvoicexml.xml.ssml.ssmldocument) a outputtext(string), pro obsluhu výstupů interpretu. Rozhraní Session - Rozhraní z balíku org.jvoicexml. Definuje základní funkce pro vytvoření sezení mezi JVoiceXML a klientem. Metoda call(uri 1 ) slouží pro zahájení sezení. Po zavolání této metody se načte kořenový VoiceXML dokument, jehož adresa byla uvedena v URI. Kořenový dokument je ten, který se začne zpracovávat jako první. Další metodou je hangup(textlistener), která ukončuje sezení. Rozhraní RemoteClient - Rozšiřuje třídu Serializable a jedná se o datový kontejner, který uchovává všechny informace potřebné pro připojení prostředků na straně serveru ke klientovi. Tento modul bude také poskytovat možnost načíst VoiceXML dokument z lokálního úložiště interpretu. Toto bude řešeno formou dialogu VoiceXML. Modul po přijetí požadavku na lokální dokument prohledá vyhrazený adresář, kde načte všechny soubory s příponou.vxml, vygeneruje dočasný dialog pro výběr ve formě dokumentu vxml a zahájí jeho interpretaci. Uživatel si pak zvolí jeden z nich pro další dialog. K dynamickému generování VoiceXML dialogů slouží balík org.jvoicexml.xml. Každému podporovanému příkazu z jazyka VoiceXML odpovídá jedna třída umístěná v balíku org.jvoicexml.xml.vxml. 5.1.3 Návrh modulu Navržený modul se bude skládat ze dvou tříd. Třída HttpModule bude sloužit pro komunikaci s klientem na platformě Android, bude fungovat jako servlet, rozšiřovat třídu javax.servlet.http.httpservlet, obsluhovat požadavky HTTP a bude se spouštět v kontejneru Jetty. Pro obsluhu příchozích požadavků využije metodu dopost, pro odeslání odpovědí metodu postresponse. Pomocí metody createdialogue se bude generovat dialog pro výběr dokumentu z lokálního adresáře. Druhou třídou bude TextClient. Ta bude sloužit pro komunikaci s interpretem, bude implementovat třídu TextListener a metody pro připojení k třídě TextServer. Bude fungovat jako textový klient pro JVoiceXML. Metody outputssml a outputtext budou sloužit pro přijetí výstupu od inter- 1. URI - Uniform Resource Identifier. Jedná se o textový řetězec s definovanou strukturou, který slouží k přesné specifikaci zdroje informací. 19

5.2. KLIENT pretu a metoda sendinput pro přeposlání uživatelova vstupu interpretu. Metody started a disconnected se budou starat o připojení a odpojení od interpretu a metoda execute bude zahajovat interpretaci zvoleného VoiceXML dokumentu. Diagram tříd je na obrázku 5.1. Obrázek 5.1: UML diagram HTTP modulu 5.2 Klient Pro možnost spuštění na platformě Android bude klientská aplikace naprogramována v jazyce Java. Bude poskytovat uživateli mobilního telefonu rozhraní pro vedení dialogu s JVoiceXML interpretem v textové i mluvené formě a bude komunikovat s modulem pomocí protokolu HTTP. Aplikace bude rozdělena na dvě části. První část budou tvořit třídy JVoiceXMLAndroidClient a SettingsDialog. Třída JVoiceXMLAndroidClient bude fungovat jako hlavní aktivita aplikace, bude sloužit pro vedení dialogu, přijímat uživatelovy vstupy a zobrazovat výstupy interpretu. Třída SettingsDialog se zobrazí po spuštění aplikace jako vyskakovací okno a bude sloužit pro počáteční konfiguraci, tzn. nastavení sít ové adresy HTTP modulu, adresy dokumentu a nastavení syntézy řeči. Druhou část aplikace bude tvořit třída MessageHandler. Ta bude určená ke zpracování a odesílání HTTP požadavků. Bude odesílat uživatelovy vstupy HTTP modulu a přijímat odpovědi od interpretu. 20

5.2. KLIENT 5.2.1 Hlasová syntéza Jedním z požadavků zadání této práce je, aby uživatel mohl vést dialog mluvenou formou. Komunikace s JVoiceXML je implementována pomocí textové platformy, proto musí být pro uživatele zajištěno rozpoznávání řeči a převod z psaného textu do řeči na straně klientské aplikace. Android poskytuje nástroje pro tyto účely od verze 1.6. Syntézu řeči můžeme rozdělit podle dvou základních přístupů: Syntéza v časové oblasti - Výsledná řeč je poskládaná z jednotlivých částí, které jsou dopředu namluveny (alofóny, difóny, slabiky, slova apod.). Je relativně jednoduchá na implementaci, značně však omezuje výslednou množinu výstupů a je nutné dopředu vytvořit databázi daných jednotek, která může být, v závislosti na jejím využití, velice rozsáhlá. Typickým příkladem takovéto syntézy jsou informační hlášení na nádražích vlakové dopravy. [41] Syntéza ve frekvenční oblasti - Nazývaná též jako syntéza kódováním zdroje, je založena na modelování hlasového ústrojí, je výpočetně náročnější. Při vytváření hlasu se řeší fyzikální rovnice modelující situace ve vokálním traktu. Nevýhodou tohoto přístupu je často ne příliš přesvědčivé znění hlasu. Výhodou je však celková pamět ová náročnost syntetizátoru, která je v porovnání s předchozím přístupem menší. Navíc tento způsob nijak neomezuje množinu možných hlasových výstupů. [41] Pro účely této bakalářské práce není syntéza v časové oblasti vhodná, kvůli její omezené množině výstupů. Nemůžeme dopředu znát obsah všech VoiceXML dokumentů a tak připravit potřebnou databázi jednotlivých segmentů. Proto bude jako řešení zvolena syntéza ve frekvenční oblasti, která neklade žádná omezení na množinu výstupů. 5.2.2 Návrh klientu Výsledná aplikace se tedy bude skládat ze tří tříd. Třída MessageHandler bude odesílat HTTP požadavky a přjímat odpovědi. Bude obsahovat metodu createrequest pro vytvoření jednoho požadavku a postrequest pro jeho odeslání modulu a přijmutí odpovědi. Třída JVoiceXMLAndroidClient bude reprezentovat hlavní aktivitu, která bude zpracovávat uživatelovy vstupy a zobrazovat odpovědi. Bude rozšiřovat třídu FragmentActivity a při prvním spuštění bude zobrazovat dialogové okno pro nastavení, které bude tvořeno třídou SettingsDialog. Ta bude rozšiřovat třídu DialogFragment 21

5.3. KOMUNIKACE z balíku android.support.v4.app a předávat hodnoty nastavení zpátky hlavní aktivitě. Po dokončení nastavení se zavolá ve třídě JVoiceXMLAndroidClient metoda ondialogpositiveclick, která zahájí interpretaci. Metoda onclick bude sloužit k odesílání uživatelských vstupů a metoda startvoicerecognitionactivity pro rozpoznávání řeči. Na obrázku 5.2 je uveden diagram tříd klientské aplikace. Obrázek 5.2: UML diagram klientské aplikace pro Android 5.3 Komunikace Třída TextClient v HTTP modulu je textovým klientem pro JVoiceXML, implementuje rozhraní TextListener a vytváří textový server (instance třídy TextServer). Při obdržení spouštěcího HTTP požadavku je zavolána metoda call třídy TextClient, TextServer je připojen k interpretu pomocí JNDI a vytváří s ním nové sezení. Výstupy interpretu zprostředkovává modulu svými metodami outputssml a outputtext. Metoda sendinput odesílá přijaté uživatelské vstupy interpretu. Modul si s aplikací pro Android bude vyměňovat zprávy pomocí HTTP požadavků několika různých typů metodou POST. Tyto typy jsou FILE, URI, RESPONSE, STOP a IDLE. Jejich význam bude popsán v kapitole 6. Schéma komunikace mezi klientskou aplikací a HTTP modulem je znázorněno na obrázku 5.3 a 5.4. 22

5.3. KOMUNIKACE Obrázek 5.3: Komunikace po zvolení dokumentu z URL Obrázek 5.4: Komunikace po zvolení lokálního dokumentu 23

6 Implementace 6.1 Použité technologie Modul byl navržen jako rozšíření platformy JVoiceXML verze 0.7.6.GA. JVoiceXML je interpret napsaný v Javě, ve stejném jazyce byl proto vytvořen i výsledný HTTP modul a klientská aplikace. Jako vývojové prostředí pro HTTP modul bylo použito IDE NetBeans 7.4 [42], pro logování nestandardního chování při běhu programu byl použit nástroj Log4J. Pro zkompilování projektu a vytvoření.war 1 souboru byl použit nástroj ANT, který je již integrován v prostředí NetBeans. Modul je spouštěn v servlet kontejneru Jetty, který se bude spouštět při startu JVoiceXML. Dokumentace obou částí součástí kódu je psaná anglicky. Využité třídy z knihovny JVoiceXML jsou popsány v předchozí kapitole. Klientská aplikace pro Android byla vyvíjena v prostředí Eclipse rozšířeném o ADT. Minimální požadovaná verze operačního systému pro běh aplikace je 2.2, testována byla na mobilním telefonu Sony Ericsson Xperia Ray [43] s operačním systémem verze 2.3.4 a je distribuována jako klasická aplikace pro Android ve formě instalačního soboru.apk. Pro funkci převodu textu do řeči na platformě Android bylo potřebné zvolit jeden z TTS 2 modulů. Většina distribucí OS Android obsahuje jako výchozí modul pro syntézu řeči Pico TTS od SVOX [44]. Dalšími často využívanými moduly jsou Acapela TTS [45], Classic Text To Speech Engine [44] od SVOX, nebo espeak [46]. Do těchto modulů si lze zakoupit, případně zdarma stáhnout, různé hlasové moduly. Každý hlas má uzpůsobenou výslovnost pro přidělený jazyk. Požadavkem bylo, aby klientská aplikace dokázala vést dialog v češtině. Proto bylo potřebné zvolit modul, pro který je k dispozici český hlas. Z výše uvedených to splňují Classic Text To Speech Engine, Acapela a espeak. SVOX pro české uživatele nabízí hlas Iveta a Acapella TTS nabízí český hlas s názvem Eliška. Oba moduly jsou zdarma a uvedené hlasy zní velice přirozeně, nicméně tyto české hlasy je nutné si dokoupit, z tohoto důvodu byl pro účely této bakalářské práce zvolen modul espeak. Ten podporuje více, než 40 různých jazyků a nabízí zdarma alternativu uživatelům, kteří si nechtějí nebo nemohou zakoupit Ivetu či Elišku. Pro testování výsledné aplikace byl využit modul espeak verze 1.46.02_r8. 1..war - Web application ARchive 2. TTS - Text-to-Speech. Převod z textu do řeči. 24

6.2. POPIS HTTP MODULU A JEHO ZAČLENĚNÍ DO JVOICEXML Android je otevřená platforma, takže aplikace mohou potenciálně využít jakoukoliv službu v zařízení na rozpoznávání řeči, která dokáže pracovat s třídou android.speech.recognizerintent. Rozpoznávání řeči bude využívat API od společnosti Google, a bude fungovat obdobně, jako aplikace Voice Search [47]. Po stisknutí tlačítka se zobrazí dialog, který vyzve uživatele k namluvení požadovaného vstupu, ten pak bude odeslán na servery společnosti Google, kde bude vyhodnocen a zpátky bude odeslán rozpoznaný text. 6.2 Popis HTTP modulu a jeho začlenění do JVoiceXML Navržený modul obsahuje dvě třídy. První je třída TextClient, ta funguje jako naslouchač třídy TextServer z textové implementace JVoiceXML, posílá zprávy interpretu a odpovědi na ně předává druhé třídě. Tou je HttpModule, který rozšiřuje třídu javax.servlet.http.httpservlet a slouží pro zpracování HTTP požadavků odeslaných metodou POST. Celý modul se spouští v kontejneru Jetty jako Java servlet. K integraci modulu do JVoiceXML lze využít spouštěcího dávkového souboru startup.bat, který se nachází ve složce bin v domovském adresáři JVoiceXML. Do tohoto souboru je potřebné přidat několik příkazů tak, aby se kontejner Jetty spouštěl zároveň s JVoiceXML serverem. Pro dopsání potřebných příkazů stačí textový editor. Po otevření souboru startup.bat je nutné pod řádek obsahující text :run přidat kód: cd %JETTY_HOME% Kde %JETTY_HOME% značí adresu složky, obsahující Jetty kontejner. Pod něj musí být vložen příkaz ve tvaru: start /B Java -Djava.security.manager -Djava.security.policy=%JETTY_HOME%\jvoicexml.policy -Djava.rmi.server.codebase=file:%JETTY_HOME%\lib\ jvxml-client-text.jar -DSTOP.PORT=44444 -DSTOP.KEY=secret -jar start.jar Příkaz se nachází na jediném řádku a spouští kontejner Jetty se zadanými parametry. Při ukončení interpretu je nutné ukončit také spuštěný kontejner modifikací dávkového souboru %JETTY_HOME%\bin\shutdown.bat. Na jeho konec je potřeba přidat tyto příkazy, zajišt ující ukončení činnosti kontejneru: 25

6.2. POPIS HTTP MODULU A JEHO ZAČLENĚNÍ DO JVOICEXML cd %JETTY_HOME% java -DSTOP.PORT=44444 -DSTOP.KEY=secret -jar start.jar -stop V domovském adresáři kontejneru Jetty je potřebné vytvořit složku documents, která bude obsahovat lokální VoiceXML dokumenty, jejichž seznam se načte, pokud uživatel zašle požadavek typu FILE. Kontejner Jetty bude běžet jako samostatný server na portu 8080. Číslo portu lze v případě potřeby změnit úpravou souboru etc/jetty.xml (umístěného v domovském adresáři programu). Zkompilovaný war archiv HTTP modulu musí být nasazen do složky %JETTY_HOME%\webapps, aby se spouštěl vždy s kontejnerem. 6.2.1 Třída TextClient Tato třída vytváří, udržuje a přerušuje sezení s interpretem. Instance třídy TextClient je vytvořena vždy při startu modulu, rozšiřuje třídu Thread a implementuje rozhraní TextListener. Při navazování nového sezení si třída vytvoří nový objekt typu TextServer, ten komunikuje s interpretem a funguje jako prostředník pro předávání zpráv. Metoda execute zahajuje interpretaci. V atributu session typu Session je po navázání spojení uchováváno sezení s interpretem. Atribut connected typu boolean signalizuje, zdali je modul připojen k interpretu, či nikoliv. Do textového řetězce response zapisuje TextServer výstupy interpretu, které jsou přijímány metodami outputtext a outputssml. Metoda sendinput předává uživatelův vstup interpretu. V atributu uri typu URI je uložena adresa kořenového dokumentu pro interpretaci. Atribut modulereference typu HttpModule slouží jako reference třídy HttpModule, která vytvořila tuto instanci textového klienta. 6.2.2 Třída HttpModule Tato třída funguje jako komunikační uzel mezi interpretem a klientem. Rozšiřuje třídu javax.servlet.http.httpservlet a běží jako servlet, který je spuštěn při startu Jetty. Atribut textclient typu TextClient obsahuje instanci textového klienta, který komunikuje s JVoiceXML. Atribut writingready typu boolean značí, zdali se má odeslat odpověd klientské aplikaci, její hodnota je nastavována metodou setwritingready. Metoda createdialogue vytváří seznam dostupných lokálních dokumentů. Požadavky od klientské aplikace jsou zpracovány metodou dopost, která vyhodnotí typ požadavku. Metoda postresponse odesílá odpovědi interpretu zpět klientovi. 26

6.2.3 Chování modulu 6.3. POPIS KLIENTSKÉ APLIKACE PRO ANDROID Modul přijímá od klientské aplikace požadavky metodou POST. Rozeznává několik typů požadavků podle parametru Type: Zpráva typu FILE - Signalizuje požadavek, na vygenerování dialogu pro výběr jednoho z dokumentů uložených v souborovém systému interpretu. Po přijetí tohoto požadavku modul vygeneruje seznam dostupných dokumentů, které uloží v dočasném dokumentu Voice- XML. Ten předá interpretu ke zpracování. Uživatel si jeden z nabízených dokumentů zvolí a modul zahájí jeho interpretaci. Zpráva typu URI - Znamená zahájení interpretace VoiceXML dokumentu ze zadané adresy, která je předána jako obsah požadavku. Modul zahájí sezení s JVoiceXML a interpretaci metodou execute třídy TextClient. JVoiceXML předá svůj první výstup zpět modulu a ten jej odešle jako odpověd na požadavek. Zpráva typu RESPONSE - Značí, že se jedná o klientovu odpověd interpretu. Modul přečte obsah doručené zprávy a předá ho interpretu. Interpret vrátí modulu odpověd, kterou modul přepošle zpět klientské aplikaci. Zpráva typu STOP - Je určen k zastavení interpretace. Po jeho přijetí modul ukončuje sezení s interpretem. Zpráva typu IDLE - Je k získání nakupených zpráv v interpretu. Modul získá nahromaděné zprávy v interpretu, pokud nějaké obsahuje, odešle je klientské aplikaci. 6.3 Popis klientské Aplikace pro Android Klientská aplikace pro OS Android uživateli poskytuje grafické rozhraní pro komunikaci a vedení dialogu s interpretem. Je spustitelná v zařízeních s minimální verzí Androidu 2.2. K modulu se připojuje pomocí HTTP protokolu a požadavky zasílá a přijímá metodou POST. Obsahuje tři třídy. Třída SettingsDialog slouží pro počáteční konfiguraci připojení, třída JVoice- XMLAndroidClient poskytuje grafické rozhraní pro obsluhu a vedení dialogu. Třída MessageHandler obsluhuje HTTP komunikaci, zasílá požadavky modulu a přijímá na ně odpovědi. 27

6.3.1 Syntéza řeči 6.3. POPIS KLIENTSKÉ APLIKACE PRO ANDROID Aby mohla aplikace převádět uživateli textové výstupy z interpretu do řeči v češtině, je nutné stáhnout a nainstalovat do zařízení modul espeak TTS, ten je k dispozici zdarma v obchodu Google Play [48]. Po jeho úspěšné instalaci je nutné tento modul nastavit pro zařízení jako výchozí v nastavení telefonu zaškrtnutím položky espeak v menu Nastavení -> Hlasový vstup a výstup -> Nastavení převodu textu na řeč -> Výchozí modul a v menu Nastavení -> Hlasový vstup a výstup -> Nastavení převodu textu na řeč -> Jazyk zvolit češtinu. Od tohoto momentu bude v zařízení výchozím jazykem pro syntézu řeči čeština. 6.3.2 Třída JVoiceXMLAndroidClient Tato třída představuje hlavní aktivitu a uživatelské rozhraní pro vedení dialogu s interpretem, pomocí uživatelských vstupů řídí běh celé klientské aplikace. Aby bylo možné iniciovat z této aktivity počáteční dialogové okno pro nastavení, rozšiřuje třídu FragmentActivity. Pro získání zadaných informací zpět z počátečního nastavení, implementuje rozhraní SettingsDialog.NoticeDialogListener a pro umožnění převodu textových výstupů do řeči, implementuje rozhraní TextToSpeech.OnInitListener. Atribut tts typu TextToSpeech z balíku android.speech.tts slouží pro syntézu řeči, její metoda speak přečtě uživateli zadaný textový vstup. Zavoláním metody tts.setlanguage(locale.getdefault()) je pro syntézu řeči nastaven výchozí jazyk zařízení, což je v našem případě, po nastavení modulu espeak, čeština. Pro rozpoznání uživatelova hlasového vstupu je využita třída android.speech.recognizerintent. Protože se jedná o uživatelské rozhraní, tato třída obsahuje jako atributy několik grafických prvků, definovaných v souboru activity_jvoicexmlandroidclient.xml (tlačítka, textová pole, formuláře). Obsahuje také metody pro jejich obsluhu. Další součástí jsou metody pro řízení samotné aplikace, jako jsou oncreate pro spuštění aplikace a ondestroy pro ukončení. Důležitým atributem je moduleaddress, který uchovává internetovou adresu HTTP modulu. 6.3.3 Třída SettingsDialog Tato třída slouží, jako dialogové okno pro nastavení aplikace, které se zobrazí po spuštění. Rozšiřuje třídu DialogFragment a obsahuje několik grafických prvků definovaných v souboru dialog_settings.xml. Načtení těchto prvků a vytvoření dialogového okna zajišt uje metoda oncreatedialog. Za- 28

6.3. POPIS KLIENTSKÉ APLIKACE PRO ANDROID voláním metody builder.setpositivebutton je nastaven posluchač stisknutí tlačítka Zahájit dialog, ve kterém je nadefinováno předání všech informací zpět hlavní aktivitě. 6.3.4 Třída MessageHandler MessageHandler obsluhuje komunikaci s HTTP modulem. Zpracovává HT- TP požadavky zasílané metodou POST. Metoda createrequest připraví potřebná data požadavku a nastaví jeho obsah. Metoda postrequest odešle nastavený požadavek HTTP modulu, přijme na něj odpověd a tu předá třídě JVoiceXMLAndroidClient. Metoda run zajišt uje provedení předešlých metod. Atribut client obsahuje referenci na instanci třídy JVoiceXMLAndroidClient, která tento objekt vytvořila. Atribut Parametr responsecontent v sobě udržuje textový obsah budoucího požadavku a interpreteraddress sít ovou adresu HTTP modulu. Atribut currentmode udává, o jaký typ požadavku se jedná. 6.3.5 Chování aplikace Po spuštění aplikace se uživateli zobrazí dialog pro nastavení několika parametrů. První formulář je určen pro zadání sít ové adresy modulu. Jako nápověda je zde již vyplněna adresa HTTP modulu, běžícího na virtuálním testovacím serveru. Dalším prvkem jsou dvě tlačítka pro nastavení způsobu výběru VoiceXML dokumentu. FILE slouží pro výběr lokálního dokumentu, zvolí-li uživatel položku URL, pak se zaktivuje další formulář, který slouží k vyplnění sít ové adresy dokumentu umístěného na Internetu. Jako nápověda je zde již vyplněna adresa testovacího VoiceXML dokumentu. Předposlední položkou dialogového okna je zaškrtávací tlačítko, které slouží k vypnutí, či zapnutí hlasové syntézy. Poslední položkou je pak tlačítko Zahájit dialog, které po stisknutí předává všechny vyplněné informace hlavní aktivitě a zavírá nastavovací dialog. Po dokončení a zavření dialogového okna se uživateli zobrazí hlavní aktivita, která si vytvoří instanci třídy MessageHandler a pomocí ní odešle modulu požadavek typu URI, nebo FILE, v závislosti na způsobu výběru dokumentu. Aplikace přijme odpověd a začíná interpretace zvoleného dokumentu. V textovém poli Status se zobrazují informace o spojení s modulem. V poli Výstup interpretu se zobrazují všechny textové výstupy, které interpret zaslal. Další položkou je formulář pro zadávání uživatelova vstupu, ten se zaktivuje vždy, když je po uživateli vyžadována odpověd. Stejným 29

6.3. POPIS KLIENTSKÉ APLIKACE PRO ANDROID způsobem se aktivují a deaktivují dvě tlačítka, která se nacházejí pod tímto formulářem. První tlačítko Odeslat slouží k odeslání uživatelova vstupu k interpretu. Druhé tlačítko slouží pro rozpoznání a získání uživatelova hlasového vstupu. Po jeho stisknutí se zobrazí nahrávací okno s pokynem k vyslovení odpovědi. Nahraný zvukový vstup se odešle na servery společnosti Google, kde se vyhodnotí. Rozpoznaná promluva se pak zapíše do formuláře pro uživatelovu odpověd a je uživatelovi pro kontrolu přečtena. Pokud byla promluva rozpoznána špatně, pak může uživatel rozpoznaný vstup upravit bud to přímo jako text, nebo vstup nahrát znovu. Po stisknutí Odeslat se nastaví potřebné parametry instanci třídy Message- Handler, která odpověd odešle modulu protokolem HTTP pomocí metody POST a přijme na ni odpověd. Takto probíhá dialog, dokud interpretace dokumentu neskončí, nebo dokud není přerušen uživatelem. K ukončení aplikace a případnému přerušení interpretace slouží tlačítko Stop. Někdy interpret odesílá výstup, i pokud nepřijal od uživatele předchozí vstup. Například, pokud od uživatele delší dobu neobdrží odpověd. Klientská aplikace, jakožto HTTP klient, není schopen takto nakupené zprávy z modulu přijmout. Proto aplikace pravidelně, jednou za krátký čas a nezávisle na ostatních vstupech, odešle modulu prázdný požadavek typu IDLE, čímž si vyžádá nedoručené výstupy interpretu, které zobrazí uživateli. Obrázek 6.1: Dialogové okno pro nastavení Obrázek 6.2: Klientská aplikace pro OS Android 30