ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE FAKULTA ELEKTROTECHNICKÁ KATEDRA POČÍTAČOVÉ GRAFIKY A INTERAKCE
BAKALÁŘSKÁ PRÁCE Fotografie portrétů pro nevidomé uživatele
Studijní program: Otevřená informatika, Bakalářský Obor: Softwarové systémy
Autor: Lukáš Neoproud Vedoucí práce: Ing. Jan Balata
Praha, 2014
iv
Poděkování Chtěl bych poděkovat vedoucímu této práce, panu Ing. Janu Balatovi, za jeho trpělivost, pomoc při získávání potřebných materiálů a za zajištění nevidomých participantů na testování aplikace.
v
vi
Prohlášení Prohlašuji, že jsem práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu §60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon).
V Praze dne 21. května 2014
......................................
vii
viii
Název práce: Fotografie portrétů pro nevidomé uživatele Autor: Lukáš Neoproud Katedra: Katedra počítačové grafiky a interakce Vedoucí bakalářské práce: Ing. Jan Balata e-mail vedoucího:
[email protected] Abstrakt V rámci této práce byla vytvořena mobilní aplikace, která umožňuje nevidomým uživatelům fotografovat portréty. Aplikace je určena pro mobilní telefony s operačním systémem Android a byla vyvinuta v jazyce Java. Nabízí více režimů fotografie a obsahuje galerii s již pořízenými fotografiemi. Pro navigování uživatele byly použity modality jako hlas, zvuk, vibrace a jejich kombinace. Ty byly nakonec otestovány na nevidomých uživatelích. Na základě kvality výsledných fotografií a doby potřebné pro jejich zachycení byla vyhodnocena jako nejlepší hlasová zpětná vazba. Klíčová slova: fotografie, portrét, Android, mobilní aplikace, nevidomí
Title: Portrait photography for blind users Author: Lukáš Neoproud Department: Department of Computer Graphics and Interaction Supervisor: Ing. Jan Balata Supervisor’s e-mail address:
[email protected] Abstract As part of this project we have developed a mobile application allowing visually impaired people to take portraits. The application is designed for mobile phones with Android operating system and has been developed in Java. It offers multiple modes and includes a photo gallery with already taken photos. To navigate user we used different types of feedback such as voice, sound, vibrations and their combinations. Those were then tested on visually impaired users. Based on the quality of the resulting photographs and the time required for their capture, voice was evaluated as the best type of feedback. Keywords: photography, portrait, Android, mobile application, blind
ix
Obsah 1. Úvod 1.1. Obecný úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Cíle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3. Struktura dokumentu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Zrakově postižení uživatelé 2.1. Typy zrakových postižení . . . . . . . . . 2.1.1. Omezení ostrosti . . . . . . . . . . 2.1.2. Omezení zorného pole . . . . . . . 2.1.3. Citlivost na intenzitu osvětlení . . 2.1.4. Poruchy barvocitu . . . . . . . . . 2.2. Rozložení zrakových postižení v populaci . 2.3. Kategorizace lidí se zrakovým postižením 2.4. Kompenzační pomůcky . . . . . . . . . . . 2.4.1. Optické . . . . . . . . . . . . . . . 2.4.2. Optoelektrické . . . . . . . . . . . 2.4.3. Počítače . . . . . . . . . . . . . . . 2.4.4. Mobilní telefony . . . . . . . . . . 3. Existujicí aplikace 3.1. Fotoaparát (Android) . 3.2. EasySnap . . . . . . . . 3.3. PortraitFramer . . . . . 3.4. VizWiz . . . . . . . . . 3.5. Accessible Photo Album 4. Použité technologie 4.1. Detekce obličeje . . . . 4.2. Text-to-speech . . . . 4.3. Google Geocoding API 4.4. Exif . . . . . . . . . .
. . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
1 1 1 1
. . . . . . . . . . . .
3 3 3 4 5 5 5 7 8 8 9 12 12
. . . . .
15 15 15 16 16 16
. . . .
17 17 18 18 20
5. Požadavky 21 5.1. Nefunkční požadavky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 5.2. Funkční požadavky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
xi
Obsah 6. Popis funkcionality 6.1. Fotoaparát . . . . . . . . . 6.1.1. Zpětná vazba . . . . 6.1.2. Ovládání . . . . . . 6.1.3. Režimy fotoaparátu 6.2. Galerie . . . . . . . . . . . . 6.2.1. Ovládání . . . . . . 6.2.2. Zpětná vazba . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
7. Návrh a popis implementace 7.1. Výběr rozlišení náhledu a fotografie . . . . . . 7.1.1. Rozlišení fotografie . . . . . . . . . . . 7.1.2. Náhled fotoaparátu . . . . . . . . . . . 7.2. Režimy fotografie . . . . . . . . . . . . . . . . 7.3. Vícevrstvý náhled . . . . . . . . . . . . . . . 7.4. Detekce gesta přejetí prstu přes okraj displeje 7.5. Určování polohy . . . . . . . . . . . . . . . . 7.6. Generování tónů . . . . . . . . . . . . . . . . 8. Testování 8.1. Detaily testování . . . . . . . . . . . . . 8.1.1. Participanti . . . . . . . . . . . . 8.1.2. Průběh testování . . . . . . . . . 8.1.3. Design testování . . . . . . . . . 8.1.4. Typ testování . . . . . . . . . . . 8.2. Průběh testování . . . . . . . . . . . . . 8.2.1. Seznámení participanta s aplikací 8.2.2. Testování aplikace . . . . . . . . 8.2.3. Závěrečný dotazník . . . . . . . . 8.3. Vyhodnocení . . . . . . . . . . . . . . . 8.3.1. Výsledky testů . . . . . . . . . . 8.3.2. Připomínky k aplikaci . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .
23 23 23 25 25 27 27 27
. . . . . . . .
29 29 29 29 29 30 31 32 33
. . . . . . . . . . . .
35 35 36 37 37 37 38 38 38 38 39 40 42
9. Závěr 45 9.1. Vyhodnocení výsledků testování . . . . . . . . . . . . . . . . . . . . . . . . 45 9.2. Budoucí vývoj aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 A. Příloha - Přiložené CD A.1. Zdrojový kód původní aplikace . . . . . . . . . . . . A.2. Zdrojový kód aplikace s úpravou pro testování . . . . A.3. Instalační balíček s původní aplikací . . . . . . . . . A.4. Instalační balíček s aplikací upravenou pro testování A.5. Bakalářská práce v elektronické podobě . . . . . . .
xii
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
55 55 55 55 55 55
Obsah B. Příloha - Funkce pro generování tónů
57
xiii
Seznam zkratek Exif Exchangeable image file format GPU Graphic processing unit ID
Identifier
MP3 MPEG-1 nebo MPEG-2 Audio Layer III PDF Portable Document Format
xv
1. Úvod 1.1. Obecný úvod Fotografování obrázků na mobilním telefonu může na první pohled vypadat jako funkce používaná pouze vidícími uživateli, nicméně nevidomí tuto funkci také využívají. Telefon za účelem fotografování často používají lidé, kteří zrak ztratili až později během života a byli dříve zvyklí fotografovat nebo ti, kteří mají lehčí zrakové postižení a vidí alespoň částečně. Fotografie si pak mohou prohlédnout například na monitoru počítače, který je výrazně větší než displej mobilního telefonu a umožňuje vidět více detailů. Nevidomí lidé také cítí potřebu se o své zažitky podělit, a tak mohou vyfotografované snímky ukazovat například svým vidícím přátelům.
1.2. Cíle Náplní této práce byl návrh a implementace aplikace, která umožní nevidomým uživatelům fotografovat portréty. Dále bylo třeba aplikaci otestovat s nevidomými uživateli a výsledky testování vyhodnotit. Podmínkou implementace bylo využití více modalit1 pro navigování uživatele při míření fotoaparátu na fotografovanou osobu. Dalším požadavkem bylo vytvoření galerie, kde by si uživatel mohl procházet pořízené fotografie. Součástí fotografií měly být i informace o poloze uživatele a o umístění obličeje fotografované osoby na fotografii. Jako platforma pro vývoj této aplikace byl zvolen operační systém Android.
1.3. Struktura dokumentu Nejdříve je obecně rozebrána integrace nevidomých lidí do společnosti a používání mobilních aplikací v běžném životě. Dále jsou popsány již existující aplikace, které na mobilním telefonu používají fotoaparát. V další části jsou přiblíženy některé technologie, které byly použity při vývoji aplikace. Poté bude popsáno fungování aplikace, interakce s uživatelem a některé zajímavé části implementace. Na konci dokumentu je rozebraný průběh testování a v závěru jsou popsány výsledky testování a nápady na budoucí vývoj aplikace.
1
Modalita je typ zpětné vazby, například vibrace nebo hlas.
1
2. Zrakově postižení uživatelé V této kapitole jsou popsány různé typy zrakových postižení a jejich rozšířenost v rámci lidské populace. Dále je rozebrána mezinárodně používaná kategorizace lidí s postižením zraku a na závěr je vysvětleno použití různých kompenzačních pomůcek u zrakově postižených lidí.
2.1. Typy zrakových postižení Zde jsou popsány některé poruchy a choroby, které ovlivňují kvalitu zraku.
2.1.1. Omezení ostrosti V tomto textu jsou uvedené vady, které způsobují neostré vidění. Krátkozrakost Krátkozrakost je optická vada oka, která způsobuje, že člověk trpící touto poruchou vidí dobře na blízko, ale velmi špatně na dálku. Nejčastěji se tato vada objevuje u dětí v raném školním věku nebo v pubertě. Po 20. roku života se krátkozrakost obvykle dále nevyvíjí. Příčiny krátkozrakosti jsou celkem dvě. Tato vada může být způsobena buď velkou lomivostí optických členů oka nebo větší délkou oka v přímém směru. Obě příčiny mají za následek to, že ohnisko vzniká před sítnicí. Krátkozrakost patří mezi vrozené vady a dá se korigovat použitím brýlí, kontaktních čoček nebo se dá řešit operativně, např. úpravou povrchu oka laserem.[3]
Obrázek 2.1.: Znázornění krátkozrakého oka[17]
3
2. Zrakově postižení uživatelé Dalekozrakost Tato vada způsobuje, že při pohledu do dálky se ohnisko vytváří až za sítnicí oka a člověk trpící touto vadou pak vidí hůře na dálku. Dalekozrakost se může objevit už v mládí a obvykle se postupem času zhoršuje. Často se stává, že se dalekozrakost vyskytuje společně s tupozrakostí a šilhavostí. Dalekozrakost může být způsobena buď nesprávnou lomivostí čočky oka nebo kratší délkou bulvy v přímém směru. Tato vada se dá řešit stejnými prostředky jako krátkozrakost, tzn. používáním brýlí, kontaktními čočkami nebo laserovou operací. [2]
Obrázek 2.2.: Znázornění dalekozrakého oka [17] Tupozrakost Tupozrakost je, narozdíl od předešlých dvou vad, vada funkční, nikoliv optická. Zrakové centrum v mozku při tupozrakosti potlačuje obraz přicházející z oka s vyššími dioptriemi. Je to působeno nedostatečným vlivem zrakových podnětů u jednoho oka. Tupozrakost bývá často doprovázena šilhavostí. Oko, které mozek při tupozrakosti ignoruje totiž časem slábne a nepohybuje se stejně jako druhé oko. Tato vada se obvykle vyvíjí už u dětí v předškolním věku a dá se vyléčit pouze včasným zásahem lékaře. Tupozrakost se dá v současné době řešit třemi způsoby. Prvním je zakrytí silnějšího oka, což udržuje slabší oko zaměstnané a přirozeně se tím tato vada potlačí. Další možností je využití kontaktních čoček nebo brýlí, které dokáží vyrovnat rozdíly mezi oběma očima. Poslední možností je nákladná operace, kterou se upraví oční svaly.
2.1.2. Omezení zorného pole Omezení zorného pole může způsobovat onemocnění oka, očního nervu, cév či mozku. Existují dva základní typy omezení zorného pole. První typ je omezení periferního vidění. Oblast nejostřejšího vidění je v tomto případě zachována a takový člověk může číst drobný tisk, ale má zhoršenou orientaci a pohyb v prostoru. Druhým typem je omezení centrálního vidění, kdy člověk vidí méně ostře, ale díky zachovanému perifernímu vidění se v prostoru orientuje dobře.
4
2.2. Rozložení zrakových postižení v populaci Omezení zorného pole může způsobovat např. zánět očního nervu, kdy je ztráta vidění znatelná do několika dnů, nebo může být jedním z příznaků sklerózy, případně může jít o odchlípnutí sítnice. V každém případě jde o vážný stav, který je nutné lékařsky řešit, jinak může dojít u postiženého oka k úplné ztrátě zraku.[7]
2.1.3. Citlivost na intenzitu osvětlení V této části jsou popsány poruchy, které ovlivňují vnímaní světla u postiženého člověka. Světloplachost Jde o zvýšenou citlivost oka na světlo. Člověk trpící světloplachostí vidí při pohledu do silnějšího zdroje světla došeda nebo rozmazaně. V některých případech může dlouhodobé vystavení světlu způsobovat bolest očí, slzení, poruchy soustředění, bolesti hlavy, apod. Světloplachost může vzniknout i důsledkem některých váženějších chorob očí a mozku, např. meningitidy, malárie, migrény, různých zánětů v oku atd. Pokud lékař vyloučí přítomnost některé z chorob, je možné světloplachost mírnit menším vystavováním na silném světle, nebo použitím očních kapek.[5] Šeroslepost K šerosleposti dochází při špatné funkci sítnicových tyčinek a projevuje se zhoršeným viděním ve tmě a za šera. Šeroslepost může být vrozená nebo způsobená nedostatkem vitamínu A v těle, v tom případě je možné jí léčit medikamenty.[6]
2.1.4. Poruchy barvocitu Zhoršený barvocit se projevuje tak, že postižený barvy vnímá buď jinak, má sníženou citlivost na některé barvy nebo barvy nevnímá vůbec. Poruchy barvocitu nejčastěji bývají dědičné a během života se nevyvíjí, u starších lidí však mohou vznikat vlivem některých chorob - neuropatií, zánětů sítnice nebo vlivem některých léků. Nejčastěji se vyskytuje varianta, kdy postižený nevidí zelenou barvu (deuteranopie) a kdy ji vidí slabě (deuteranomalie). Obě varianty jsou uvedeny v tabulce níže. Poruchy barvocitu se často vyskytují ve spojitosti se světloplachostí nebo méně často s omezeným centrálním viděním. Léčba bohužel žádná neexistuje. [8]
2.2. Rozložení zrakových postižení v populaci Zde jsou pro představu uvedené procentuální zastoupení jednotlivých očních vad v populaci.
5
2. Zrakově postižení uživatelé Název vady Krátkozrakost Dalekozrakost Tupozrakost Deuteranopie (nevidí zelenou barvu) Deuteranomalie (vidí zelenou slabě) Slepota
Zastoupení v populaci ~ 30 % ~ 10 % 4 % (u dětí do 15 let) 1 % mužů, 0,1 % žen 5 % mužů, 0,35 % žen 0,5 % (celosvětově)
Tabulka 2.1.: Zastoupení zrakových postižení v populaci
6
2.3. Kategorizace lidí se zrakovým postižením
2.3. Kategorizace lidí se zrakovým postižením Vážnost zrakového postižení se udává pomocí tzv. Snellenova zlomku. Snellenův zlomek se zjišťuje pomocí Snellenovi tabule, která se běžně používá v ordinacích při kontrolách zraku. Tabule i zlomek nese jméno holandského oftalmologa Hermanna Snellena, který v roce 1862 navrhl tabulku na testování zraku. Zlomek, který označuje průměrně vidícího člověka, je 6/6 (v metrech) případně 20/20 (ve stopách). Čitatel zlomku označuje, na jakou vzdálenost přečetl text z tabule pacient a jmenovatel na jakou vzdálenost by text přečetl průměrný člověk. Zlomek může být reprazentovaný i desetinným číslem. Největší řádek měří 88 milimetrů.[4]
Obrázek 2.3.: Snellenova tabule Úrovně postižení zraku definované Světovou zdravotnickou organizací: • Kategorie 1: Střední slabozrakost - zraková ostrost s nejlepší možnou korekcí (např. brýle, kontaktní čočky): maximum menší než 6/18 (0,30) - minimum rovné nebo lepší než 6/60 (0,10); 3/10 - 1/10 • Kategorie 2: Silná slabozrakost - zraková ostrost s nejlepší možnou korekcí: maximum menší než 6/60 (0,10) - minimum rovné nebo lepší než 3/60 (0,05); 1/10 - 10/20
7
2. Zrakově postižení uživatelé • Kategorie 3: Těžce slabý zrak – a) zraková ostrost s nejlepší možnou korekcí: maximum menší než 3/60 (0,05) - minimum rovné nebo lepší než 1/60 (0,02); 1/20 - 1/50 – b) koncentrické zúžení zorného pole obou očí pod 20 stupňů, nebo jediného funkčně zdatného oka pod 45 stupňů
• Kategorie 4: Praktická nevidomost - zraková ostrost s nejlepší možnou korekcí 1/60 (0,02), 1/50 až světlocit nebo omezení zorného pole do 5 stupňů kolem centrální fixace, i když centrální ostrost není postižena
• Kategorie 5: Úplná nevidomost - ztráta zraku zahrnující stavy od naprosté ztráty světlocitu až po zachování světlocitu s chybnou světelnou projekcí
2.4. Kompenzační pomůcky V této sekci jsou uvedeny různé příklady kompenzačních pomůcek. Kompenzační pomůcky jsou věci, které zrakově postiženým pomáhají v běžném životě - při čtení, psaní, při práci na počítači, při používání mobilního telefonu apod. U každé skupiny pomůcek bude uvedena její krátká charakteristika a příklady konkrétních pomůcek ve formě obrázků.[13]
2.4.1. Optické Do této kategorie spadají kompenzační pomůcky, které využívají optické členy (čočky, hranoly) a jednoduchou elektroniku (osvětlení). Příkladem takových optických pomůcek jsou především lupy, které jsou dostupné v několika variantách a všechny mají společné to, že usnadňují čtení časopisů, knih a dalších textů. První velmi známou variantou jsou lupy do ruky, které se skládají ze zvětšovací čočky a držadla a jsou vhodné hlavně na čtení. Lupy umístěné na stojanu nebo v podobě speciálních brýlí jsou navíc vhodné i na psaní a při čtení umožňují snadnější manipulaci se čtenou publikací. U všech zmiňovaných typů je také možné zakoupit variantu s integrovaným osvětlením, které usnadňuje práci ve zhoršených světelných podmínkách.
8
2.4. Kompenzační pomůcky
Obrázek 2.4.: Lupa do ruky s integrovaným osvětlením[14]
2.4.2. Optoelektrické
Optoelektrické pomůcky se většinou skládají z kamery a zobrazovacího zařízení a jsou vhodné především na čtení. Kamera se stará o snímaní textu a obraz z kamery je poté přenesen do zobrazovacího zařízení, kde je zvětšen, aby byl pro zrakově postižené lépe čitelný.
Tyto pomůcky jsou dostupné v několika základních variantách. Nabízí se jak stolní, tak i přenosné, což se odvíjí hlavně od velikosti, a zobrazovacím zařízením může být televize, monitor, nebo integrovaný displej.
9
2. Zrakově postižení uživatelé
Obrázek 2.5.: Stolní lupa ClearView[15]
10
2.4. Kompenzační pomůcky
Obrázek 2.6.: Přenosní lupa s integrovaným displejem[16]
11
2. Zrakově postižení uživatelé
2.4.3. Počítače Pro počítače jsou dostupné jak softwarové, tak i hardwarové pomůcky. Mezi softwarové se řadí text-to-speech systémy, které umožňují převádět text na jeho mluvenou podobu a často se využívají dohromady s odečítači obrazovky. Odečítače obrazovky fungují tak, že předčítají informace zobrazené na monitoru počítače a informují uživatele o důležitých událostech v systému. Zástupcem hardwarových pomůcek jsou například Braillovy displeje, které vytváří matici výstupků v Braillově písmě. Kromě nich existují také speciální tiskárny a klávesnice, které také používají Braillovo písmo.
Obrázek 2.7.: Braillův displej[12]
2.4.4. Mobilní telefony V případě mobilních telefonů s klasickou konstrukcí se také často používá odečítač obrazovky. Při navigaci v uživatelském rozhraní software v telefonu přečte uživateli text zobrazený na displeji a on má jistou představu o tom, kde se v menu nachází a jak se dostane k požadované funkci. Toto je prakticky jediná odlišnost od normálního telefonu. Nevidomý s telefonem může volat, posílat SMS zprávy, zjišťovat čas, nahrávat poznámky na diktafon apod. Nicméně funkce jako fotoaparát může používat jen stěží. S rozšířením mobilních telefonů s dotykovým displejem začaly vznikat nové způsoby
12
2.4. Kompenzační pomůcky zpětné vazby pro zrakově postižené uživatele a vznikalo více a více aplikací přizpůsobených přímo pro nevidomé. Nejdále jsou v tomto operační systémy iOS a Android. Jako příklad uvedu aplikaci TalkBack dostupnou na platformě Android. Nevidomý uživatel prstem přejíždí po ploše displeje a telefon mu čte, jaký text má právě “pod prstem”. Tímto způsobem zkoumá, co se kde na displeji nachází, a poté, pokud je s volbou spokojený, poklepe na ovládací prvek na displeji a telefon provede požadovanou akci. Mezi aplikace optimalizované pro nevidomé uživatele patří různé programy pro zadávání textu pomocí gest, přehrávače hudby nebo programy pro zjišťování aktuální polohy pomocí GPS. Jak už je zmíněno v úvodu, existuje několik aplikací, které využívají fotoaparát. Tento druh aplikací bude podrobněji rozebrán v následující kapitole.
13
3. Existujicí aplikace V této kapitole jsou shrnuty informace o již existujících aplikacích určených pro nevidomé uživatele. Všechny aplikace mají společné to, že nějakým způsobem pracují s fotoaparátem mobilního telefonu. U každé aplikace budou popsány klíčové vlastnosti, jako je ovládání, typy zpětné vazby a použité režimy fotografie.
3.1. Fotoaparát (Android) V základní instalaci systému Android je od verze 4.3 dostupná aplikace Fotoaparát, která umožnuje pořizovat fotografie a obsahuje jednoduchá nastavení jejich parametrů. Novinkou v této verzi je, že má detekci obličeje. Aplikace se nevidomými dá používat jen v případě, že je zapnutá také aplikace TalkBack (podsekce 2.4.4), ta ale dává zpětnou vazbu pouze k uživatelskému rozhraní. Uživatel však nedostavá žádnou informaci o tom, co je na fotografované scéně.
3.2. EasySnap Jedná se o aplikaci pro mobilní telefony iPhone, která umožňuje zrakově postiženým lidem fotografovat různé typy snímků za pomoci hlasové zpětné vazby. EasySnap si klade za cíl poskytnout nevidomým uživatelům nástroj pro fotografování kvalitních snímků. Tato aplikace používá celkem čtyři hlediska pro vyhodnocování kvality fotografie polohu a zarovnání objektu na snímku, expozici a ostrost. Uživatel si může vybrat ze tří režimů fotografie - landscape, portrait/object mode a document mode. Pomocí režimu landscape lze fotografovat jakékoliv scény. Aplikace vyhodnocuje pouze expozici a ostrost snímku. Režim portrait/object funguje tak, že nechá uživatele vyfotografovat objekt na krátkou vzdálenost, a pak uživatel poodstoupí na vzdálenost, ze které chce pořizovat snímek. Snímek na krátkou vzdálenost funguje jako reference, pomocí které mobilní telefon pomáhá správně zamířit předmět pro fotografování z dálky. Posledním režimem je document mode, který pomáhá při fotografování knih, novin nebo bankovek. Předpokládá se, že uživatel je od předmětu vzdálený 30 až 100 cm. Aplikace hlídá, aby předmět nebyl na fotografii nakřivo a aby byl umístěný uprostřed snímku. Pro hlasové povely používá jednoduché fráze, jako například “Zoom In”, “Go Down”, “Turn Left”, “Ready” apod. [19]
15
3. Existujicí aplikace
3.3. PortraitFramer PortraitFramer, na rozdíl od EasySnap, dokáže zachytit na fotografii i více lidí. Zajímavostí v tomto případě je, že na fotografiích jsou telefonem rozpoznány obličeje. Fotografie je pak upravena tak, že místa, kde byly obličeje, jsou vyplněna bílou barvou a zbytek prostoru černou. To pomáhá lépe vnímat fotografii zrakově postiženým, kteří mohou zrak používat alespoň v částečně. Po přejetí prstem po displeji nad místem, kde je obličej, telefon zavibruje. Kromě vibrací vydá i zvuk, který se liší podle toho, jakého obličeje se uživatel právě dotknul.[23]
3.4. VizWiz VizWiz je mobilní aplikace, která funguje zcela jinak než EasySnap nebo PortraitFramer. Umožňuje uživateli položit otázku a zároveň k ní přiložit fotografii, která se této otázky týká. Otázka i s fotografií je odeslána na server, kde na ni odpovídají vidící lidé. Když má doma nevidomý plechovku s neznámým obsahem, tak stačí, aby ji vyfotografoval a zeptal se: “Co je to za plechovku?”. Vidící člověk podle obalu pozná, že se jedná o plechovku fazolí a uživateli tuto odpověď pošle zpět.[18, 11]
3.5. Accessible Photo Album Tato aplikace je zaměřená na snímání fotografií, jejich třídění a sdílení mezi přáteli. Kromě samotné fotografie umožňuje zachytit i zvukovou nahrávku. Při procházení fotografií je tato poznámka přehrána, a poté je pomocí text-to-speech 1 přečten i název místa, kde byla fotografie pořízena. Pro převod GPS souřadnic na adresu je použit reverzní geocoding (sekce 4.3).[10]
1
Strojový převod textu na řeč.
16
4. Použité technologie Tato kapitola obsahuje zajímavé technologie použité při vývoji aplikace. Technologie jsou krátce popsány a je u nich uveden příklad použití.
4.1. Detekce obličeje Od verze 4.0 má Android vestavěnou podporu pro detekci obličejů. Z náhledu fotoaparátu dokáže získat jednotlivé obličeje a jejich charakteristické znaky - pozici očí, nosu a úst. Kromě těchto znaků vrací také souřadnice čtverce, který obličej ohraničuje. Detekce obličeje se zapíná zavoláním funkce startFaceDetection na objektu typu Camera. Algoritmus 4.1 Zapnutí detekce obličejů 1
mCamera.startFaceDetection();
Zastavuje se obdobně pomocí funkce stopFaceDetection. Zastavení detekce obličeje se používá v případě, že obrazovka s náhledem přejde do pozadí a my nechceme zbytečně používat systémové prostředky. Algoritmus 4.2 Vypnutí detekce obličejů 1
mCamera.stopFaceDetection();
Třída, která si zaregistruje listener pro odběr callback s detekovaným obličejem musí implementovat metodu onFaceDetection. Pole faces obsahuje detekované obličeje a objekt camera je zde pouze z praktických důvodů. Algoritmus 4.3 Implementace callbacku 1 2 3
public void onFaceDetection(Camera.Face[] faces, Camera camera) { ... }
17
4. Použité technologie
4.2. Text-to-speech
Text-to-speech je způsob, jakým lze přeměnit psaný text na mluvené slovo. Stejně jako detekce obličejů i text-to-speech je součástí operačního systému Android. Ve výchozím stavu bývá dostupná pouze angličtina. Další jazyky je možné doinstalovat prostřednictvím aplikace TalkBack. Čeština však není mezi nimi a je poskytována pouze komerčně.
Zavolání funkce speak nad objektem TextToSpeech spustí syntézu hlasu, která se pokusí převést proměnnou text na mluvené slovou. Jako druhý parametr lze použít buď konstantu QUEUE_ADD, která zařadí přehrávání textu na konec fronty (za již přehrávaný text), nebo konstantu QUEUE_FLUSH, která smaže celou frontu a přehraje text okamžitě.
Algoritmus 4.4 Použití text-to-speech mTts.speak(text, TextToSpeech.QUEUE_ADD, null);
1
4.3. Google Geocoding API
Společnost Google poskytuje veřejné API pro Geocoding. Geocoding je převádění adresy, např. “Dlouhá 123, Praha 1, Česká republika” na souřadnice “50.088898, 14.425364”. V této aplikaci je použit přesný opak, tzv. reverzní geocoding, který umožňuje převod souřadnic na čitelnou adresu. Služba je dostupná pouze přes internet. [9]
V následujícím algoritmu můžete vidět, jakým způsobem se služba používá. Nejdříve se inicializuje objekt typu Geocoder, kterému jsou poté předány souřadnice a on pak základě nich vrátí kompletní adresu aktuálního umístění.
18
4.3. Google Geocoding API Algoritmus 4.5 Příklad použítí geocodingu 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
private String getHumanLocation() { if(mCurrentLocation != null) { Geocoder geocoder = new Geocoder(CameraActivity.this, Locale.ENGLISH); List
results; try { results = geocoder.getFromLocation( mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude(), 1); } catch (IOException e) { e.printStackTrace(); return null; } if(results.size() > 0) { Address address = results.get(0); StringBuilder stringBuilder = new StringBuilder(); if(address.getThoroughfare() != null) { stringBuilder.append(address.getThoroughfare()); stringBuilder.append(", "); }
21
if(address.getSubThoroughfare() != null) { stringBuilder.append(address.getSubThoroughfare()); stringBuilder.append(", "); }
22 23 24 25 26
if(address.getLocality() != null) { stringBuilder.append(address.getLocality()); stringBuilder.append(", "); }
27 28 29 30 31
if(address.getCountryName() != null) { stringBuilder.append(address.getCountryName()); stringBuilder.append(", "); }
32 33 34 35 36
String s = stringBuilder.toString();
37 38
return Normalizer.normalize(s, Normalizer.Form.NFD) .replaceAll( "\\p{InCombiningDiacriticalMarks}+", "");
39 40 41
} } return null;
42 43 44 45
} 19
4. Použité technologie
4.4. Exif Exif je standard pro uchovávání metadat u určitých typů souborů. Často se používá u fotografií. Lze tam uložit různé informace o snímku - expozici a závěrku fotoaparátu, datum a čas vytvoření, komentáře aj. V této aplikaci se používá pro ukládání adresy místa, kde byla fotografie pořízena.[?] Algoritmus 4.6 Ukládání Exif do souboru 1 2 3
ExifInterface exif = new ExifInterface(photoFile.getPath()); exif.setAttribute("UserComment", comment); exif.saveAttributes();
20
5. Požadavky Na základě zadání této práce byly stanoveny následující požadavky.
5.1. Nefunkční požadavky • kompatibilita s operačním systémem Android verze 4.x • nepoužítí knihoven třetích stran • možnost používat aplikaci i offline
5.2. Funkční požadavky • podpora více režimů fotografií • použití více modalit • vytvoření galerie pro prohlížení fotografií • využití gest pro ovládání aplikace
21
6. Popis funkcionality Aplikace se skládá ze dvou základních obrazovek - z fotoaparátu a galerie. Přestože je aplikace vyvíjena primárně pro použití nevidomými uživateli, jsou zachovány některé prvky grafického rozhraní tak, aby bylo možné aplikaci pohodlně testovat a plnohodnotně využívat i vidícím člověkem. Ovládání i zpětná vazba je upravena pro nevidomé uživatele. Textové popisky a hlasová zpětná vazba jsou v anglickém jazyce, protože český jazyk nebyl pro text-to-speech volně dostupný.
6.1. Fotoaparát První věcí, která se na displeji po spuštění aplikace ukáže, je náhled fotoaparátu. Aplikace je v tu chvíli nastavena do režimu Center mode. Vlevo nahoře je popisek, který říká, jaký režim je právě aktivní. Pod ním se nachází ikona, která indikuje, zda byla určena poloha a jaký je její zdroj (mobilní síť, GPS). Přes náhled fotoaparátu jsou zobrazeny žlutou čarou hranice, které telefon používá pro navigování uživatele v daném režimu. Pokud se do záběru fotoaparátu dostane obličej, je na displeji ohraničen zeleným čtvercem.
6.1.1. Zpětná vazba Pro navádění uživatele se používá několik typů zpětné vazby - hlas, zvuk, vibrace, kombinace hlasu a vibrací a kombinace zvuku a vibrací. Hlas Tento typ zpětné vazby sděluje pokyny uživateli pomocí text-to-speech a informuje ho o různých stavech aplikace. Výčet použitých pokynů: • “Received network location” - Telefon určil souřadnice podle mobilní nebo WiFi sítě. • “Received GPS location” - Telefon určil souřadnice podle GPS. • “Center mode, rotate to portrait” - Uživatel přepnul režim na Center mode a měl by telefon otočit na výšku. • “Golden ratio mode, rotate to landscape” - Uživatel přepnul režim na Golden ratio mode a měl by telefon otočit na šířku.
23
6. Popis funkcionality • “Go closer” - Uživatel je příliš daleko od fotografované osoby, měl by jít blíže. • “Go farther” - Uživatel je příliš blízko u fotografované osoby, měl by jít dál. • “Tilt up” - Výzva, aby uživatel naklonil telefon nahoru. • “Tilt down” - Výzva, aby uživatel naklonil telefon dolu. • “Move left” - Uživatel by měl telefon otočit více doleva. • “Move right” - Uživatel by měl telefon otočit více doprava. • “Take a picture” - Fotografovaný člověk má obličej v cílové oblasti. Nyní může uživatel osobu vyfotografovat. • “Processing picture” - Fotografie se zpracovává, získává se čitelná poloha pomocí reverzního geocodingu. • “Picture saved” - Fotografie byla uložena, je možné dělat další snímky. • “Unable to save the picure” - Z neznámého důvodu se nepodařilo fotografii uložit. • “No faces” - V náhledu se nenachází žádný obličej. Zvuk Další možností zpětné vazby je vydávání jednoduchých zvuků. Pro odlišení jednotlivých pokynů se používají různé sekvence zvuků o různých frekvencích. Zvuková zpětná vazba obsahuje jen základní pokyny. Zvukové pokyny trvají kratší dobu než hlasové a uživatel na ně tedy může rychleji zareagovat. Název Pohyb nahoru Pohyb doleva Pohyb dolů Pohyb doprava Jít dál Jít blíž Vyfotografuj snímek Snímek uložen Center mode Golden ratio mode
Délka tónu 50 ms 50 ms 50 ms 50 ms 50 ms 20 ms 1000 ms 100 ms 300 ms 300 ms
Délka pauzy 100 ms 100 ms 100 ms 100 ms 500 ms 50 ms 50 ms 50 ms
Opakování 1 2 3 4 4 6 1 1 1 2
Tabulka 6.1.: Výčet všech zvukových pokynů
24
Frekv. tónu 800 Hz 800 Hz 800 Hz 800 Hz 2000 Hz 2000 Hz 1400 Hz 1400 Hz 1000 Hz 1000 Hz
6.1. Fotoaparát Vibrace U vibrací jsou použité podobné sekvence jako u zvuků. Při překrytí více vibračních pokynů se může stát, že nepůjde rozeznat, o jaké pokyny přesně šlo. Název Pohyb nahoru Pohyb doleva Pohyb dolů Pohyb doprava Jít dál Jít blíž Vyfotografuj snímek Snímek uložen Center mode Golden ratio mode
Délka vibrace 100 ms 100 ms 100 ms 100 ms 50 ms 20 ms 1000 ms 100 ms 300 ms 300 ms
Délka pauzy 200 ms 200 ms 200 ms 200 ms 500 ms 50 ms 50 ms 50 ms
Opakování 1 2 3 4 4 6 1 1 1 2
Tabulka 6.2.: Výčet všech vibračních povelů
Hlas a vibrace Hlasové povely fungují stejně, jak bylo popsáno výše. Vibrace v tomto případě indikují vzdálenost obličeje od cílového prostoru. Čím je obličej blíže k cílové oblasti, tím je frekvence vibrací vyšší. Zvuk a vibrace Funguje podobně jako v předešlém případě s tím rozdílem, že hlas nahradily zvuky.
6.1.2. Ovládání Obrazovka fotoaparátu se ovládá převážně gesty na displeji. Režimy se přepínají přejetím prstu přes pravý nebo levý okraj obrazovky. Přejetím přes horní nebo dolní okraj se zobrazí galerie. Fotografie se pořizuje dvojitým klepnutím kdekoliv na ploše displeje.
6.1.3. Režimy fotoaparátu Center mode (režim na střed) Center mode je režim, kterým se dají pořizovat portréty lidí na výšku. V tomto režimu je těsně nad polovinou displeje umístěný žlutý čtverec, který určuje cílový prostor, do kterého je nutné dostat střed obličeje fotografované osoby. Dalším omezujícím kritériem je
25
6. Popis funkcionality velikost obličeje. Aby byl uživatel vyzván k vyfocení, musí obličej fotografovaného zabírat 40 až 60 % šířky displeje. Díky tomu není obličej ani příliš malý ani nepřesahuje přes okraj snímku.
Obrázek 6.1.: Režim na střed[21]
Golden ratio mode (režim zlatý řez)
Displej je přerušovanou čarou rozdělen na devět políček po třetinách. V horních dvou průsečících jsou cílové oblasti. Uživatel je naváděn vždy do té oblasti, ke které je obličej blíž. Velikost obličeje se v tomto režimu nevyhodnocuje.
26
6.2. Galerie
Obrázek 6.2.: Režim zlatý řez[21]
6.2. Galerie Galerie je druhá obrazovka dostupná v aplikaci a slouží k zobrazení dříve vyfotografovaných snímků. Galerie je zobrazená vždy na šířku a obrázky se v ní zobrazují na celé ploše displeje.
6.2.1. Ovládání Gesta pro ovládání galerie jsou podobná těm u fotoaparátu. Přejetím přes horní nebo dolní okraj se přejde zpět na obrazovku fotoaparátu. Přejetím přes levý okraj se přejde na předchozí snímek v galerii a přejetím přes pravý okraj se přejde na snímek následující.
6.2.2. Zpětná vazba Nastavení zpětné vazby nelze, narozdíl od fotoaparátu, v galerii měnit. Pokud má aktuálně zobrazená fotografie v sobě uložená data o umístění obličeje, je možné přejetím přes toto místo vyvolat vibrování telefonu. Hlasová zpětná vazba: • “Next picture” - Uživatel přešel na další obrázek. • “Previous picture” - Uživatel přešel na předchozí obrázek. • “No more pictures” - Uživatel se dostal na konec seznamu fotografií.
27
6. Popis funkcionality • “No faces” - Fotografie v sobě nemá uložené informace o umístění obličeje. • “No information” - Fotografie v sobě nemá uložené vůbec žádné informace. • “Time (...) hours (...) minutes, date (...), address (...)” - Po najetí na novou fotografii jsou přečteny informace, které jsou v ní uložené - čas a datum, kdy byla pořízena a adresa, na které se uživatel v té době nacházel.
28
7. Návrh a popis implementace V této kapitole budou popsány zajímavé implementační detaily aplikace.
7.1. Výběr rozlišení náhledu a fotografie Zařízení s operačním systémem Android nepodporují automaticky všechna rozlišení náhledu fotoaparátu a ukládaných fotografií. Pomocí systémových funkcí lze získat výčet podporovaných rozlišení a pak použít to, co je pro danou aplikaci nejvhodnější.
7.1.1. Rozlišení fotografie Strategie, kterou jsem pro výběr rozlišení fotografie zvolil, je následující - rozlišení jsou nejdříve vzestupně seřazena, poté se vypočítá poměr stran displeje. Poměr stran fotografie by měl být stejný jako poměr stran displeje, aby pak fotografie v galerii vyplňovala celou plochu displeje. Poměr displeje je reprezentován desetinným číslem. Pro porovnávání používám toleranci (0,17), aby byly do výběru zahrnuty i poměry, které mají k žádanému poměru velmi blízko. Pokud porovnávání skončí úspěšně, je vybráno největší rozlišení s tímto poměrem stran. Když se nepodaří vybrat rozlišení podle poměru, vybere se jednoduše nejvyšší dostupné.
7.1.2. Náhled fotoaparátu Strategie pro náhled je velmi podobná té předešlé. Prioritu má stejné rozlišení jako je rozlišení displeje, poté se bere v úvahu poměr stran. Pokud se i přesto nepodaří vybrat vhodné rozlišení, vezme se nejbližší vyšší a když ani to nefunguje, použije se největší dostupné.
7.2. Režimy fotografie Jak již bylo zmíněno v kapitole Popis funkcionality (podsekce 6.1.3), aplikace umožňuje pořizovat snímky ve dvou režimech - na střed a zlatý řez. Jako vzor pro třídy, které obsluhují konkrétní režimy, jsem se rozhodl vytvořit interface. Oba režimy implementující tento interface musí splňovat několik požadavků. Funkce drawOverlay je volaná při vytváření náhledu. Třída, která tuto funkci implementuje dostane k dispozici Canvas 1 plochy nad náhledem a má za úkol do ní vykreslit pomocné linky. Dále je zde funkce checkFacePosition, která přijímá pozici obličeje a rozlišení obrazovky. Uvnitř této funkce 1
Třída, která v Javě funguje jako kreslící plátno.
29
7. Návrh a popis implementace se pak vyhodnotí, jestli obličej je nebo není v cílové oblasti, a také se zde volají funkce, které mají za úkol poskytovat uživateli zpětnou vazbu. Poslední funkcí je getStringResId. Tato funkce vrací ID řetězce, který obsahuje název režimu. Algoritmus 7.1 Interface, který oba módy implementují 1 2 3 4
blic interface Mode { public void drawOverlay(Canvas canvas); public void checkFacePosition(Rect face, int width, int height); public int getStringResId();
5
7.3. Vícevrstvý náhled Při implementaci hlavní obrazovky, kde je zobrazen náhled fotografované scény, jsem narazil na jeden zajímavý problém - jak zobrazit náhled fotoaparátu a zároveň ho překrýt vrstvou, která ukazuje cílové oblasti pro fotografování portrétu a čtverec kolem detekovaného obličeje? Původní plán byl kreslit na stejný Canvas, který používá fotoaparát k náhledu. Widget 2 , který jsem na to používal byl SurfaceView. Důvod, proč kreslení na stejnou komponentu s náhledem fotoaparátu nefungovalo, byl jednoduchý. Náhled fotoaparátu se aktualizoval mnohem častěji než vrstva s vodícími linkami, a tak byla právě nakreslená vrstva s vodícími čárami okamžitě překreslena náhledem fotoaparátu. Další možností bylo použít dva widgety SurfaceView položené přes sebe. Na jednom by byl náhled a na druhém vrstva s vodícími linkami. Toto řešení bohužel také nefungovalo. SurfaceView má tu zajímavou vlastnost, že se vykresluje přímo na určité místo na obrazovce, a cokoliv je za ním, už není vidět. Přesně to se stalo v tomto případě. Jedno SurfaceView překrylo druhé, a tím pádem byl vidět buď náhled, nebo vrstva s vodícími linkami. Jako funkční řešení se nakonec ukázalo použití TextureView pro náhled fotoaparátu. Oba widgety se používají stejným způsobem, ale každý primárně za jiným účelem. SurfaceView se používá jako kreslící plátno, kdežto TextureView se používá na zobrazení streamů, jako je např. video. Nejenže se obě view mohli překrývat, ale navíc se použití TextureView ukázalo jako skvělá optimalizace. Vykreslování na TextureView je totiž hardwarově akcelerované přes GPU3 .
2 3
Prvek grafického rozhraní (popisek, tlačítko obrázek, apod.) Výpočetní jednotka pro zpracování grafiky.
30
7.4. Detekce gesta přejetí prstu přes okraj displeje
Obrázek 7.1.: Znázornění rozmístění vrstev[21]
7.4. Detekce gesta přejetí prstu přes okraj displeje Android od své první verze umí rozpoznávat několik základních gest. Patří mezi ně například dvojité poklepání, pomalé tažení prstem, rychlé přejetí prstem, podržení prstu na stejném místě apod. Gesto přejetí prstu přes okraj displeje mezi nimi ale není. V dnešní době vzniká mnoho telefonů, které nemají hmatově rozeznatelný okraj displeje. To může nevidomým činit jisté potíže. U tohoto gesta může nevidomý uživatel telefonu začít s pohybem prstu už na okraji těla telefonu a ve chvíli, kdy najede prstem na displej, telefon gesto zaznamená stejně, jako kdyby jel rovnou od kraje displeje. Aby rozpoznávání v aplikaci fungovalo spolehlivě, nastavil jsem toleranci 10 px kolem okraje displeje, kde může tažení prstem začít a délka tohoto gesta musí být minimálně 50 px.
31
7. Návrh a popis implementace
Obrázek 7.2.: Znázornění gesta[20]
7.5. Určování polohy Pro zjišťování geografické polohy se v Androidu používá systémová služba Location service. Tato služba umožňuje získávat polohu z různých zdrojů, nejčastěji se však používá určování polohy pomocí mobilní sítě a pomocí GPS. Hlavními rozdíly mezi těmito dvěma metodami je energetická náročnost, přesnost a doba, kterou zjišťování polohy zabere. Určování pomocí mobilní sítě je rychlé a relativně málo náročné na energii (spotřeba je stejná jako při běžném používání telefonu), ale je velmi nepřesné (někdy tolerance kolem 1 km). Naopak GPS je na energii náročnější, vyhledání může trvat v zástavbě i několik minut, ale je řádově přesnější (přesnost na jednotky až desítky metrů). Pro zjišťování jsem se rozhodl použít oba zdroje. Nejdříve se použije poslední známá poloha, následně na to se zjistí přibližná poloha z mobilní sítě, a ve chvíli, kdy se podaří najít dostatek satelitů, tak se použije poloha z GPS. Při vyfotografování snímku se na server odešlou souřadnice a služba pro reverzní geocoding vrátí textovou adresu, která je poté uložena v Exif datech uvnitř fotky.
32
7.6. Generování tónů
7.6. Generování tónů Jedním z typů zpětné vazby v této aplikaci je zvuk. Jednotlivé zvukové pokyny jsou sekvence tónů o nějaké frekvenci. Pro generování zvuků jsem vytvořil funkci, která umožňuje nastavení podoby sekvence - délku tónů, délku pauz mezi tóny, frekvenci zvuku a počet opakování sekvence. Vzorky jsou generované pomocí funkce sinus, ve které se musí navíc zohlednit vzorkovací frekvence a výsledná frekvence zvuku. Ukázku algoritmu pro generování tónů naleznete v příloze (kapitola B).
33
8. Testování Účelem testování bylo vybrání modality, která umožňovala zachycení co nejkvalitnějších snímků v co nejkratším čase.
8.1. Detaily testování Po dokončení vývoje bylo mým úkolem aplikaci otestovat s reálnými uživateli. Na testování mi byl ze školy zapůjčen telefon HTC One, který má dostatečný výkon na to, aby aplikace fungovala plynule, především text-to-speech a detekce obličeje. Pro účely testování bylo nutné aplikaci upravit. Stavy aplikace a akce uživatele byly zapisovány do textového souboru v paměti telefonu. Dále bylo na hlavní obrazovku přidáno menu, které nabízí změnu režimu fotografie, přechod do galerie a přepínání typů zpětné vazby. Pak je zde položka, která v logu označí začátek testování a vstupní pole pro zadání jména participanta. Pro názornější předvedení pokynů, které může telefon uživateli dávat, jsem vytvořil další obrazovku, kde bylo možné jeden pokyn za druhým procházet a vyvolávat konkrétní zpětnou vazbu, např. přehrávat jednotlivé hlasové povely nebo provádět sekvence vibrací.
Obrázek 8.1.: Testovací zařízení HTC One Základní parametry HTC One • Operační systém: Android 4.4.2 • Procesor: 1,7 GHz, 4 jádra • GPU: Adreno 320
35
8. Testování • Operační paměť: 2 GB • Vnitřní paměť: 32 GB • Displej: 1080 x 1920 pixelů • Rozlišení fotoaparátu: 4 MPx
8.1.1. Participanti Testování se účastnilo celkem 5 participantů. Žádný z participantů není nevidomý od narození a všichni trpí buď praktickou nebo úplnou nevidomostí. Participant č.1 První participant byl 50letý muž, který trpěl praktickou slepotou. Oslepl před třemi lety. Telefon používá 14 let a od té doby, co je nevidomý, používá na telefonu odečítač obrazovky. Má zkušenosti pouze s tlačítkovými telefony. Na telefonu kromě volání používá také GPS a čtečky na čtení textových a PDF souborů. Před tím, než oslepl, rád fotografoval. Participant č.2 Druhý participant byl 37letý muž s úplnou slepotou. Slepý je 8 let. Telefon používá 16 let, nejčastěji na kalendář, posílání SMS zpráv, nahrávání poznámek na diktafon a na poslouchání MP3 . S fotografováním na telefonu zkušenosti nemá, v minulosti ale zkoušel používat software na rozpoznávání barev. Participant č.3 Muž, kterému je 60 let a trpí úplnou slepotou. Zkušenosti má pouze s tlačítkovým telefonem. Odečítač na něm používá posledních 10 let. S fotografováním nemá vůbec žádné zkušenosti. Nejčastěji na telefonu posílá zprávy a používá diář. Participant č.4 50letá žena, která trpí praktickou slepotou. Telefon používá od roku 1996. Nejčastěji na něm volá, posílá SMS a vyhledává na internetu. Nepoužívá odečítač obrazovky, ale má speciální zvětšovací čočku na brýlích. Fotografování se věnuje ve volném čase. Participant č.5 Páté participantce je 66 let a trpí úplnou slepotou. Telefon používala nejdříve bez odečítače pouze na volání, od roku 2000 má však telefon s odečítačem. Kromě volání a SMS na telefonu používá diář, diktafon a občas na něm poslouchá hudbu. S fotografováním na mobilním telefonu nemá žádné zkušenosti.
36
8.1. Detaily testování
8.1.2. Průběh testování Každý participant absolvoval testování v sedě, na jezdicí židli. Na papíře formátu A4 byl natisknutý portrét osoby, který byl poté přilepený páskou na zeď. Papír byl přibližně ve výšce jednoho metru a participant byl ode zdi vzdálený jeden metr a byl k ní natočený čelem.
8.1.3. Design testování Experiment měl 2x3 within-subjects design. Nezávislé proměnné byl režim fotografie (na střed, zlatý řez) a typ zpětné vazby (hlas, vibrace, hlas + vibrace). Závislé proměnné U testování se vyhodnocovaly dvě veličiny - čas od prvního pokynu aplikace do pořízení snímku a kvalita fotografie. Kvalita fotografie byla stanovena podle dvou hledisek: • na obrazovce je celý obličej • obličej je v cílové oblasti Splnění podmínek je procentuálně ohodnoceno: • 100 % – obličej je v cílové oblasti • 50 % – obličej je na fotografii, ale není v cílové oblasti • 0 % – obličej není na fotografii Přítomnost obličeje na fotografii se hodnotí podle toho, jestli je detekovatelný aplikací, tzn. na fotografii musí být obě oči, nos a ústa.
8.1.4. Typ testování Pro testování byl použit tzv. within- subjects design. To znamená, že každý participant otestoval všech 6 případů. Mezi jednotlivými případy může u participanta docházet k učení., takže např. poslední fotografii může vyfotografovat rychleji a lépe než ty předešlé. Tento efekt vykompenzujeme změnou pořadí testovaných případů u jednotlivých participantů (metoda latinských čtverců). Změna pořadí je znázorněna v následující tabulce. První písmeno označuje režim fotografie – na střed (S), zlatý řez (Z). A druhé písmeno značí použitou zpětnou vazbu – hlas (H), vibrace (V), hlas + vibrace (K)
37
8. Testování
1. 2. 3. 4. 5.
participant participant participant participant participant
1. test SH SV SK ZH ZV
2. test SV SK ZH ZV ZK
3. test SK ZH ZV ZK SH
4. test ZH ZV ZK SH SV
5. test ZV ZK SH SV SK
6. test ZK SH SV SK ZH
Tabulka 8.1.: Pořadí testovaných případů
8.2. Průběh testování V této kapitole se dozvíte, jaké informace participant k testování dostal a jakým způsobem probíhalo samotné testování. Všichni participanti testovali aplikaci ve stejných podmínkách a se stejnými informacemi o aplikaci, aby se co nejvíce zachovala objektivita testování.
8.2.1. Seznámení participanta s aplikací Nejdříve jsem participantovi popsal, jakou aplikaci testuje, a co od něho při testování budu chtít. Jak jsem již zmiňoval na začátku této kapitoly, pro účely testování jsem do aplikace přidal speciální výukové rozhraní. Postupně jsem na něm participantovi předvedl všechny pokyny pro všechny testované typy zpětné vazby a řekl jsem mu, co znamenají, a kdy se používají. Pokud některý z pokynů nezaznamenal, nebo ho chtěl zopakovat, tak jsem ho v aplikaci nechal přehrát znovu. Při výuce vibračních pokynů jsem participantovi dal telefon přímo do ruky, aby vibrace cítil. Nakonec jsem mu vysvětlil, jak se aplikace ovládá a jakým způsobem se pořizují fotografie.
8.2.2. Testování aplikace Před začátkem testování jsem participantovi řekl, aby se fotografii snažil zachytit co nekvalitněji a nejrychleji. Pokud participant neuměl anglicky, tak jsem mu nabídl, že mu budu hlasové pokyny překládat. Poté jsem prostřednictvím menu na hlavní obrazovce nastavil jméno participanta, abych jej v logu odlišil od ostatních participantů. Na začátku každého testu jsem nejprve nastavil testovaný režim a typ zpětné vazby a těsně před předaním telefonu participantovi jsem pomocí menu označil v logu začátek testování. Participantovi jsem dal telefon do ruky a nechal jsem ho vyfotit fotografii. Když měl fotografii hotovou, tak jsem postup opakoval, dokud nebyly otestované všechny případy. Na konci testování jsem participanta nechal vyzkoušet i galerii, aby mi k ní mohl v dotazníku říci svoje výhrady.
8.2.3. Závěrečný dotazník Po testování mi participant zodpověděl několik otázek týkajících se jeho zkušeností s používáním telefonu a s fotografováním. Poté jsem ho nechal aplikaci na stupnici od jedné
38
8.3. Vyhodnocení do pěti ohodnotit, a nakonec jsem ho požádal, aby mi sdělil, co se mu na aplikaci líbí a co by naopak změnil, případně jaké další funkce by do ní ještě přidal. Nyní bude následovat výpis konkrétních otázek, které jsem participantovi kladl.
Obecné informace • Kolik vám je let?
Předchozí zkušenosti • Používáte mobilní telefon? • Máte zkušenosti s dotykovými telefony? • Jaké funkce a aplikace na telefonu nejčastěji používáte? • Máte zkušenosti s fotografováním na mobilním telefonu?
Hodnocení aplikace Hodnocení podle stupnice od jedné do pěti, kde jednička znamená, že participant nemá žádné výhrady a pětka, že je aplikace úplně nepoužitelná. • Jak byste ohodnotil aplikaci jako celek? • Jak byste ohodnotil jednotlivé typy zpětné vazby?
Výhrady k aplikaci • Pracovalo se vám s aplikací dobře? • Co se vám na aplikaci nelíbilo a co by se podle vás dalo vylepšit?
8.3. Vyhodnocení Pro označení režimu fotoaparátu a typu zpětné vazby jsou použity zkratky. První písmeno označuje režim fotografie – na střed (S), zlatý řez (Z). A druhé písmeno značí použitou zpětnou vazbu – hlas (H), vibrace (V), hlas + vibrace (K)
39
8. Testování
8.3.1. Výsledky testů Čas od první detekce obličeje do pořízení fotografie
1. 2. 3. 4. 5.
SH 24 s 39 s 25 s 41 s 44 s 34,6 s
participant participant participant participant participant Průměr
SV 51 s 61 s 57 s 67 s 59 s
SK 134 s 23 s 82 s 12 s 16 s 53,4 s
ZH 10 s 13 s 41 s 22 s 12 s 19,6 s
ZV 29 s 22 s 23 s 26 s 26 s
ZK 4s 4s 6s 8s 17 s 7,8 s
Tabulka 8.2.: Čas od první detekce obličeje do pořízení fotografie
ϳϬ ϱϵ
ϲϬ
ϱϯ͕ϰ
ϱϬ
Ɛ ϰϬ ƐĂ ϯϬ
ϯϰ͕ϲ Ϯϲ ϭϵ͕ϲ
ϮϬ
ϳ͕ϴ
ϭϬ Ϭ
^,
^s
^<
,
s
Graf 1: Průměry časů od první detekce obličeje pořízení fotografie Kvalita fotografií Hodnocení kvality fotografií: • 100 % – obličej je v cílové oblasti • 50 % – obličej je na fotografii, ale není v cílové oblasti • 0 % – obličej není na fotografii
40
<
8.3. Vyhodnocení
1. 2. 3. 4. 5.
participant participant participant participant participant Průměr
SH 100 % 100 % 50 % 50 % 100 % 80 %
SV 50 % 100 % 50 % 50 % 62,5 %
SK 50 % 100 % 100 % 100 % 100 % 90 %
ZH 100 % 100 % 100 % 100 % 100 % 100 %
ZV 50 % 100 % 100 % 100 % 87,5 %
ZK 50 % 100 % 100 % 100 % 0% 70 %
Tabulka 8.3.: Kvalita fotografií
ϭϬϬ
ϭϬϬ ϵϬ ϴϬ
ϵϬ
ϴϳ͕ϱ
ϴϬ ϳϬ
ϳϬ
ϲϮ͕ϱ
ϲϬ й Ăƚ ϱϬ ŝů Ăǀ < ϰϬ ϯϬ ϮϬ ϭϬ Ϭ
^,
^s
^<
,
s
<
Graf 2: Průměrná kvalita fotografií
41
8. Testování Hodnocení aplikace v dotazníku
1. 2. 3. 4. 5.
participant participant participant participant participant Průměr
Hlas 3 2 3 2 1 2,2
Vibrace 4 5 2 1 4 3,2
Hlas + vibrace 2 3 1 2 3 2,2
Aplikace jako celek 2 2 2 1 3 2
Tabulka 8.4.: Hodnocení jednotlivých typů zpětné vazby a aplikace jako celku
8.3.2. Připomínky k aplikaci Největší výhrady měli participanti k pořizování fotografií pomocí poklepání na displej. Často se jim stávalo, že s mobilním telefonem při poklepání pohnuli a fotografie kvůli tomu byla neostrá nebo se obličej na fotce dostal pryč z cílové oblasti. Další problém byl, že obě klepnutí musely být na stejném místě na displeji a v určitém časovém rozmezí po sobě. Dvojité poklepání se u mobilních zařízení celkem běžně používá a vidícím lidem nedělá problémy, ale zde se při testování ukázalo, že pro nevidomé nemusí být úplně vhodné. Návrhy na zlepšení byly celkem dva. Jedna participantka navrhovala místo poklepání fotografovat podržením prstu na displeji s tím, že by se navíc zmenšila aktivní plocha, na kterém by telefon podržení snímal, aby se předešlo nechtěnému vyvolání fotografování. Další participant navrhoval ještě razantnější řešení - aby pořizování fotografií telefon prováděl automaticky ve chvíli, kdy se obličej fotografovaného člověka dostane na správné místo v záběru. Telefon by navíc vydal nějaký signál (tón nebo vibraci), aby uživatel věděl, že v tu chvíli nemá s rukou hýbat. Druhý nejčastější návrh na zlepšení aplikace bylo zpřístupnění nastavení zpětné vazby uživateli. Každý uživatel může totiž mít jiné preference, nebo se může vyskytovat v situaci, kde je vhodnější použít jiný typ zpětné vazby. Nejlépe to je vidět na hodnocení typů zpětné vazby, kde vibrace získávaly hodnocení z obou konců škály. Někteří uživatelé vibrace preferovali nad ostatními způsoby a ostatní je naopak považovali za nejhorší typ zpětné vazby. Jeden z participantů vibrace úplně odmítl testovat, protože pokyny považoval za zmatečné (proto jsou v tabulkách na dvou místech prázdná políčka). Nyní uvedu ostatní zajímavé návrhy, které se neopakovaly mezi participanty více než jednou. Prvním takovýmto návrhem je změna režimu fotografie pomocí natočení displeje buď na šířku, nebo na výšku, což by ulehčilo ovládání hlavně lidem, kteří nemají takové zkušenosti s dotykovými mobilními telefony. Dalším návrhem na zlepšení aplikace bylo vyhodnocování kvality fotografie hned po uložení, zejména ostrosti a kontrastu fotky. Nakonec uvedu připomínky ke galerii. Prvním nápadem bylo přidání funkce slideshow. Pro uživatele by pak bylo snažší procházení více fotografií po sobě. Jako poslední zajímavý návrh na zlepšení uvedu možnost nahrávaní hlasového záznamu k fotografii
42
8.3. Vyhodnocení pomocí diktafonu. Uživatel by díky tomu mohl lépe vystihnout atmosféru daného místa a později by mu to lépe připomnělo, co je na záběru.
43
9. Závěr 9.1. Vyhodnocení výsledků testování Z výsledků testování je vidět, že fotografování v režimu zlatého řezu je dvakrát rychlejší než v režimu na střed. Podle mého názoru je to nejvíce způsobeno dvěma faktory. Prvním je, že aplikace při fotografování na střed hlídá dvě kritéria - umístění obličeje a velikost obličeje, ale režim zlatého řezu pouze jedno - umístění obličeje. Druhá vlastnost, která ovlivňuje rychlost je, že režim zlatého řezu má dvě cílové oblasti. Jako nejlepší typ zpětné vazby se ukázal hlas, který vyniká jak v rychlosti, tak i v kvalitě fotografií. V rychlosti mu může konkurovat pouze použití kombinace hlasu a vibrací v režimu zlatého řezu, kde dosahuje průměrného času 7,6 sekundy. Je to však na úkor kvality, kde dosahuje podprůměrných výsledků (70 %). Vysvětluji si to tím, že vibrace v kombinaci s hlasem můžou uživatele mást. Jako nejhorší typ zpětné vazby se jednoznačně ukázaly vibrace. Nejhorších výsledků dosahují jak v rychlosti, kvalitě tak i v hodnocení od uživatelů. S použitím vibrací může být spojeno několik nedostatků. Prvním je, že vibrace vyžadují, aby si uživatel sekvence pro jednotlivé pokyny zapamatoval, což u hlasu nemusí a druhým nedostatkem je, že se vibrační pokyny mohou překrývat nebo na sebe těsně navazovat, díky čemuž pak uživatel může pokyn lehce zaměnit za jiný. Velmi mě překvapila kvalita všech fotografií. Velká většina jich byla vyfotografována s obličejem v cílové oblasti a jen v několika případech se obličej nepodařilo zachytit. Důvod je podle mě ten, že když uživatel dostává jasné pokyny, tak vlastně nemá důvod fotografovat dříve, než je k tomu aplikací vyzván. Takže i když mu focení může trvat delší dobu, tak nakonec skončí úspěšně.
9.2. Budoucí vývoj aplikace Za nejdůležitější považuji nutnost zjednodušit ovládání aplikace. U fotografování bych zvažoval implementaci automatického zachycení snímku, změnu režimu podle natočení mobilního telefonu a použití slideshow v galerii. Nejtěžším úkolem by bylo vyhodnocování kvality fotografie. Ostrost by se zjišťovala pomocí Fourierovi transformace[22] a osvětlení by se dalo vyhodnocovat pomocí kontrastu fotografie (s použitím kumulativního histogramu)[1]. Oba algoritmy by bylo nutné implementovat v jazyce C, aby byly co nejméně náročné na výkon.
45
Literatura [1] Algorithm to determine image contrast. http://codingexperiments.blogspot.cz/2011/01 /algorithm-to-determine-image-contrast.html. [2] Dalekozrakost - hypermetropie. dalekozrakost-hypermetropie. [3] Krátkozrakost - myopie. myopie.
http://www.klinikazlin.cz/ocni-vady/
http://www.klinikazlin.cz/ocni-vady /kratkozrakost-
[4] Snellenova tabule - kontrola ostrosti zraku. http://www.duovize.cz/spickovatechnika-pro-vase-oci/ snellenova-tabule-kontrola-ostrosti-zraku/. [5] Světloplachost. http://www.celostnimedicina.cz/ svetloplachost.htm. [6] Šeroslepost. http://www.zahady-zdravi.cz/zdravy-zivot/ zdravi/nemoci/seroslepost.
databaze-pro-
[7] Výpadek zorného pole. http://priznaky.vitalion.cz/ vypadek-zorneho-pole/. [8] Zrakové vady docs/zrak/1.htm.
i.
poruchy
barvocitu.
http://www.braillnet.cz/sons/
[9] The google geocoding api, 11 2014. https://developers.google.com/maps/ documentation/geocoding/. [10] Dustin W. Adams, Sri Kurniawan, Hirobu Takagi, Chieko Asakawa, Susumu Harada, and Daisuke Sato. Accessible photo album: Enhancing the photo sharing experience for people with visual impairment. pages 2129–2130. IBM Research Tokyo NBF, Toyosu Canal Front, Toyosu 5-6-52, Koto, Tokyo, Japan; University of California, Santa Cruz, 1156 High Street, Santa Cruz, CA 95064, USA. [11] Robin Brewer, Callie Neylan, Jeffrey P. Bigham, Amy Hurst, Michele A. Burton, and Erin Brady. Crowdsourcing subjective fashion advice using vizwiz: Challanges and opportunities. pages 135–142. UMBC Baltimore, MD 21250 USA; University of Rochester, Rochester, NY 14627 USA. [12] RNDr. Hana Bubeníčková, Ing. Bc. Petr Karásek, and Mgr. Radek Pavlíček. Braillský řádek, 2012. http://pomucky.blindfriendly.cz/ opticke-pomucky.html#311. [13] RNDr. Hana Bubeníčková, Ing. Bc. Petr Karásek, and Mgr. Radek Pavlíček. Kompenzační pomůcky pro uživatele se zrakovým postižením, 2012. http://pomucky.blindfriendly.cz/.
47
Literatura [14] RNDr. Hana Bubeníčková, Ing. Bc. Petr Karásek, and Mgr. Radek Pavlíček. Lupa do ruky s osvětlením, 2012. http://pomucky.blindfriendly.cz/ optickepomucky.html#1122. [15] RNDr. Hana Bubeníčková, Ing. Bc. Petr Karásek, and Mgr. Radek Pavlíček. Lupa nepřenosná stolní clearview, 2012. http://pomucky.blindfriendly.cz/ optickepomucky.html#211. [16] RNDr. Hana Bubeníčková, Ing. Bc. Petr Karásek, and Mgr. Radek Pavlíček. Přenosná lupa maxlupe s vestavěným monitorem, 2012. http://pomucky.blindfriendly.cz/ opticke-pomucky.html#211. [17] Gumenyuk I.S. Correction of myopia with lens, April 2014. http://upload.wikimedia.org/wikipedia/ commons/4/4f/Myopia_color.png (pod licencí Creative Commons Attribution-Share Alike 3.0). [18] Hanjie Ji, Greg Little, Andrew Miller, Rober C. Miller, Robin Miller, Aubrey Tatarowicz, Brandyn White, Samuel White, Jeffrey P. Bigham, Chandrika Jayant, and Tom Yeh. Vizwit: Nearly real-time answers to visual questions. pages 333–342. University of Rochester, Computer Science, Rochester, NY 14627 USA; University of Maryland, Computer Science, College Park, MD 20742 USA. [19] Hanjie Ji, Samuel White, and Jeffrey P. Bigham. Easysnap: Real-time audio feedback for blind photography. pages 1–2. University of Rochester, Computer Science, Rochester, NY 14627 USA. [20] Mike Romkey. 14.03.21 bucktown 72. https://www.flickr.com/photos/mikeromkey /115333308 , pod licencí Creative Commons Attribution http://creativecommons.org/licenses/by/3.0. [21] Agencia Senado. Plenário do senado. https://www.flickr.com/photos/agenciasenado /13540686534/ , pod licencí Creative Commons Attribution-NonCommercial http://creativecommons.org/licenses/by-nc/3.0/. [22] Simon. Is there a way to detect if an image is blurry? http://stackoverflow.com/questions/7765810/is-there-a-way-to-detect-if-an-imageis-blurry. [23] Samuel White, Chandrika Jayant, Hanjie Ji, and Jeffrey P. Bigham. Supporting blind photography. pages 203–210. Computer Science and Engineering, University of Washington, Seattle, Washington 98195; Computer Science, ROC HCI, University of Rochester, Rochester, NY14627.
48
Seznam obrázků 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7.
Znázornění krátkozrakého oka[17] . . . . . . Znázornění dalekozrakého oka [17] . . . . . Snellenova tabule . . . . . . . . . . . . . . . Lupa do ruky s integrovaným osvětlením[14] Stolní lupa ClearView[15] . . . . . . . . . . Přenosní lupa s integrovaným displejem[16] Braillův displej[12] . . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. 3 . 4 . 7 . 9 . 10 . 11 . 12
6.1. Režim na střed[21] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 6.2. Režim zlatý řez[21] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 7.1. Znázornění rozmístění vrstev[21] . . . . . . . . . . . . . . . . . . . . . . . 31 7.2. Znázornění gesta[20] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 8.1. Testovací zařízení HTC One . . . . . . . . . . . . . . . . . . . . . . . . . . 35
49
Seznam tabulek 2.1. Zastoupení zrakových postižení v populaci . . . . . . . . . . . . . . . . . .
6
6.1. Výčet všech zvukových pokynů . . . . . . . . . . . . . . . . . . . . . . . . 24 6.2. Výčet všech vibračních povelů . . . . . . . . . . . . . . . . . . . . . . . . . 25 8.1. 8.2. 8.3. 8.4.
Pořadí testovaných případů . . . . . . . . . . . . . . Čas od první detekce obličeje do pořízení fotografie . Kvalita fotografií . . . . . . . . . . . . . . . . . . . . Hodnocení jednotlivých typů zpětné vazby a aplikace
. . . . . . . . . jako
. . . . . . . . . . . . celku .
. . . .
. . . .
. . . .
. . . .
. . . .
38 40 41 42
51
Seznam algoritmů 4.1. 4.2. 4.3. 4.4. 4.5. 4.6.
Zapnutí detekce obličejů . . Vypnutí detekce obličejů . . Implementace callbacku . . Použití text-to-speech . . . Příklad použítí geocodingu Ukládání Exif do souboru .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
17 17 17 18 19 20
7.1. Interface, který oba módy implementují . . . . . . . . . . . . . . . . . . . 30 B.1. Ukázka generování tónů . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
53
A. Příloha - Přiložené CD A.1. Zdrojový kód původní aplikace A.2. Zdrojový kód aplikace s úpravou pro testování A.3. Instalační balíček s původní aplikací A.4. Instalační balíček s aplikací upravenou pro testování A.5. Bakalářská práce v elektronické podobě
55
57
B. Příloha - Funkce pro generování tónů
B. Příloha - Funkce pro generování tónů Algoritmus B.1 Ukázka generování tónů public static short[] generateSound(int[] pattern, int frequency, int repeat) { int duration = getDuration(pattern, repeat); int samplesCount = duration * SAMPLE_RATE / 1000; double[] samples = new double[samplesCount];
1 2 3 4 5 6
int sampleIndex = 0; for(int r = 0; r < repeat; r++) { for(int patternIndex = 0; patternIndex < pattern.length; patternIndex++) { int patternItem = pattern[patternIndex]; int samplesInPattern = patternItem * SAMPLE_RATE / 1000;
7 8 9 10 11 12 13
if(patternIndex % 2 == 0) { for (int i = 0; i < samplesInPattern; ++i) { samples[sampleIndex++] = Math.sin(2 * Math.PI * i / (SAMPLE_RATE/frequency)); } } else { for (int i = 0; i < samplesInPattern; ++i) { samples[sampleIndex++] = 0; } }
14 15 16 17 18 19 20 21 22 23
}
24
}
25 26
short[] result = new short[samplesCount*2];
27 28
int i = 0; for (final double sample : samples) { final short val = (short) ((sample * 32767)); result[i++] = val; }
29 30 31 32 33 34
return result;
35
}
36
58