Sem vložte zadání Vaší práce.
České vysoké učení technické v Praze Fakulta informačních technologií Katedra Softwarového inženýrství
Bakalářská práce
Informační kiosk Android Dan Kaser
Vedoucí práce: Ing. Josef Gattermayer
19. června 2014
Poděkování Tímto bych chtěl poděkovat svému vedoucímu Ing. Josefu Gattermayerovi za průběžné konzultace a připomínky. Dále bych chtěl poděkovat své rodině a své přítelkyni za trpělivost a podporu během studia i mimo něj.
Prohlášení Prohlašuji, že jsem předloženou práci vypracoval(a) samostatně a že jsem uvedl(a) veškeré použité informační zdroje v souladu s Metodickým pokynem o etické přípravě vysokoškolských závěrečných prací. Beru na vědomí, že se na moji práci vztahují práva a povinnosti vyplývající ze zákona č. 121/2000 Sb., autorského zákona, ve znění pozdějších předpisů, zejména skutečnost, že České vysoké učení technické v Praze má právo na uzavření licenční smlouvy o užití této práce jako školního díla podle § 60 odst. 1 autorského zákona.
V Praze dne 19. června 2014
.....................
České vysoké učení technické v Praze Fakulta informačních technologií c 2014 Dan Kaser. Všechna práva vyhrazena.
Tato práce vznikla jako školní dílo na Českém vysokém učení technickém v Praze, Fakultě informačních technologií. Práce je chráněna právními předpisy a mezinárodními úmluvami o právu autorském a právech souvisejících s právem autorským. K jejímu užití, s výjimkou bezúplatných zákonných licencí, je nezbytný souhlas autora.
Odkaz na tuto práci Kaser, Dan. Informační kiosk Android. Bakalářská práce. Praha: České vysoké učení technické v Praze, Fakulta informačních technologií, 2014.
Abstrakt Cílem této bakalářské práce je návrh a implementace aplikace Informační kiosek pro operační systém Android. Práce je rozdělena do několika částí. První část se zabývá operačním systémem Android a stručně popisuje vývoj aplikací. Další část přiblíží přínos informačního kiosku a poslední části detailněji rozebírají návrh, implementaci a testování výsledné aplikace. Klíčová slova Android, Java, Informační kiosek, WebSocket, tablet, cílená reklama
Abstract The aim of this thesis is the design and implementation of information kiosk applications for the Android operating system. The work is divided into several parts. The first part deals with the Android operating system and briefly describes the development of applications. Another part is about benefits of an information kiosk and the last section explores in greater detail the design, implementation and testing of the final application. Keywords Android, Java, Information kiosk, WebSocket, tablet, targeted advertising
ix
Obsah Úvod 1 Cíle 1.1 1.2 1.3
1 práce Vymezení tématu . . . . . . . . . . . . . . . . . . . . . . . . Důvod výběru tématu . . . . . . . . . . . . . . . . . . . . . Cíle práce . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Platforma Android 2.1 Historie . . . . . . . . . . . 2.2 Historie verzí . . . . . . . . 2.3 Architektura . . . . . . . . . 2.4 Vývoj aplikací pro Android .
. . . .
. . . .
. . . .
3 Informační kiosek 3.1 Cílená reklama . . . . . . . . . . 3.2 Cílení reklamy v reálném světě . . 3.3 Řešení informačních kiosků . . . . 3.4 Informační kiosky v Google Play . 4 Analýza a návrh 4.1 Možnosti řešení . . . . . . . . 4.2 Zvolené řešení . . . . . . . . . 4.3 Doménový model . . . . . . . 4.4 Databázový model . . . . . . 4.5 Návrh uživatelského rozhraní .
. . . . .
5 Realizace 5.1 Knihovny . . . . . . . . . . . . 5.2 Načitání konfigurace . . . . . . 5.3 Streamování obrazu z kamery . 5.4 Server na rozpoznávání obličejů xi
. . . . .
. . . .
. . . .
. . . .
. . . . .
. . . .
. . . .
. . . .
. . . . .
. . . .
. . . .
. . . .
. . . . .
. . . .
. . . .
. . . .
. . . . .
. . . .
. . . .
. . . .
. . . . .
. . . .
. . . .
. . . .
. . . . .
. . . .
. . . .
. . . .
. . . . .
. . . .
. . . .
. . . .
. . . . .
. . . .
. . . .
. . . .
. . . . .
. . . .
. . . .
. . . .
. . . . .
. . . .
. . . .
. . . .
. . . . .
. . . .
. . . .
. . . .
. . . . .
. . . .
. . . .
. . . .
. . . . .
. . . .
. . . .
. . . .
. . . . .
. . . .
3 3 3 3
. . . .
5 5 5 7 9
. . . .
13 13 14 15 15
. . . . .
17 17 17 18 19 19
. . . .
23 23 23 24 25
5.5 5.6 5.7
Plánování spotů . . . . . . . . . . . . . . . . . . . . . . . . . Práce mimo hlavní vlákno . . . . . . . . . . . . . . . . . . . Přehrávání obsahu spotů . . . . . . . . . . . . . . . . . . . .
26 28 28
6 Testování 31 6.1 Testování stahování spotů . . . . . . . . . . . . . . . . . . . 31 6.2 Testování vybírání spotů . . . . . . . . . . . . . . . . . . . . 31 Závěr
33
Literatura
35
A Seznam použitých zkratek
41
B Instalační manuál
43
C Obsah přiloženého CD
45
xii
Seznam obrázků 2.1 2.2 2.3
Zastoupení verzí k 1.5.2014[13] . . . . . . . . . . . . . . . . . . Vrstvy[14] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Životní cyklus Activity[20] . . . . . . . . . . . . . . . . . . . . .
7 8 11
3.1
Příklad informačního kiosku[22] . . . . . . . . . . . . . . . . . .
14
4.1 4.2 4.3 4.4
Doménový model . . . . . . . . . . . Návrh GUI StreamingFragment . . . Návrh GUI SpotListFragment . . . . Návrh GUI FaceRecognitionFragment
. . . .
18 20 21 21
5.1
Navigační lišta . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
6.1
Testování kiosku . . . . . . . . . . . . . . . . . . . . . . . . . .
32
xiii
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Úvod Každý den se s cílenou reklamou setkáváme na internetu, avšak ve skutečném světě je obtížné reklamu zaměřit na specifickou skupinu. Tato práce si klade za cíl zhotovit aplikaci pro operační systém Android, která bude umožňovat zobrazení různých informací v závislosti na biometrických údajích pozorovatele. K rozpoznání biometrických údajů (věk a pohlaví) bude použita integrovaná kamera zařízení. V první části této práce se čtenář seznámí s platformou Android a s vývojem aplikací pro tuto platformu. Pochopení platformy je důležité pro pochopení struktury výsledné aplikace. Další část je věnována existujícím řešením informačních kiosků, kde jsou zmíněny nejen jiné aplikace, ale i zcela jiné systémy pro cílení reklamy v reálném světě. Poslední části práce budou věnovány návrhu, implementaci a testování výsledné aplikace. Aplikace bude navržena tak, aby potenciální zákazník při pohledu na displej zařízení viděl pouze obsah a neviděl přitom žádné ovládací prvky.
1
Kapitola
Cíle práce 1.1
Vymezení tématu
Mnou implementovaný kiosek bude schopen zobrazovat obsah v závislosti na pozorovateli. K rozpoznání pozorovatelů bude využita integrovaná kamera. Aplikace bude posílat obraz z kamery na server a ten pak vyhodnotí věk a pohlaví osoby. V zařízení se pak podle těchto údajů vybere nejvhodnější reklamní spot. Tyto reklamní spoty se budou průběžně aktualizovat a stahovat ze serveru. Server rozpoznávající obličeje a server poskytující obsah spotů přes REST API nejsou součástí mé bakalářské práce a implementuje jej jiný kolega.
1.2
Důvod výběru tématu
Toto téma jsem si vybral pro svůj zájem o vývoj mobilních aplikací. Tento typ aplikace mi přišel velmi praktický a těšila mě představa, že se bude moje aplikace používat v praxi.
1.3
Cíle práce
Cílem práce je návrh, implementace a testování funkční aplikace Informační kiosek pro operační systém Android. Tato aplikace bude primárně určena pro tablety a bude zobrazovat videa, statické obrázky a HTML5 aplikace. Aplikace bude nabízet obraz z kamery přes protokol HTTP MJPEG, bude komunikovat se serverem pro rozpoznávaní obličejů přes protokol WebSocket a bude automaticky aktualizovat obsah reklamních spotů přes REST 3
1
1. Cíle práce API. Dalším předpokladem je, že aplikace bude po spuštění a jednoduché konfiguraci schopná samostatného běhu.
4
Kapitola
2
Platforma Android Pro pochopení této práce je nutné se nejprve seznámit s operačním systémem Android. Android je v současnosti nejrozšířenější mobilní platforma, která pohání více než miliardu telefonů a tabletů. Tato platforma obsahuje operační systém, middleware a základní aplikace. Operační systém je postavený na linuxovém jádře a i díky tomu je Android open source.
2.1
Historie
Společnost Android Inc. byla založena v roce 2003 a poté v roce 2005 odkoupena společností Google. Po odkoupení společnosti byl tým pro vývoj Android nadále veden Andy Rubinem.[1] 5. listopadu 2007 byla vytvořena Open Handset Alliance. Cílem této aliance je vyvíjet otevřený standard pro mobilní zařízení a členy tohoto konsorcia byly například Google, HTC, Intel, LG, Motorola, NVIDIA, Qualcomm, Samsung a mnoho dalších. Ve stejný den vzniku Open Handset Alliance byl ohlášen i produkt Android postavený na jádře Linux verze 2.6.[2] O rok později v říjnu byl představen první komerční telefon poháněný Androidem a spolu s ním i SDK 1.0. Od té doby je Android neustále na vzestupu a jeho vývoj pokračuje. V současnosti dominuje mezi mobilními telefony a tablety a to s podílem více než 79 %.[3]
2.2
Historie verzí
Verze Androidu jsou pojmenovány vždy po nějakém zákusku, kromě prvních dvou verzí 1.0 a 1.1, které se někdy označují jako Alpha a Beta. 5
2. Platforma Android Android 1.5 (Cupcake) Přidána podpora virtuálních klávesnic třetích stran a také podpora App widgetů – část aplikace, která je viditelná na domácí obrazovce.[4] Android 1.6 (Donut) Rychlejší aplikace fotoaparátu, nový indikátor stavu baterie a vylepšené vyhledávání.[5] Android 2.0/2.1 (Eclair) Vylepšení správy kontaktů a emailů a fotoaparát od této verze standardně podporuje blesk.[6] Android 2.2 (Froyo) Verze 2.2 představila možnost proměnit android zařízení v přenosný WI-FI hotspot, tedy bezdrátové sdílení internetového připojení. Klávesnice od této verze podporuje více jazyků pro zadávání.[7] Android 2.3 (Gingerbread) Vylepšení uživatelského rozhraní pro větší rychlost a přehlednost a také přidána podpora NFC (Near Field Communication).[8] Android 3.0 (Honeycomb) Tato verze přináší zcela nové grafické rozhraní navržené speciálně pro tablety. Toto uživatelské rozhraní dalo Androidu směr a v jeho duchu se nese dodnes.[9] Android 4.0 (Ice Cream Sandwich) Nové grafické rozhraní, které vychází z verze 3.0 a přináší spoustu malých změn, které řeší časté stížnosti uživatelů (možnost změny App widgetů na domácí obrazovce nebo například možnost pořízení snímku obrazovky).[10] Android 4.1/4.2/4.3 (Jelly Bean) Verze 4.1 přinesla výrazné zlepšení animací. Díky Project Butter je vykreslování rychlejší a plynulejší. Další vylepšení se dostalo notifikační liště a fotoaparátu.[11] Android 4.4 (KitKat) Tato nejnovější verze Androidu přinesla optimalizaci výkonu. Google tvrdí, že KitKat poběží zcela plynule i na zařízeních nižší třídy s RAM o velikosti 512MB.[12] 6
2.3. Architektura
Obrázek 2.1: Zastoupení verzí k 1.5.2014[13]
Fragmentace K datu 1.5.2014 má největší zastoupení verze Jelly Bean, tedy verze 4.1 až 4.3, zatímco verze Gringerbread a starší zastupují sotva pětinu trhu.[13] Tato fragmentace představuje problém pro vývojáře aplikací, protože některé knihovny nejsou u starších verzí podporovány a vývojář se tedy musí rozhodnout buď upustit od daného řešení a nebo aplikaci vyvíjet pouze pro novější verze. Většina vývojářů proto podporuje obvykle pouze zařízení od Androidu 4.0 výše. Řešení tohoto problému visí především na výrobcích, kteří by měli u svých produktů dbát na aktualizace. Avšak optimalizace nové verze Androidu pro zařízení je pro výrobce obvykle nákladná a zákazníkovi nezbývá než koupit zcela nový telefon či tablet. Zastoupení jednotlivých verzí je zobrazeno na koláčovém grafu na obrázku 2.1.
2.3
Architektura
Architektura operačního systému Android se dělí do 5 menších a 4 větších vrstev.[14] Jednotlivé vrstvy od sebe nemusí být vždy přímo oddělené. Vrstvy jsou znázorněny na obrázku 2.3. 7
2. Platforma Android
Obrázek 2.2: Vrstvy[14]
2.3.1
Jádro operačního systému
Nejnižší vrstvou je jádro operačního systému, které tvoří upravený Linux. První verze Androidu byly postaveny na Linuxovém jádře verze 2.6.25, ale nejnovější verze běží i na 3.4.10.[15] Jádro systému Android nepodporuje kompletní sadu GNU knihoven.
2.3.2
Knihovny
Nativní knihovny Androidu jsou napsány v jazycích C a C++ a zajišťují základní funkce systému. Například Open GL a SGL jsou knihovny pro práci s 3D a 2D grafikou a knihovna SQLite poskytuje databázi pro ukládání dat. Další zajímavou knihovnou je WebKit, což je opensource jádro pro webový prohlížeč.
2.3.3
Android Runtime
Aplikace pro Android se píší především v programovacím jazyku Java, a proto tato vrstva obsahuje aplikační virtuální stroj Dalvik (Dalvik Vir8
2.4. Vývoj aplikací pro Android tual Machine = DVM). Hlavním důvodem, proč nebyl použit Java Virtual Machine, jsou především licenční práva. Dalším důvodem je potom optimalizace virtuálního stroje pro mobilní zařízení. Ve verzi Android 4.4 KitKat je možno přepnout na experimentální prostředí Android Runtime (ART). ART by měl přinést vetší plynulost systému, nižší nároky na hardware a lepší výdrž na baterii.[16]
2.3.4
Application framework
Tato vrstva obsahuje další knihovny napsané v Javě. Tyto knihovny jsou významné především pro vývojáře mobilních aplikací, protože poskytují přístup k velkému množství služeb. Nejdůležitější je zejména balík obsahující grafické prvky (tlačítka, textová pole), ale nalezneme zde i službu určování polohy nebo správu notifikací.
2.3.5
Aplikace
Poslední vrstva je nejzajímavější pro běžné uživatele, neboť obsahuje samotné aplikace. Aplikace jsou spustitelné programy podobné těm, které známe z běžných stolních počítačů. Hlavně díky velkému množství aplikací se staly chytré telefony tak populární. V Google Play (nejrozšířenější obchod s aplikacemi pro Android) je nyní více než milión aplikací.[17] Současným trendem je přesouvání aplikací z desktopů na mobilní platformy a můžeme proto očekávat ještě větší počet aplikací.
2.4
Vývoj aplikací pro Android
Pro Android je typický programovací jazyk Java, ale díky NDK lze psát aplikace i v jazycích C či C++.[18] Vyvíjet aplikace v NDK je vhodné spíše pro specifické aplikace (například některé hry) a není příliš běžné. V této práci se budu věnovat především Android SDK.
2.4.1
Vývojové prostředí (IDE)
Nejčastějšími IDE pro vývoj jsou Eclipse s ADT (Android Developer Tools) pluginem a potom Android Studio založené na IntelliJ IDEA. Android Studio je sice stále pouze „early access preview“ (nebyla představena oficiální verze), ale přesto mnoho vývojářů odchází od Eclipse.[19] 9
2. Platforma Android
2.4.2
Komponenty
Dokumentace všech balíků a tříd používaných v Androidu je rozsáhlá a proto se v této části budu věnovat především těm komponentám, které považuji za stěžejní a které budou použity při implementaci. View Tato třída je základním stavebním kamenem grafického uživatelského rozhraní. Představuje určitou obdélníkovou část na displayi a zodpovídá za vykreslování obsahu v tomto obdélníku a také odchytává interakce s touto oblastí (například kliknutí). Activity Třída Activity je důležitou součástí aplikace a představuje jakousi obrazovku, se kterou může uživatel interagovat. Tato komponenta je určena souborem .java, který určuje chování této komponenty, a dále souborem ve formátu XML, který představuje vzhled a rozložení prvků (View) na obrazovce. I přesto, že bychom se bez souboru XML obešli (rozložení tlačítek a podobně lze definovat přímo v Java kódu), nepřispívá to přehlednosti a často dokonce přidává na pracnosti. Activity má životní cyklus, během kterého vystřídá několik stavů.[20] Fragment Tato komponenta byla představena ve verzi Honeycomb (API 11) a je možné ji popsat jak podčást Activity. Slouží k rozdělení Activity do menších samostatných celků. Podobně jako Activity i Fragment má životní cyklus. AsyncTask Třída, která obaluje třídu Thread. V Androidu nemůžete v hlavním vlákně (tzv. UI vlákno) provádět operace, které trvají déle než pár milisekund, jinak systém aplikaci zabije a uživatel se setká s chybou „Aplikace přestala pracovat“.[21] AsyncTask proto umožňuje provádět operace na pozadí (mimo hlavní vlákno) a přitom průběžně zobrazovat výsledky. AsyncTask má 3 podstatné metody: onPreExecute() - Tělo této metody se vykonává v hlavním vlákně a volá se před spuštěním vlákna doInBackground() - Tato metoda je spuštěna ve vedlejším vlákně a proto z ní není možné přímo měnit nějaká View. Může ale zavolat metodu onPublishResult(Progress...), která se spouští na hlavním vlákně. 10
2.4. Vývoj aplikací pro Android
Obrázek 2.3: Životní cyklus Activity[20]
onPostExecute() - Opět běží na hlavním vlákně a slouží pro oznámení uživatele o dokončení práce Service Service je další často používaná komponenta. Tato komponenta slouží k vykonávání operací, které trvají déle než pár sekund, a také k operacím, u kterých se nepředpokládá, že je aplikace v popředí (uživatel s ní může reagovat). Dobrým příkladem je hudební přehrávač. Uživatel zapne aplikaci hudební přehrávač, stiskne přehrávání své oblíbené písně a poté z aplikace odejde a vybere internetový prohlížeč. Přestože uživatel na svém telefonu právě čte zprávy na internetu, stále ve svých sluchátkách slyší hudbu.
11
Kapitola
Informační kiosek Klasický kiosek představuje stánek s novinami, časopisy a tabákem. Informační kiosek byla dříve budka s informátorem uvnitř, avšak nyní má obvykle podobu počítačového terminálu s dotykovou obrazovkou. Tyto kiosky často poskytují informace o dopravních spojích či turistických zajímavostech, ale používají se i pro zobrazování reklam. Příklad kiosku s dotykovou obrazovkou je na obrázku 3.1. Pro reklamní účely se na obrazovce kiosku zobrazuje webová stránka, video nebo obrázek produktu, který má upoutat naši pozornost. Avšak pokud je nabízených produktů mnoho, je možné, že momentálního pozorovatele kiosku nebude aktuálně zobrazovaný výrobek zajímat. V takovém případě jsme promarnili šanci zaujmout potenciálního zákazníka. Bylo by tedy vhodné nějakým způsobem vybrat optimální reklamní spot, který si získá zákazníkovu pozornost, a ten poté přehrát. Přestože se s takto cílenou reklamou běžně setkáváme každý den na internetu, u běžného informačního kiosku je složité určit, kdo před zařízením stojí. Zde se nabízí využít tabletů s operačním systémem Android a jejich kamery na rozpoznávání biometrických údajů pozorovatele. Tablety s Androidem mají ke všemu oproti běžným informačním kioskům nízkou pořizovací cenu (postačí zařízení s cenou pod 2000Kč). Díky velké škále dostupných velikostí (na trhu jsou dostupné i na televize s operačním systémem Android[23]) je snadné vybrat vyhovující rozměr obrazovky pro specifické účely.
3.1
Cílená reklama
Cílená reklama je typ inzerce či propagace, kdy jsou reklamy umístěné tak, aby efektivně oslovily cílovou skupinu potenciálních zákazníků. Běžně se zákazníci rozlišují podle demografických či behaviorálních proměnných. Be13
3
3. Informační kiosek
Obrázek 3.1: Příklad informačního kiosku[22]
haviorální cílení se využívá především na internetu, kdy se vyhodnocují záznamy o předchozí aktivitě (například využití tzv. cookies). S cílením reklamy podle demografických údajů je to na internetu složitější, protože tyto údaje je těžké získat. Zajímá nás především věk a pohlaví uživatele, avšak jedinou možností, jak tyto parametry získat, je tyto údaje odvodit a nebo sehnat od majitelů webových portálů. V případě reklamy AdWords od Googlu využívá Google i údaje, které mají uživatelé na svých profilech.[24] Televizní reklama nabízí taktéž prostor pro cílení. Cílení reklamy je zde možné díky predikaci preferencí diváka. V praxi to znamená, že pokud jsou v sobotu ráno na programu pohádky, bude jistě velmi efektivní mezi jednotlivé pořady vměstnat reklamu na novou hračku. Dítě bude z této nové hračky nadšené a po skončení epizody svého oblíbeného pořadu půjde vzbudit rodiče, aby mu hračku koupili.
3.2
Cílení reklamy v reálném světě
Na internetu je cílená reklama běžnou praxí, avšak v reálném světě (například na autobusové zastávce) se s přímým cílením také setkáváme. Většinou má tato inzerce formu jakýchsi dealerů, kteří nás zastaví a dají se do řeči 14
3.3. Řešení informačních kiosků o výhodách nabízených produktů. Často se tímto způsobem lákají zákazníci mobilních operátorů. Vypadá to tak, že dealer nabízí tarif pro studenty a vyhlíží tedy osoby, kterým by odhadl věk mezi 15 a 26 lety. Poté se těchto osob vyptává na jejich současný tarif a snaží se je přesvědčit, že tento nový tarif bude výhodnější ve všech směrech. V případě, že tento dealer úspěšně uzavře smlouvu, dostane provizi. Tato forma je poněkud agresivní a může z principu odrazovat potenciální zákazníky. Je tedy vhodné zvolit méně násilnou cestu. Inovativní cestu zvolila firma Amscreen. Tato firma nabízí různá řešení pro inzerci, ať už se jedná o billboardy či velkoplošné obrazovky. Zajímavým produktem je OptimEyes.[25] Toto řešení v reálném čase detekuje obličeje a určuje počet a typy osob, které právě pozorují inzerci. Systém tedy poskytne inzerentovi informaci kdy, kde a kým (věk a pohlaví osob) byla reklama zhlédnuta. Inzerent pak může na základě těchto údajů požadovat, aby se reklama přehrávala pouze té skupině publika, která se oni nejvíce zajímala. OptimEyes již hojně využívá obchodní řetězec Tesco, který tento systém instaloval na více než 450 čerpacích stanic ve Velké Británii a počítá s rozšířením do co nejvíce supermarketů.[26] Přesto, že takovýto systém vyvolává obavy o soukromí, Simon Sugar (Amscreen CEO) tvrdí, že žádné informace se nikdy neukládají a biometrické údaje slouží pouze k zařazení obličeje, aby bylo možné vybrat nejvhodnější reklamu. Dalším faktem, který by měl zákazníky uklidnit, je nepřesnost těchto rozpoznávacích systémů. Například osoba s čepicí může tato zařízení snadno zmást. Lidé si na tyto systémy pravděpodobně zvyknou podobně, jako si zvykli na bezpečnostní kamery a klubové karty.
3.3
Řešení informačních kiosků
Na trhu je dnes spoustu firem, které prodávají a pronajímají informační kiosky, ale pořizovací cena těchto zařízení je obvykle vysoká. Například cena kiosku Budget od firmy Czech Multimedia Interactive začíná na 51.400 Kč.[27] Navíc tento kiosek neumožňuje odhad věku a pohlaví osob stojících před panelem.
3.4
Informační kiosky v Google Play
Android je rozšířená platforma a není proto divu, že v obchodě s aplikacemi najdeme několik řešení informačního kiosku. Některé aplikace jsou zcela 15
3. Informační kiosek zdarma, avšak disponují omezeným množstvím funkcí. Většina těchto aplikací dokáže zobrazit pouze předem nastavené webové stránky. Kiosk Browser Tato aplikace je zdarma a slouží pouze jako uzamčený prohlížeč. Poskytuje základní kioskové funkce jako jsou neustále rozsvícený displej, zakázaná navigační tlačítka a automatické obnovení stránky.[28] Video Kiosk Tento informační kiosek je nutné zaplatit. Jednoduše přehrává ve smyčce videa z nastavené složky. Jediným způsobem, jak dynamicky měnit seznam přehrávaných videí, je použít aplikace třetích stran (například DropBox), které budou automaticky synchronizovat obsah dané složky.[29] SureVideo Kiosk Video Looper Další kiosek, který přehrává ve smyčce nastavená videa. Aplikace je s omezenými funkcemi zdarma.[30] CityGro Kiosk Tato aplikace je od firmy, která poskytuje široké spektrum informačních kiosků. Aplikace může zobrazovat obrázky, videa, webové stránky, ale třeba i formuláře pro sběr dat. Pro demo účely je aplikace zdarma, avšak pro vytvoření vlastního obsahu pro kiosek je třeba zaplatit.[31]
V obchodě Google Play se bohužel nepodařilo nalézt informační kiosek, který by přizpůsoboval obsah pozorovateli. Řešení, kterým se zabývá tato práce, přinese nové možnosti inzerce pro operační systém Android.
16
Kapitola
Analýza a návrh 4.1
Možnosti řešení
Vstupem této práce byl kromě zadání také fungující skript v jazyce PHP od Martina Humeníka, který je určený pro zařízení Raspberry PI. Původním záměrem bylo tento skript poupravit a spustit na Androidu. Toto řešení však přináší spoustu nevýhod a problémů, které se původně jevily jako nevýznamné oproti náročnosti přepisu celého kódu. Prvním kamenem úrazu byla nutnost na zařízení provést tzv. root kvůli přístupu do kořenového adresáře systému a spouštění bashových skriptů. Rootnutí zařízení není pro začátečníka jednoduché. Navíc většina výrobců považuje tento zásah za radikální a přicházíte tak o záruku. Další nevýhodou tohoto řešení je absence grafického uživatelského rozhraní. Rozhodujícím však byla práce s kamerou, kdy nebylo možné získat přístup ke kameře zařízení a posílat obraz na server. Bez kamery by tato aplikace plně nevyužívala možností zařízení a nemělo by význam tuto aplikaci implementovat pro Android.
4.2
Zvolené řešení
Od pouhého přenesení skriptu bylo upuštěno a kiosek bude od základu napsán v jazyce Java tak, aby se zachovala funkce skriptu běžícím Raspberry PI a zároveň přinesla jednoduchou instalaci a konfiguraci. Jelikož bude aplikace určena převážně pro tablety (na trhu se nevyskytují tablety s Androidem starší než Ice Cream Sandwich), bude aplikace podporovat pouze API 14 a výše (verze Ice Cream Sandwich a novější). 17
4
4. Analýza a návrh
Face
Planner +mode
1
0..n
+sex +age
1 0..n Spot
Filter
+id +name +length +type +file_id +fixed_planner_priority +loop_planner_priority
1
+id
0..n 1 0..n FilterParams +priority +sex +age_from +age_to
Obrázek 4.1: Doménový model
4.3
Doménový model
V kiosku jsou zajímavé především entity, které hrají roli při výběru vhodného spotu pro danou osobu. Vztahy mezi jednotlivými entitami jsou vyobrazené na obrazku 4.1.
4.3.1
Spot
Tato entita představuje informaci (webová stránka, video, obrázek nebo HTML5 aplikace), která bude zobrazena na displayi v kioskovém režimu. Spot má určenou dobu (length), po kterou se bude zobrazovat. Dále má přiřazený soubor s obsahem a priority pro plánovač.
4.3.2
Filter
Tato entita přiřadí spot k osobě odpovídající některému z parametrů. 18
4.4. Databázový model
4.3.3
FilterParams
Tato entita bude použita pro vybírání ideálního spotu podle biometrických údajů pozorovatele kiosku (reprezentuje cílovou skupinu). Entita je určena věkem (minimální věk a maximální věk), pohlavím (1=muž, -1=žena a 0 je neurčité pohlaví) a prioritou.
4.3.4
Face
Entita Face reprezentuje biometrické údaje pozorovatele. Je určena věkem a pohlavím (1=muž, -1=žena a 0 je neurčité pohlaví).
4.3.5
Planner
Nejdůležitější entita, která vybírá nejvhodnější spot, který se bude přehrávat. Způsob, jakým se budou vybírat spoty k přehrání, je určen režimem (módem).
4.4
Databázový model
Databázový model vychází z doménového modelu. Databázový model reprezentuje jednotlivé tabulky. Oproti doménovému modelu se v databázi nevyskytuje tabulka pro Face, protože je není třeba ukládat do zařízeni.
4.5
Návrh uživatelského rozhraní
Při rozmisťování ovládacích prvků na obrazovce mobilních zařízení musíme především počítat s různými rozměry obrazovky. Dalším rozdílem oproti desktopovým programům je ovládání. Kapacitní dotykové displaye se ovládají prstem a doteky nemusí být vždy tak přesné, jako kliknutí myší. Všechna tlačítka a textová pole musejí být dostatečně velká a dostatečně daleko od sebe, aby nedocházelo k překliknutí. Z těchto důvodů není vhodné veškeré ovládací prvky vměstnat na jednu obrazovku, ale je lepší a přehlednější rozdělit je do více obrazovek. Aplikace budu postavená ze 3 velkých obrazovek (Activity). MainActivity – Obrazovka se zobrazí spuštěním aplikace. Tato obrazovka bude mít 3 menší části (Fragment), mezi kterými se bude přepínat pomocí tabů. 19
4. Analýza a návrh StreamingFragment – Zobrazuje informace o aktuálním stavu streamování kamery. Bude zde možné vypnout/zapnout stream a bude se zde zobrazovat náhled kamery, aby bylo možné kiosek nasměrovat. Pokud bude streamování zapnuto, bude zde i zobrazena adresa, na které je dostupný stream kamery. Návrh GUI pro tento Fragment je znázorněn na obrázku 4.2. SpotListFragment – Zde budou zobrazeny veškeré dostupné spoty, které jsou dostupné v zařízení. Po kliknutí na vybraný spot se zobrazí/přehraje obsah. Návrh GUI pro tento Fragment je znázorněn na obrázku 4.3. FaceRecognitionFragment – Fragment pro zobrazení informací týkajících se serveru na rozpoznávání obličejů. Bude zde především stav připojení a seznam obličejů, které jsou právě před kamerou. Návrh GUI pro tento Fragment je znázorněn na obrázku 4.4. SettingsActivity – V této Activity bude především konfigurace IP adres a sofistikovanější nastavení chování kiosku. KioskActivity – Tuto obrazovku budou sledovat potenciální zákazníci. Zde se bude zobrazovat obsah spotů v režimu celé obrazovky (nebude vidět navigační lišta).
Obrázek 4.2: Návrh GUI StreamingFragment
20
4.5. Návrh uživatelského rozhraní
Obrázek 4.3: Návrh GUI SpotListFragment
Obrázek 4.4: Návrh GUI FaceRecognitionFragment
21
Kapitola
Realizace 5.1
Knihovny
Výhodou vývoje pro Android je určitě jazyk Java SE. Pro tento jazyk totiž existuje celá řada knihoven, které ušetří mnoho řádek kódu a především mnoho hodin práce. Java-WebSocket Pro komunikaci se serverem na rozpoznávání obličejů se používá protokolu WebSocket. Server používá knihovnu libwebsockets psanou v jazyku C a kvůli vzájemné kompatibilitě se jevilo jako dobrý nápad stejnou knihovnu zkompilovat i pro Android. Existuje ale jednoduší řešení a tím je knihovna JavaWebSocket.[32] Tato knihovna od Nathana Rajlicha pracuje se stejnou verzí WebSockets jako server a nemusíme se tedy bát kompatibility. Díky této knihovně ušetříme kód, který by musel volat nativní metody knihovny libwebsockets. Gson Tato knihovna od Google nabízí snadnou deserializaci a serializaci objektů v jazyce Java. Vstupem je textový řetězec ve formátu JSON a výstupem instance objektu a naopak.[33]
5.2
Načitání konfigurace
Jedním ze stanovených požadavků je samostatnost aplikace po spuštění a konfiguraci. To znamená, že pokud dojde ke změnám na serveru, který poskytuje seznam spotů, měla by aplikace na tyto změny zareagovat. Dojde23
5
5. Realizace li na serveru ke smazání souboru, měl by být tento soubor odstraněn i z úložiště zařízení, aby se zbytečně neplýtvalo pamětí. Obdobně by se měla aplikace zachovat, pokud bude přidán nový spot nebo pokud dojde ke změně konfigurace plánovače - změní se režim plánování příspěvků. Proto je v zařízení možno nastavit časový interval, po kterém se obnoví konfigurace. Tato perioda je defaultně nastavena na 60 sekund. Změna režimu plánovače není příliš problematická, vetší problém představuje seznam spotů a jejich obsah. REST API nám bohužel neposkytuje přímou informaci o tom, které spoty byly změněny. Musíme proto projít všechny spoty dostupné na serveru a srovnat je se seznamem spotů dostupných v zařízení. V databázi zařízení si nejprve u všech spotů nastavíme příznak „ke smazání“. Dále v cyklu projdeme seznam spotů na serveru a pokud narazíme na nějaký spot, který se již v zařízení vyskytuje, odstraníme příznak „ke smazání“. V případě, že se spot v databázi nevyskytuje, provedeme insert (vložíme do databáze) a stáhneme příslušný soubor, který reprezentuje tento spot. Spoty s příznakem, které jsou po skončení cyklu v databázi, již byly ze serveru odstraněny a můžeme je ze zařízení smazat. Musíme však kontrolovat, zda se nechystáme smazat soubor, který se právě přehrává. Obdobně aktualizujeme i seznam filtrů.
5.3
Streamování obrazu z kamery
Aby mohla aplikace rychle reagovat na osoby před tabletem, je třeba zvolit formát videa s co nejmenší latency (zpožděním). Tomuto požadavku vyhovuje formát MJPEG (Motion JPEG). U tohoto formátu je každý snímek je zvlášť komprimován podle standardu JPEG. Jelikož tento formát používají IP kamery a webkamery, je podporován i internetovými prohlížeči. Tato skutečnost aplikaci přidává na užitečnosti, neboť nám stačí znát IP adresu, na které je dostupná kamera tabletu, a z tabletu je rázem IP kamera, která může přidat na zabezpečení objektu, ve kterém je Informační kiosek instalován.
5.3.1
MJPEG přes HTTP protokol
Streamování obrazu z kamery v Androidu dobře rozebírá článek o tvorbě projektu Peepers od FoxDog Studios.[34] Implementace je poměrně snadná díky zpětným voláním, kterými disponuje třída android.hardware.Camera. Pro získání instance třídy je nutné zavolat statickou metodu Camera.open(cameraId), kde cameraId je identifikátor kamery, která má být použita. Této instanci určíme prostor pro zobrazování náhledu kamery metodou came24
5.4. Server na rozpoznávání obličejů ra.setPreviewDisplay(SurfaceHolder surfaceHolder). Nyní je třeba zařídit, aby se jednotlivé snímky kamery komprimovaly a posílaly přes HTTP protokol. K tomu konečně využijeme zpětná volání android.hardware.Camera.PreviewCallback a metodu onPreviewFrame(byte[] data, Camera camera), která se volá při zobrazení snímku. V této metodě z pole bytů vytvoříme komprimovaný JPEG obrázek a následně ho pošleme přes síť. Pro přenášení MJPEG přes protokol HTTP je třeba nastavit hlavičku (nastaví se "Content-Type: multipart/x-mixed-replace;") tak, aby klient očekával jako odpověď několik částí (snímků), které budou oddělené nějakým stanoveným řetězcem (boundary). Jednotlivé snímky pak posíláme s hlavičkou, která značí mime-type obrázek (nastaví se "Content-type: image/jpeg").
5.4
Server na rozpoznávání obličejů
Server na rozpoznávání obličejů představuje v této práci tzv. black box a není tedy znám způsob, kterým se detekce obličejů provádí. Komunikace se serverem pro určování biometrických údajů osob by měla být v reálném čase, aby se při vybírání spotů k přehrání nebraly v potaz osoby, které se již před zařízením nevyskytují.
5.4.1
WebSocket protokol
WebSocket je protokol poskytující obousměrnou komunikaci přes jediné TCP spojení. Původně je navržen pro internetové prohlížeče a webové servery, ale lze jej použít pro komunikaci mezi jakýmkoliv klientem a serverem. Tento protokol založený na TCP je nezávislý a jediná spojitost s HTTP protokolem je, že pro navázání spojení (handshake) používá HTTP servery. WebSocket nabízí velkou redukci zbytečných síťových přenosů a je tedy vhodný pro komunikaci v reálném čase.[35]
5.4.2
Klient WebSocket
V kiosku se ke komunikaci přes WebSocket protokol používá třída WebSocketClient. Z této abstraktní třídy vytvoříme klienta, který po připojení pošle na Face Recognition Server adresu, na které je dostupný stream kamery. Zprávy, které tento klient přijímá od serveru, jsou opět ve formátu JSON a představují informace o osobách před zařízením. Po přijetí zprávy, že je před tabletem nějaká osoba, předá plánovači tyto biometrické údaje spolu s časovým údajem, kdy byla tato zpráva přijata. 25
5. Realizace
Listing 5.1: Příklad zjednodušeného kódu pro streamování kamery ... ServerSocket serverSocket = new ServerSocket(mPort); Socket socket = serverSocket.accept();; final DataOutputStream stream = null; stream = new DataOutputStream(socket.getOutputStream()); stream.writeBytes(HTTP_HEADER); stream.flush(); Camera camera = Camera.open(0); camera.setPreviewTexture(new SurfaceTexture()) camera.setPreviewCallback(new Camera.PreviewCallback() { public void onPreviewFrame(byte[] data, Camera camera) { // vytvorit JPEG YuvImage image = new YuvImage(data, format, width, height, null); image.compressToJpeg(crop, quality, outputStream); stream.writeBytes("Content-type: image/jpeg\r\n" + "Content-Length: " + outputStream.size() + "\r\n" + "X-Timestamp:" + timestamp + "\r\n" + "\r\n"); stream.write(outputStream.toByteArray(), 0, outputStream.size()); stream.writeBytes(BOUNDARY_LINES); stream.flush(); } }); camera.startPreview(); ...
5.5
Plánování spotů
Plánovač příspěvků je nejdůležitější částí aplikace, protože má na starosti výběr spotů. Plánovač pracuje ve 4 režimech. Loop - v tomto režimu se přehrává obsah podle určeného pořadí. Fixed - při nastavení tohoto režimu se u spotů poupraví jejich priorita, aby se nepřehrával vždy pouze ten samý spot. Priorita se upraví tak, 26
5.5. Plánování spotů že k současné prioritě se přičte náhodné číslo od -5 do 5 (polovina maximální priority). Poté spoty seřadí sestupně podle aktuálních priorit a vybere se první v pořadí. Screensaver - tento režim již využívá biometrických údajů pozorovatele. Pokud je v hledáčku kamery nějaká osoba, vybere se spot, který nejvíce vyhovuje jejímu věku a pohlaví (Priority režim). Pokud před tabletem nikdo nestojí, přehraje se spot označen jako spořič obrazovky. Může však nastat situace, kdy byl tento režim zvolen, ale nebyl nastaven spořič obrazovky. V takovém případě aplikace zvolí spot jako v Loop režimu. Priority - tento režim opět využívá údajů o osobách před tabletem. Pokud tablet nemá žádného pozorovatele, vybírá spoty stejně jako v režimu Fixed. Jinak přehraje obsah, který by měl pozorovatele zaujmout nejvíce.
5.5.1
Výběr spotu podle biometrických údajů
Prvním krokem je vybrat z databáze filtry, které odpovídají dostupným spotům. Z biometrických údajů osoby se poté sestaví vektor. Například pro muže ve věku 25 let bude mít vektor tvar (25,1). V dalším kroku se již hledá ten filtr, který má jeden ze svých parametrů co nejblíže k vektoru osoby. Vzdálenost vektoru parametru ve filtru od vektoru osoby se určí pomocí Euklidovské vzdálenosti DE . Euklidovská vzdálenost pro vektor x a y je dána následujícím vztahem: DE ((x1 , x2 ), (y1 , y2 )) =
r
x1 − y1 )2 + (x2 − y2 )2
V tomto případě však není tento vzorec úplně vyhovující, protože věk by měl mnohem větší váhu než pohlaví a vybraný spot by tak mohl být pro zcela jinou skupinu. Řešením je stanovit nějakou konstantu WEIGHT, která srovná tuto nerovnováhu. Výsledný vzorec tedy bude mít tvar: DE ((x1 , x2 ), (y1 , y2 )) =
r
x1 − y1 )2 + (W EIGHT ∗ x2 − W EIGHT ∗ y2 )2
Bohužel věk u parametru filtru není zadán jako konkrétní číslo (to by bylo samozřejmě nepraktické), ale jako rozsah od do. Proto abychom určili opravdu nejmenší vzdálenost, musíme vyzkoušet vektory s věkem v celém intervalu. Pokud je například parametr zadán pohlaví = muž a věk = (30 až 32), musíme určit vzdálenost pro vektory (30,1), (31,1) a (32,1) a vybrat 27
5. Realizace nejmenší. V případě, že narazíme na dva parametry se stejnou vzdáleností od vektoru osoby, považujeme za bližší ten, který má větší prioritu. Pokud vyzkoušíme všechny filtry a jejich parametry, dostaneme filtr, který bude nejvíce vyhovovat pozorovateli. Pokud osoba před kamerou setrvá delší dobu a bude se hledat další spot, vyřadíme předchozí spot a jeho filtr, aby ho osoba před tabletem nesledovala podruhé.
5.6
Práce mimo hlavní vlákno
Aby byla zaručena plynulost grafického rozhraní a souvislé přehrávání videa, je třeba veškeré výpočty a veškerou komunikaci se serverem pouštět mimo hlavní GUI vlákno. Service je spuštěná po celou dobu běhu aplikace a nezávisí na konkrétních aktivitách. Je to ideální komponenta pro oddělení práce na pozadí a grafického rozhraní. V aplikaci je implementována třída BackgroundService, která tento Service reprezentuje. BackgroundService se spouští po spuštění aplikace a běží v pozadí do té doby, než uživatel v dialogu potvrdí vypnutí nebo dokud systém nepotřebuje velké množství výkonu. K Service se lze z Activity připojit pomocí metody bindService(), díky čemuž můžeme volat metody Service a kontrolovat tak běh. Komponenta BackgroundService se v kiosku využívá pro streamování kamery, pro načítání konfigurace a také pro příjímání dat od serveru na rozpoznávání obličejů. Pokud tedy uživatel spustí aplikaci a aktivuje streamování kamery, bude tento stream dostupný, i když bude uživatel zrovna v jiné aplikaci.
5.7
Přehrávání obsahu spotů
Pro zobrazení obsahu jednotlivých spotů je v Android SDK dostupných několik komponent, které umí zpracovávat mediální soubory.
VideoView Tato komponenta je použita pro přehrávání příspěvků, které jsou reprezentovány videem. Aplikace využívá zpětných volání této třídy a reaguje na konec videa.
WebView WebView je komponenta která má velmi blízko k internetovému prohlížeči. Tato komponenta dokáže zobrazit HTML stránky a také HTML5 aplikace. Dokáže přehrát i HTML5 video, avšak pro video je výhodnější již zmíněné 28
5.7. Přehrávání obsahu spotů VideoView. Jednotlivé spoty mají stanovenou dobu, po kterou mají být zobrazené. Oproti VideoView nedisponuje WebView zpětným voláním a musíme tak implementovat vlastní časovač, který po uplynutí vymezeného času notifikuje plánovač příspěvků.
5.7.1
Schování ovládacích prvků
Aby pozorovatele reklamní spot co nejvíce uchvátil, musíme schovat ovládací prvky. Reklamní spot tak zabere celý prostor na displeji. V operačním systému Android jsou obvykle dvě systémové lišty: navigační - tlačítka zpět, domů a tlačítko pro přepínání mezi aplikacemi viz obrázek 5.1 statusová - zde se zobrazují hodiny a notifikace (například příchozí zprávy)
Obrázek 5.1: Navigační lišta
Notifikační lištu můžeme schovat pro danou Activity následujícím kódem: Navigační lištu není možné bez root oprávnění schovat natrvalo, proListing 5.2: Schování statusové lišty getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
tože by to znemožnilo navigaci v systému. Po dotyku displeje se lišta opět objeví. U verzí nižších než Jelly Bean se navíc lišta úplně neschová, ale pouze zmizí navigační tlačítka. Android Studio však nabízí šablonu Activity, která automaticky schovává navigační lištu. Šablona po každém dotyku spustí časovač a ten po uplynutí 3 sekund nastaví příznak SYSTEM_UI_FLAG_HIDE_NAVIGATION. Pokud by zařízení mělo práva root, je možné schovat navigační lištu zabitím procesu SystemUI. Pokud by jsme ji chtěli opět zobrazit, znovu tento proces spustíme jak je popsáno v následujícím kódu. Toto řešení skryje lištu i na zařízení s Androidem starším než Jelly Bean.
29
5. Realizace
Listing 5.3: Schování statusové lišty public static void hideBar(boolean hide, View view){ if (hide){ view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_LAYOUT_STABLE); try { String ProcID = "42"; Process proc; proc = Runtime.getRuntime().exec(new String[]{"su","-c","service call activity "+ ProcID +" s16 com.android.systemui"}); proc.waitFor(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } else { try { String command = "am startservice --user 0 -n com.android.systemui/.SystemUIService"; Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command }); proc.waitFor(); } catch (Exception e) { e.printStackTrace(); } } }
30
Kapitola
Testování Testování aplikace pro Android má jeden háček a tím je fragmentace zařízení. Každé zařízení má rozdílný výkon, jinou velikost displeje a jinou verzi systému. Je tedy nemožné otestovat aplikaci na všech cílených zařízeních. Výsledná aplikace vyvinutá v průběhu této práce byla testována na zařízení Acer Iconia Tab B1-710 s 1GB RAM a dvoujádrovým procesorem MediaTek MTK 8317T a na zařízení Acer DA220HQL AndroidTM Media All-In-One (obrázek 6.1). Testování aplikace bylo zaměřené na ověření správného vybírání příspěvků a automatické stahování spotů.
6.1
Testování stahování spotů
Při tomto testování bylo na serveru, který poskytuje seznam spotů a jejich obsah, pár spotů smazáno, pár přidáno a některé spoty byly pouze změněny. V zařízení se po první aktualizaci konfigurace úspěšně obnovily všechny spoty v databázi.
6.2
Testování vybírání spotů
Vybírání spotů podle obličejů před kamerou bylo otestováno na několika osobách, z toho 2 muži ve věku 22 let. Ačkoli mají oba muži stejný kalendářní věk, aplikace pro ně v režimu screensaver přehrála jiné spoty. V tomto případě se však jedná o nepřesnost algoritmu na rozpoznání biometrických údajů, protože jednomu muži byl odhadnut věk 32 let a druhému 24 let. Režimy loop a fixed nejsou algoritmicky složité a vybírání spotů v těchto režimech bylo bezchybné.
31
6
6. Testování
Obrázek 6.1: Testování kiosku
32
Závěr Cílem práce byla aplikace pro operační systém Android. Výsledkem práce je návrh a implementace, která akceptačními testy prošla jako funkční. Tato aplikace disponuje přehledným grafickým rozhraním. Aplikace přes REST API průběžně aktualizuje seznam reklamních spotů v databázi. I když dojde na serveru ke změnám některých spotů (smazání, upravení nebo přidání nových), zařízení má po krátkém okamžiku opět aktuální obsah. Kiosek tak může běžet bez jakéhokoliv zásahu až do vypnutí uživatelem. Výběr reklamních spotů podle biometrických parametrů osob před tabletem závisí na serveru na rozpoznávání obličejů. S tímto serverem aplikace komunikuje přes WebSocket protokol. Aplikace poskytuje integrovanou kameru přes protokol HTTP ve formátu MJPEG. Zajímavou částí bylo především vybírání vhodného spotu podle biometrických údajů. Získané biometrické údaje ani obrázky z kamery se neukládají a zákazníci tedy nemusí mít obavy o své soukromí.
Budoucí práce Jedním z možných vylepšení je přesunout rozpoznávání obličejů ze serveru na klientskou aplikaci. V takovém případě by byla aplikace nezávislá na funkci serveru a mohla by přehrávat vhodné informace i v případě, že server spadl. Tohoto by šlo docílit pomocí knihovny OpenCV[36] a algoritmu Open Source Biometrick Recognition.[37] Další možnost, jak tuto aplikaci vylepšit, je poskytování statistik o pozorovateli. Inzerent by měl poté přehled, v jaký čas se mu před zařízením pohybuje nejvíce potenciálních zákazníků.
33
Literatura [1] Google Buys Android for Its Mobile Arsenal. BLOOMBERG L.P. Businessweek.com [online]. 2005 [cit. 2014-05-13]. Dostupné z: http://www.businessweek.com/stories/2005-08-16/googlebuys-android-for-its-mobile-arsenal [2] Industry Leaders Announce Open Platform for Mobile Devices. OPEN HANDSET ALLIANCETM . Openhandsetalliance.com [online]. 2007 [cit. 2014-05-10]. Dostupné z: http://www.openhandsetalliance.com/press_110507.html [3] Android Captured 79% Share of Global Smartphone Shipments in 2013. STRATEGY ANALYTICS. Strategyanalytics.com [online]. 2014 [cit. 2014-05-12]. Dostupné z: http: //blogs.strategyanalytics.com/WSS/post/2014/01/29/AndroidCaptured-79-Share-of-Global-Smartphone-Shipments-in2013.aspx [4] Android 1.5 Platform Highlights. GOOGLE INC. Developer.android.com [online]. [cit. 2014-05-12]. Dostupné z: http://developer.android.com/about/versions/android-1.5highlights.html [5] Android 1.6 Platform Highlights. GOOGLE INC. Developer.android.com [online]. [cit. 2014-05-12]. Dostupné z: http://developer.android.com/about/versions/android-1.6highlights.html [6] Android 2.0 Platform Highlights. GOOGLE INC. Developer.android.com [online]. [cit. 2014-05-12]. Dostupné z: http://developer.android.com/about/versions/android-2.0highlights.html [7] Android 2.2 Platform Highlights. GOOGLE INC. Developer.android.com [online]. [cit. 2014-05-12]. Dostupné z: 35
Literatura http://developer.android.com/about/versions/android-2.2highlights.html [8] Gingerbread. GOOGLE INC. Developer.android.com [online]. [cit. 2014-05-13]. Dostupné z: http://developer.android.com/about/ versions/android-2.3-highlights.html [9] Honeycomb. GOOGLE INC. Developer.android.com [online]. [cit. 2014-05-12]. Dostupné z: http://developer.android.com/about/ versions/android-3.0-highlights.html [10] Ice Cream Sandwich. GOOGLE INC. Developer.android.com [online]. [cit. 2014-05-12]. Dostupné z: http://developer.android.com/ about/versions/android-4.0-highlights.html [11] Jelly Bean 4.2 A new and improved Jelly Bean. GOOGLE INC. Developer.android.com [online]. [cit. 2014-05-12]. Dostupné z: http: //www.android.com/versions/jelly-bean-4-2/ [12] KitKat 4.4 Smart, simple, and truly yours. GOOGLE INC. Android.com [online]. 2014 [cit. 2014-05-12]. Dostupné z: http:// www.android.com/versions/kit-kat-4-4/ [13] Dashboards. GOOGLE INC. Developer.android.com [online]. 1.5.2014 [cit. 2014-05-13]. Dostupné z: https://developer.android.com/ about/dashboards/index.html [14] Android Architecture – The Key Concepts of Android OS. Androidapp-market.com [online]. 2012 [cit. 2014-05-13]. Dostupné z: http:// www.android-app-market.com/android-architecture.html [15] HTC Posts Android 4.4 Kernel Source And Framework Files For One Google Play Edition, OTA Update Can’t Be Far Off. WHITWAM, Ryan. Androidpolice.com [online]. 2013 [cit. 2014-05-12]. Dostupné z: http://www.androidpolice.com/2013/11/25/htc-posts-android4-4-kernel-source-and-framework-files-for-one-googleplay-edition-ota-update-cant-be-far-off/ [16] Meet ART, Part 1: The New Super-Fast Android Runtime Google Has Been Working On In Secret For Over 2 Years Debuts In KitKat. TOOMBS, Cody. Androidpolice.com [online]. 2013 [cit. 2014-05-12]. Dostupné z: http://www.androidpolice.com/2013/11/06/meetart-part-1-the-new-super-fast-android-runtime-google-hasbeen-working-on-in-secret-for-over-2-years-debuts-inkitkat/ 36
Literatura [17] Google Play Hits One Million Android Apps. ROWINKSI, Dan. Readwrite.com [online]. 24.7.2013 [cit. 2014-05-13]. Dostupné z: http://readwrite.com/2013/07/24/google-play-hitsone-million-android-apps [18] MURPHY, Mark L. Android 2: průvodce programováním mobilních aplikací. Vyd. 1. Brno: Computer Press, 2011, 375 s. ISBN 978-80-2513194-7. [19] Getting Started with Android Studio. GOOGLE INC. Developer.android.com/ [online]. [cit. 2014-05-13]. Dostupné z: http:// developer.android.com/sdk/installing/studio.html [20] Activities. GOOGLE INC. Developer.android.com [online]. [cit. 2014-05-13]. Dostupné z: http://developer.android.com/guide/ components/activities.html [21] Keeping Your App Responsive. GOOGLE INC. Developer.android.com [online]. [cit. 2014-05-13]. Dostupné z: http: //developer.android.com/training/articles/perf-anr.html [22] Multi-touch Screen Digital Information Kiosk. SHENZHEN L&M c ELECTRONIC TECHNOLOGY CO. Topeledigital.com [online]. 2012 [cit. 2014-05-13]. Dostupné z: http://www.topeledigital.com/ Press_Center/post/Multi-touch-Screen-Digital-InformationKiosk.html [23] Philips Android Smart TV hands-on review: A huge and clever leap for Philips. MARTIN, Chris. Pcadvisor.co.uk [online]. 14.1.2014 [cit. 201405-13]. Dostupné z: http://www.pcadvisor.co.uk/reviews/digitalhome/3496701/philips-android-smart-tv-hands-on-review/ [24] Oslovte uživatele konkrétní věkové skupiny a pohlaví. GOOGLE c INC. Support.google.com [online]. 2014 [cit. 2014-05-13]. Dostupné z: https://support.google.com/adwords/answer/2580383 [25] OptimEyes - Real Time Customer Insight Platform. AMSCREEN c 2012 [cit. 2014-05-13]. DosGROUP. Amscreen.eu [online]. tupné z: http://www.amscreen.eu/optimeyes-real-time-insightfor-digital-media-advertising [26] Tesco ’OptimEyes’ Advertising Screens Are Just Like Technology In Minority Report. HUFFINGTON POST UK. Huffingtonpost.co.u [online]. 4.11.2013 [cit. 2014-05-13]. Dostupné z: 37
Literatura http://www.huffingtonpost.co.uk/2013/11/04/tesco-optimeyesadvertisi_n_4212361.html [27] Budget. CZECH MULTIMEDIA INTERACTIVE. Multimedialnic 2009-2014 [cit. 2014-05-13]. Dostupné z: kiosky.cz [online]. http://multimedialni-kiosky.cz/ecommerce-reseni-produkty/ informacni-kiosky-interierove/budget/ [28] Kiosk Browser. PROCO APPS. Play.google.com [online]. 29.4.2014 [cit. 2014-05-13]. Dostupné z: https://play.google.com/store/apps/ details?id=com.procoit.kioskbrowser [29] Video Kiosk. BURNINGTHUMB STUDIOS. Play.google.com [online]. 28.3.2014 [cit. 2014-05-13]. Dostupné z: https://play.google.com/ store/apps/details?id=com.burningthumb.premiervideokiosk [30] SureVideo Kiosk Video Looper. 42GEARS MOBILITY SYSTEMS. Play.google.com [online]. 3.3.2014 [cit. 2014-05-13]. Dostupnéz:https://play.google.com/store/apps/details?id= com.gears42.surevideo&hl=cs [31] CityGro Kiosk. CITYGRO. Play.google.com [online]. 14.11.2013 [cit. 2014-05-13]. Dostupné z: https://play.google.com/store/apps/ details?id=com.citygro.kiosk&hl=cs [32] Java-WebSocket. RAJLICH, Nathan. Github.com [online]. 2010-2012 [cit. 2014-05-13]. Dostupné z: https://github.com/TooTallNate/ Java-WebSocket [33] Java Google Json (Gson) Introduction. STUDYTRAILS.COM. c Studytrails.com [online]. 2012-2013 [cit. 2014-05-13]. Dostupné z: http://www.studytrails.com/java/json/java-google-jsonintroduction.jsp [34] Peepers: realtime video streaming from Android. FOXDOG STUDIOS. Foxdogstudios.com [online]. 16.2.2013 [cit. 2014-05-14]. Dostupné z: https://foxdogstudios.com/peepers-realtime-videostreaming-from-android.html [35] About HTML5 WebSockets. KAAZING CORPORATION. Webc 2013 [cit. 2014-05-13]. Dostupné z: http:// socket.org [online]. www.websocket.org/aboutwebsocket.html c 2014 [cit. 2014-05-13]. Dos[36] OpenCV. ITSEEZ. Opencv.org [online]. tupné z: http://opencv.org/about.html 38
Literatura [37] Open Source Biometric Recognition. OPENBR. Openbioc 2013 [cit. 2014-05-13]. Dostupné z: metrics.org [online]. http://openbiometrics.org/
39
Příloha
Seznam použitých zkratek API Aplication Programming Interface GUI Graphical user interface JSON Javascript Object Notation NDK Native Development Kit REST Representational State Transfer SDK Software Development Kit XML Extensible markup language
41
A
Příloha
Instalační manuál Aplikace vyžaduje zařízení s operačním systémem Android verze 4.0 a vyšší. Zařízení musí disponovat kamerou. Kamera by měla být umístěna na přední straně. Instalační balíček (soubor s koncovkou .apk) přesuneme do zařízení. Jelikož aplikace není instalována z oficiálního obchodu Google Play, musíme v nastavení zařízení v kategorii „Zabezpečení“ zaškrtnou políčko Neznámé zdroje. Poté již můžeme přes kterýkoliv správce souborů otevřít instalační soubor. Po prvním spuštění aplikace musí uživatel v nastavení určit adresu, na které je dostupná konfigurace kiosku. Případně může nastavit další chování kiosku. Dalším krokem je spustit streamování kamery tlačítkem Spustit streamování a připojit se k serveru na rozpoznávání obličejů. Po tomto kroku je již kiosek připraven přehrávat příspěvky.
43
B
Příloha
Obsah přiloženého CD
readme.txt ................................ stručný popis obsahu CD apk..................................adresář s instalačním souborem src impl.................................zdrojové kódy implementace doc ....................................... adresář s dokumentací text..................................................text práce thesis.pdf........................text práce ve formátu PDF thesis.tex ............ zdrojová forma práce ve formátu LATEX 45
C