VYSOK ´
E U ˇ
CEN´I TECHNICK ´
E V BRN ˇ
E
BRNO UNIVERSITY OF TECHNOLOGY
FAKULTA INFORMA ˇ
CN´ICH TECHNOLOGI´I
´
USTAV PO ˇ
C´ITA ˇ
COV ´
E GRAFIKY A MULTIM ´
EDI´I
FACULTY OF INFORMATION TECHNOLOGY
DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA
ROZPOZN ´
AV ´
AN´I KARET V SYST ´
EMU ANDROID
BAKAL ´
A ˇ
RSK ´
A PR ´
ACE
BACHELOR’S THESISAUTOR PR ´
ACE
MARTIN KLUSO ˇ
N
AUTHOR
VYSOK ´
E U ˇ
CEN´I TECHNICK ´
E V BRN ˇ
E
BRNO UNIVERSITY OF TECHNOLOGYFAKULTA INFORMA ˇ
CN´ICH TECHNOLOGI´I
´
USTAV PO ˇ
C´ITA ˇ
COV ´
E GRAFIKY A MULTIM ´
EDI´I
FACULTY OF INFORMATION TECHNOLOGY
DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA
ROZPOZN ´
AV ´
AN´I KARET V SYST ´
EMU ANDROID
CARDS RECOGNITION USING ANDROID
BAKAL ´
A ˇ
RSK ´
A PR ´
ACE
BACHELOR’S THESISAUTOR PR ´
ACE
MARTIN KLUSO ˇ
N
AUTHOR
VEDOUC´I PR ´
ACE
Ing. ALENA PAVELKOV ´
A
SUPERVISOR
Abstrakt
Pr´ace se zab´yv´a n´avrhem aplikace pro mobiln´ı operaˇcn´ı syst´em Android. Aplikace rozpozn´av´a v obraze z kamery zaˇr´ızen´ı hrac´ı karty a jejich hodnoty. Ulehˇcuje t´ım sˇc´ıt´an´ı bod˚u ve hˇre ˇ
Zol´ıky. Rozpozn´av´an´ı je ˇreˇseno kombinac´ı tˇr´ı kask´adov´ych klasifik´ator˚u. ˇReˇsen´ı zaloˇzen´a na detekci pomoc´ı kl´ıˇcov´ych bod˚u a OCR se uk´azala jako nevhodn´a. V´ysledn´a aplikace detekuje hodnoty karet (kromˇe ˇzol´ıku), nikoliv jejich barvy.
Abstract
This work deals with design of an application for the mobile operating system Android. Application recognize playing cards and their values from image from camera device. Ap-plication helps to count points in game Rummy. Recognition is solved by a combination of three cascaded classifiers. Solutions based on keypoint detection and OCR proved useless. The application detects values of cards (excluding jokers), not their colors.
Kl´ıˇ
cov´
a slova
Android, Java, OpenCV, Tess-two, Klasifik´atory, Karetn´ı hra, ˇZol´ıky, zpracov´an´ı obrazu.
Keywords
Android, Java, OpenCV, Tess-two, Classifier, Card game, Rummy, image processing.
Citace
Martin Klusoˇn: Rozpozn´av´an´ı karet v syst´emu Android, bakal´aˇrsk´a pr´ace, Brno, FIT VUT v Brnˇe, 2015
Rozpozn´
av´
an´ı karet v syst´
emu Android
Prohl´
aˇ
sen´ı
Prohlaˇsuji, ˇze jsem tuto bakal´aˇrskou pr´aci vypracoval samostatnˇe pod veden´ım pan´ı Ing. Aleny Pavelkov´e a uvedl vˇsechny liter´arn´ı prameny a publikace, ze kter´ych jsem ˇcerpal.
. . . . Martin Klusoˇn 21. kvˇetna 2015
Podˇ
ekov´
an´ı
Na tomto m´ıstˇe bych r´ad podˇekoval vˇsem, kteˇr´ı se pod´ıleli na vzniku t´eto pr´ace. V prvn´ı ˇradˇe kamar´adu Bc. Janu N´advorn´ıkovi za inspiraci k n´amˇetu pr´ace. D´ale pak pan´ı Ing. Alenˇe Pavelkov´e za veden´ı a odbornou pomoc. Nakonec vˇsem dalˇs´ım pracovn´ık˚um fakulty, kteˇr´ı mi pˇrispˇeli sv´ymi radami.
c
Martin Klusoˇn, 2015.
Tato pr´ace vznikla jako ˇskoln´ı d´ılo na Vysok´em uˇcen´ı technick´em v Brnˇe, Fakultˇe infor-maˇcn´ıch technologi´ı. Pr´ace je chr´anˇena autorsk´ym z´akonem a jej´ı uˇzit´ı bez udˇelen´ı opr´avnˇen´ı autorem je nez´akonn´e, s v´yjimkou z´akonem definovan´ych pˇr´ıpad˚u.
Obsah
1 Uvod´ 2
2 Rozpozn´av´an´ı hrac´ıch karet v operaˇcn´ım syst´emu Android 3
2.1 Pravidla karetn´ı hry ˇZol´ıky . . . 3
2.2 Operaˇcn´ı syst´em Android . . . 4
2.3 Algoritmy pro detekci objekt˚u v obraze . . . 7
2.4 Knihovny pro zpracov´an´ı obrazu . . . 11
3 N´avrh aplikace 13 3.1 Rozpozn´av´an´ı hodnot karet . . . 13
3.2 Objekty pro spr´avu her . . . 18
4 V´ysledn´a aplikace 19 4.1 Zpracov´an´ı sn´ımk˚u . . . 19
4.2 Uˇzivatelsk´e rozhran´ı . . . 20
4.3 Tr´enov´an´ı kask´adov´ych klasifik´ator˚u . . . 21
4.4 Pˇrehled implementovan´ych tˇr´ıd . . . 22
4.5 Testov´an´ı . . . 23
Kapitola 1
´
Uvod
Mobiln´ı aplikace postupnˇe pronikaj´ı do vˇsech oblast´ı lidsk´eho ˇzivota. Kaˇzd´y majitel chytr´eho telefonu nebo tabletu zn´a aplikace pro komunikaci, sledov´an´ı soci´aln´ıch s´ıt´ı, zobrazov´an´ı webov´ych str´anek, psan´ı pozn´amek, pˇrehr´av´an´ı videa a samozˇrejmˇe i hran´ı her. Ale v kata-loz´ıch dostupn´ych aplikac´ı jsou stovky dalˇs´ıch, kter´e se snaˇz´ı pˇrij´ıt s nov´ym n´apadem nebo inovativn´ım ˇreˇsen´ım. Jejich pˇr´ınos nemus´ı b´yt vˇsem ´uplnˇe zˇrejm´y a ocen´ı jej jen hrstka uˇzivatel˚u. Do t´eto kategorie se pravdˇepodobnˇe zaˇrad´ı i aplikace, jeˇz vznikne v r´amci t´eto pr´ace. Jej´ım c´ılem je vytvoˇrit pom˚ucku pro karetn´ı hru ˇZol´ıky.
Aplikace se nesnaˇz´ı mˇenit l´ety provˇeˇren´a hern´ı pravidla, radit hr´aˇc˚um s jejich strategi´ı nebo jinak zasahovat do pr˚ubˇehu hry. M´ısto toho udrˇzuje informaci o stavu bod˚u a pr˚ubˇeˇzn´em poˇrad´ı hr´aˇc˚u. Aby nebyla jen n´ahradou tuˇzky a pap´ıru, nebo jakousi specializovanou kalku-laˇckou zabalenou do l´ıbiv´eho designu, pˇrin´aˇs´ı dalˇs´ı, z pohledu t´eto pr´ace z´asadn´ı, funkcion-litu. Poˇcet bod˚u, jenˇz hr´aˇci v dan´em kole z´ıskali, se spoˇc´ıt´a automaticky. Postaˇc´ı, aby kaˇzd´y hr´aˇc vyfotil svoje zbyl´e karty. Aplikace pak anal´yzou obrazu najde jednotliv´e karty, urˇc´ı jejich hodnoty a pˇriˇcte odpov´ıdaj´ıc´ı poˇcet bod˚u.
Stˇeˇzejn´ıˇc´ast pr´ace se zab´yv´a poˇc´ıtaˇcov´ym vidˇen´ım. Perspektivn´ım oborem, jehoˇz moˇznosti uplatnˇen´ı se s rozmachem chytr´ych mobiln´ıch zaˇr´ızen´ı zn´asobily. Chytr´e mobiln´ı telefony disponuj´ı dostateˇcn´ym v´ykonem, standardnˇe i fotoapar´atem a d´ıky klesaj´ıc´ı cenˇe postupnˇe nahrazuj´ı obyˇcejn´e mobiln´ı telefony [4].
Kapitola 2
Rozpozn´
av´
an´ı hrac´ıch karet
v operaˇ
cn´ım syst´
emu Android
Pro rozpozn´av´an´ı hrac´ıch karet v obrazu z kamery zaˇr´ızen´ı, za ´uˇcelem zlepˇsen´ı karetn´ı hry, je zapotˇreb´ı skloubit poznatky z v´ıce oblast´ı. Je tˇreba orientovat se v operaˇc´ım syst´emu Android, zn´at r˚uzn´e algoritmy pro detekci objekt˚u, ale tak´e umˇet pravidla karetn´ı hry ˇ
Zol´ıky.
2.1
Pravidla karetn´ı hry ˇ
Zol´ıky
ˇ
Zol´ıky jsou v ˇCesku rozˇs´ıˇren´a karetn´ı hra. Nejˇcastˇeji se hraje v rodinn´em kruhu nebo mezi pˇr´ateli. Jej´ı pravidla se vˇetˇsinou dˇed´ı z generace na generaci. Proto nen´ı divu, ˇze se jejich v´yklad v nˇekter´ych detailech liˇs´ı rodinu od rodiny. Na internetu m˚uˇzeme nal´ezt pravidla na str´ank´ach Jocker clubu ˇCR1, v´yrobce karet Abone2, pˇr´ıpadnˇe v angliˇctinˇe na Rummy.com3. I tady se jednotliv´a pravidla navz´ajem liˇs´ı. Tato pr´ace se ˇr´ıd´ı pravidly uveden´ymi v knize Ofici´aln´ı pravidla karetn´ıch her [5].
Obr´azek 2.1: Pˇr´ıklad francouzsk´ych karet
Hra je urˇcena pro minim´alnˇe dva a maxim´alnˇe ˇsest hr´aˇc˚u. Pouˇz´ıvaj´ı se dva bal´ıˇcky francouzsk´ych karet. Ve hˇre je tedy kaˇzd´a karta pr´avˇe dvakr´at. Karty jsou rozdˇeleny do
1
Konkr´etn´ı znˇen´ı pravidel:http://www.clubjoker.cz/pravidlajoker.htm
2
Konkr´etn´ı znˇen´ı pravidel:http://www.reklamnikarty.cz/pravidla_zoliky.htm
3Konkr´etn´ı znˇen´ı pravidel:
ˇ
ctyˇr barev: piky, kˇr´ıˇze, srdce a k´ary. V kaˇzd´e barvˇe se vyskytuj´ı karty v hodnot´ach: 2 aˇz 10, Kluk (J), D´ama (Q), Kr´al (K) a Eso (A). V bal´ıˇcku jsou jeˇstˇe dva ˇzol´ıky. Na obr´azku 2.1je zleva kˇr´ıˇzov´a trojka, listov´a dev´ıtka, k´arov´a d´ama a ˇcerven´e eso.
Hra se sest´av´a z nˇekolika sehr´avek, kter´e se opakuj´ı. Sehr´avka zaˇc´ın´a rozd´an´ım karet a konˇc´ı, kdyˇz nˇekter´y z hr´aˇc˚u odhod´ı posledn´ı kartu z ruky rubem vzh˚uru na odkl´adac´ı bal´ıˇcek, nebo-li zavˇre. Hr´aˇc, kter´y sehr´avku zavˇrel, je v´ıtˇez a nepˇripisuje si ˇz´adn´e trestn´e body. Ostatn´ı hr´aˇci si pˇrip´ıˇs´ı tolik trestn´ych bod˚u, kolik odpov´ıd´a souˇctu hodnot karet, kter´e jim zbyly v ruce. V jednoduˇsˇs´ı variantˇe pouze jejich poˇcet. Hodnoty jednotliv´ych karet jsou v tabulce 2.1.
Karta 2 3 4 5 6 7 8 9 10 J Q K A Zol´ˇ ık
Hodnota 2 3 4 5 6 7 8 9 10 10 10 10 11 15
Alternativn´ı hodnota – – – – – – – – – – – – 1 20
Tabulka 2.1: Hodnoty jednotliv´ych karet
Hra konˇc´ı po posledn´ı sehr´avce. Celkov´ym v´ıtˇezem se stane hr´aˇc, jenˇz m´a nejmenˇs´ı souˇcet trestn´ych bod˚u ze vˇsech sehr´avek.
2.2
Operaˇ
cn´ı syst´
em Android
Operaˇcn´ı syst´em Android (d´ale jen Android) je open-source operaˇcn´ı syst´em (d´ale jen OS) navrˇzen´y v´yhradnˇe pro mobiln´ı zaˇr´ızen´ı. U jeho zrodu st´ala americk´a internetov´a spoleˇcnost Google, kter´a v roce 2005 koupila spoleˇcnost Android. Prvn´ı telefon, G1 od HTC, se zaˇcal prod´avat v roce 2008. Dalˇs´ı zaˇr´ızen´ı zaloˇzen´a na Androidu se objevily n´asleduj´ıc´ı rok [3]. V roce 2015 pouˇz´ıv´a Android osm z deseti prodan´ych telefon˚u [4].
Aˇckoli se na jeho v´yvoji nejvˇetˇs´ı m´ırou pod´ıl´ı spoleˇcnost Google, ofici´alnˇe je vlastnˇen konsorciem Open Handset Alliance. Open Handset Alliance je sdruˇzen´ı 84 firem4, kter´e podnikaj´ı v oblastech internetu, mobiln´ıch sluˇzeb a technologi´ı.
2.2.1 Architektura operaˇcn´ıho syst´emu Android
Architektura OS Android je zn´azornˇena na obr´azku2.2. D´ale budou podrobnˇeji pˇredstaveny vˇsechny vrstvy postupnˇe od nejniˇzˇs´ı. Teorie vych´az´ı z druh´e kapitoly knihy Learning An-droid [3].
Linuxov´e j´adro se skl´ad´a z ovladaˇc˚u hardware a star´a se o jeho abstrakci pro vyˇsˇs´ı vrstvy. Linux je bezpeˇcn´y a stabiln´ı operaˇcn´ı syst´em, jehoˇz nejniˇzˇs´ı ´uroveˇn je pˇrev´aˇznˇe implementov´ana v jazyce C, coˇz ulehˇcuje nasazen´ı Androidu na r˚uzn´ych zaˇr´ızen´ıch.
Knihovny poskytuj´ı nezbytn´e sluˇzby pro aplikaˇcn´ı vrstvu. Slouˇz´ı k ukl´ad´an´ı dat, pr´aci s grafikou a multimedi´aln´ımi soubory, ˇsifrov´an´ı a zabezpeˇcen´ı dat. Jsou naps´any v jazyce C nebo C++ a nejˇcastˇeji poch´azej´ı od open-source komunit.
Dalvik je ´uˇcelov´y virtu´aln´ı stroj speci´alnˇe navrˇzen´y pro Android a vyvinut´y v Googlu. Vznikl jako n´ahrada za Java Virtual Machine (Java VM). Je efektivnˇejˇs´ı, jelikoˇz je urˇcen v´yhradnˇe pro mobiln´ı zaˇr´ızen´ı. Dalvik je nav´ıc oproti Java VM licencov´an pod open-source licenc´ı Apache License 2.0.
Aplikaˇcn´ı framework obsahuje Java knihovny speci´alnˇe vytvoˇren´e pro Android, kter´e umoˇzˇnuj´ı v´yvoj´aˇr˚um pracovat s prvky OS a dalˇs´ımi aplikacemi.
4
D´ıky aplikac´ım, jeˇz vytv´aˇr´ı v´yvoj´aˇri, mohou uˇzivatel´e naplno vyuˇz´ıvat potenci´al sv´eho zaˇr´ızen´ı. Jsou bud’ pˇredinstalovan´e, nebo si je uˇzivatel m˚uˇze st´ahnout z dostupn´ych obchod˚u s aplikacemi. Nejzn´amˇejˇs´ı z nich, Google Play, provozuje spoleˇcnost Google. Cel´a aplikace je uloˇzena v jednom souboru s pˇr´ıponou apk a skl´ad´a se ze tˇr´ı ˇc´ast´ı. Dalvik executable obsahuje Dalvik bajt k´od. V resources se nach´az´ı doplˇnkov´e soubory jako obr´azky, zvuky, videa nebo XML s daty. Posledn´ı ˇc´ast´ı jsou pˇr´ıpadnˇe nativn´ı knihovny implementovan´e v jazyku C nebo C++.
Aplikace
Aplikační framework
Knihovny
Běhové prostředíLinuxové
jádro
Další Prohlížeč Kalendář Kontakty Telefon SQLite WebKit libc FreeType SSL SGL OpenGL Core libs Surfacemanager frameworkMedia
Dalvik VM Activity
manager managerWindow systemView Notification manager Location manager Resource manager Telephony manager Content
providers managerPackage
Camera Display Keypad driver driver driver driverFlash Audio Binder Power WiFi driver driver driver manegemet
Obr´azek 2.2: Achitektura operaˇcn´ıho syt´emu Android (podle pˇredlohy z knihy [3])
2.2.2 V´yvoj aplikac´ı pro operaˇcn´ı syst´em Android
Pro v´yvoj aplikac´ı je, kromˇe Javy a ofici´aln´ıch n´astroj˚u popsan´ych n´ıˇze, moˇzn´e pouˇz´ıt i nˇekolik dalˇs´ıch framework˚u. Napˇr´ıklad n´astroj PhoneGap5umoˇzˇnuje vytvoˇrit jednoduchou
aplikaci pomoc´ı webov´ych technologi´ı a n´aslednˇe ji exportovat na dalˇs´ı mobiln´ı OS. Takto vznikl´e aplikace maj´ı vˇsak niˇzˇs´ı v´ykon a omezen´e moˇznosti, proto se jim v t´eto pr´aci nebu-deme v´ıce vˇenovat.
Ofici´aln´ı v´yvojov´e n´astroje
Na konci roku 2014 se ofici´aln´ım v´yvojov´ym prostˇred´ım stal program Android Studio6. Android Studio, kter´e je zaloˇzen´e na prostˇred´ı InteliJ, tak nahradilo dosud pouˇz´ıvanou kombinaci v´yvojov´eho prostˇred´ı Eclipse s rozˇs´ıˇren´ım Android Development Tools.
5
V´ıce na:http://phonegap.com/about
6
Android Software Development Kit (Android SDK) je souˇc´ast´ı Android Studia. Odpad´a tak potˇreba jeho samostatn´e instalace.
Ofici´alnˇe je podporov´an Java Development Kit pouze od spoleˇcnosti Oracle7, nicm´enˇe lze pouˇz´ıt i open-source variantu OpenJDK8.
Tak´e je potˇreba m´ıt Android zaˇr´ızen´ı pro testov´an´ı aplikace. To je bud’ moˇzn´e virtuali-zovat pomoc´ı Android Virtual Devices, nebo pˇripojit skuteˇcn´e s vyuˇzit´ım Android Debug Bridge.
Z´akladn´ı stavebn´ı prvky Android aplikace
N´asleduj´ı podstatn´e komponenty, ze kter´ych se m˚uˇze aplikace skl´adat. Teorie vych´az´ı ze ˇ
ctvrt´e kapitoly knihy Learning Android [3].
• Aktivity vytv´aˇr´ı uˇzivatelsk´e rozhran´ı. Jedna aktivita obvykle odpov´ıd´a vˇsem objekt˚um zobrazen´ym na displeji v jeden okamˇzik. Po spuˇstˇen´ı aplikace se zobraz´ı hlavn´ı aktivita (zpravidla menu). Z n´ı je pak moˇzn´e spouˇstˇet dalˇs´ı aktivity s jin´ym obsahem. Stavy, ve kter´ych se m˚uˇze aktivita nach´azet, jsou zn´azornˇeny na obr´azku2.3.
onPause() onStop() onDestroy() onResume() onCreate() onStart() onResume() onCreate() onStart() onResume()
Destroyed
Paused
Running
Stopped
Starting
Obr´azek 2.3: ˇZivotn´ı cyklus activity (podle pˇredlohy z knihy [3])
• Sluˇzba je komponenta, kter´a dlouhodobˇe prov´ad´ı svou ˇcinnost na pozad´ı bez ohledu na dˇen´ı na displeji. Typick´ym pˇr´ıkladem je hudebn´ı pˇrehr´avaˇc. Oproti aktivit´am m´a sluˇzba jen stavy Starting, Running a Destroyed.
• Poskytovatel´e obsahu umoˇzˇnuj´ı aplikac´ım mezi sebou sd´ılet data. Standardnˇe kaˇzd´a aplikace bˇeˇz´ı v uzavˇren´em prostˇred´ı (tzv. sandboxu) a m˚uˇze pˇristupovat jen k vlastn´ım dat˚um. Pˇr´ıkladem vyuˇzit´ı poskytovatele obsahu m˚uˇze b´yt aplikace, jeˇz zobrazuje kon-takty. ˇZ´adn´e kontakty neobsahuje, ale zobrazuje ´udaje, kter´e z´ıskala od poskytovatele kontakt˚u. D´ıky tomu je moˇzn´e ji nahradit jinou aplikac´ı se stejnou funkˇcnost´ı.
• Z´amˇery jsou zpr´avy, kter´e jsou pos´ıl´any mezi hlavn´ımi komponentami syst´emu. Z´amˇery mohou vytv´aˇret aplikace nebo OS. T´ımto zp˚usobem se syst´emem napˇr´ıklad ˇs´ıˇr´ı infor-mace o novˇe pˇr´ıchoz´ı sms zpr´avˇe nebo o aktu´aln´ım stavu baterie. Aplikace, kter´e chtˇej´ı, na z´amˇery pak reaguj´ı. Stˇejnˇe tak aplikace m˚uˇze pomoc´ı z´amˇeru poˇz´adat o zobrazen´ı webov´e str´anky. Str´anku pak zobraz´ı prohl´ıˇzeˇc, kter´y je nastaven jako v´ychoz´ı.
7
V´ıce na:http://www.oracle.com/technetwork/java/index.html
8V´ıce na:
Kombinace r˚uzn´ych poˇct˚u v´yˇse zm´ınˇen´ych komponent dohromady tvoˇr´ı aplikaci. Tyto komponenty maj´ı stejn´y kontext. Kontext aplikace odkazuje na jej´ı prostˇred´ı a na proces, ve kter´em vˇsechny jej´ı komponenty bˇeˇz´ı. Kontext aplikace se vytvoˇr´ı pˇri spuˇstˇen´ı prvn´ı komponenty aplikace a trv´a po celou dobu bˇehu. Aktivity a sluˇzby jsou podtˇr´ıdy kontextu.
2.3
Algoritmy pro detekci objekt˚
u v obraze
V t´eto ˇc´asti budou pˇredstaveny algoritmy pro detekci objekt˚u v obraze.
2.3.1 Detekce pomoc´ı kl´ıˇcov´ych bod˚u
N´asleduj´ıc´ı algoritmy se zab´yvaj´ı hled´an´ım v´yznaˇcn´ych (nebo-li kl´ıˇcov´ych) bod˚u v obraze a jejich popisem pomoc´ı deskriptor˚u. Tyto body pak mohou b´yt pouˇzity napˇr´ıklad pro sledov´an´ı pohybu objekt˚u ve videu, spojov´an´ı v´ıce fotografi´ı do jedn´e panoramatick´e a tak´e pro detekci objekt˚u v obraze.
• Scale-invariant feature transform – SIFT • Speeded-Up Robust Features – SURF
• Features from accelerated segment test – FAST • Oriented FAST and Rotated BRIEF – ORB
Kl´ıˇcov´y bod je definov´an jako zaj´ımav´e m´ısto obrazu. Metody, kter´ymi jsou body v obraze nalezeny, se l´ıˇs´ı dle algoritmu. Nejjednoduˇsˇs´ımi pˇr´ıklady jsou hrany a rohy.
Obr´azek 2.4 ukazuje ´uspˇeˇsnou detekci objektu pomoc´ı algoritmu SURF. Obr´azek je pˇrevzat ze str´anek projektu OpenCV9.
Obr´azek 2.4: Pˇr´ıklad detekce objektu pomoc´ı kl´ıˇcov´ych bod˚u
9
Konkr´etnˇe: http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_ homography.html
2.3.2 Viola-Jones detektor
Tento detektor objekt˚u v obraze pˇredstavili v roce 2001 Paul Viola a Michael Jones. Publi-kovali ho na pˇr´ıkladu detekce obliˇceje, ale lze ho pouˇz´ıvat i na jin´e objekty. Vyznaˇcuje se pˇresnost´ı a rychlost´ı detekce.
Pro natr´enov´an´ı pouˇz´ıv´a algoritmus AdaBoost, kter´y vyb´ır´a nejvhodnˇejˇs´ı pˇr´ıznaky. Jako pˇr´ıznaky slouˇz´ı Haarovy pˇr´ıznaky. Pro jejich v´ypoˇcet se vyuˇz´ıv´a integr´aln´ı obraz. Pro rychl´y pr˚uchod sn´ımkem slouˇz´ı kask´ada klasifik´ator˚u. Tato ˇc´ast pouˇz´ıv´a informace z pˇredn´aˇsek pˇredmˇetu IKR10 a [6].
Haarovy pˇr´ıznaky
Haarovy pˇr´ıznaky jsou jednoduch´e konvoluˇcn´ı filtry. M˚uˇzeme je vidˇet na obr´azku 2.5. Dˇel´ı se na hranov´e, ˇc´arov´e a stˇredov´e. Jejich aplikac´ı na obraz z´ısk´ame odezvy.
Pˇr´ıznaky se postupnˇe aplikuj´ı na cel´y obraz. Velikosti pˇr´ıznak˚u se postupnˇe zvˇetˇsuj´ı aˇz na velikost vstupn´ıho obrazu. Odezva pˇr´ıznaku se vypoˇc´ıt´a jako souˇcet hodnot pixelu v b´ıl´e ˇ
c´asti m´ınus souˇcet pixelu v ˇcern´e ˇc´asti.
Obr´azek 2.5: Haarovy pˇr´ıznaky
Integr´aln´ı obraz
Bˇehem v´ypoˇct˚u odezev Haarov´ych pˇr´ıznak˚u je ˇcasto potˇreba vypoˇc´ıtat sumu hodnot pixel˚u v dan´em obd´eln´ıku. Pro urychlen´ı t´eto operace slouˇz´ı integr´aln´ı obraz.
Integr´aln´ı obraz je jin´a reprezentace obrazu. Kaˇzd´y jeho pixel (se souˇradnicemi x a y) m´a hodnotu rovnou souˇctu vˇsech pixel˚u leˇz´ıc´ıch od nˇej nalevo a nahoru v norm´aln´ım obraze. Tato definice se d´a tak´e zapsat vzorcem (2.1).
ii(x, y) = X
x0≤x,y0≤y
i(x0, y0) (2.1)
Hlavn´ı v´yhodou je, ˇze souˇcet vˇsech hodnot v libovoln´em obd´eln´ıku obrazu je moˇzn´e vypoˇc´ıtat tˇremi aritmetick´ymi operacemi a ˇctyˇrmi pˇr´ıstupy do pamˇeti. Nen´ı potˇreba iterovat pˇres vˇsechny body v´yˇrezu a doba v´ypoˇctu je konstant´ı pro jakoukoliv velikost v´yˇrezu. Viz obr´azek2.6 a na nˇej navazuj´ıc´ı vzorec (2.2) pro v´ypoˇcet plochy obd´eln´ıku S.
10
A
S
B
D
C
Obr´azek 2.6: Integr´aln´ı obraz
S = A + D − C − B (2.2)
AdaBoost
Bˇehem tr´eninku se pro podokno o velikosti 24 × 24 pixel˚u vypoˇc´ıt´a 160 000 Haarov´ych pˇr´ıznak˚u. To je n´asobnˇe v´ıce, neˇz je poˇcet pixel˚u, a i kdyˇz je v´ypoˇcet pˇr´ıznak˚u rychl´y, tak je v´ypoˇcet vˇsech pˇr´ıznak˚u n´aroˇcn´y. Bylo dok´az´ano, ˇze efektivn´ı klasifik´ator m˚uˇze b´yt vytvoˇren i s mal´ym poˇctem Haarov´ych pˇr´ıznak˚u.
Pro nalezen´ı tˇechto pˇr´ıznak˚u se pouˇz´ıv´a algoritmus AdaBoost. AdaBoost (nebo-li Adap-tive Boosting) byl pˇredstaven v roce 1995 Y. Freundem a R. Schapirem. Jeho princip je vytv´aˇret siln´y klasifik´ator z line´arn´ı kombinace nˇekolika slab´ych klasifik´ator˚u. Siln´y klasi-fik´ator mus´ı b´yt ´uspˇeˇsnˇejˇs´ı neˇz vˇsechny slab´e.
K natr´enov´an´ı potˇrebujeme dvˇe sady obr´azk˚u. Prvn´ı sada obsahuje objekt pro detekci a naz´yv´a se pozitivn´ı, druh´a neobsahuje hledan´e objekty, a proto je negativn´ı.
Kask´ada klasik´ator˚u
Kask´adov´y klasifik´ator se snaˇz´ı zkr´atit ˇcas potˇrebn´y k vyhodnocen´ı kaˇzd´eho podokna obrazu. Vyuˇz´ıv´a faktu, ˇze podoken obrazu, kter´a neobsahuj´ı hledan´y objekt, je v´ıc neˇz tˇech, kter´e ho obsahuj´ı.
Skl´ad´a se z v´ıce jednoduch´ych bin´arn´ıch klasifik´ator˚u poskl´adan´ych za sebe. V kaˇzd´em z nich se urˇcuje, zda-li podobraz obsahuje hledan´y objekt ˇci nikoliv. Zam´ıtnut´a podokna se uˇz d´ale nezpracov´avaj´ı, zbyl´a pokraˇcuj´ı do dalˇs´ıch stupˇn˚u kask´ady. Dojde-li podokno aˇz na konec cel´e kask´ady, tak obsahuje hledan´y objekt. Sch´ema kask´adov´eho klasifik´atoru je na obr´azku2.7.
2.3.3 Optick´e rozpozn´av´an´ı znak˚u
Optick´e rozpozn´av´an´ı znak˚u se zab´yv´a z´ısk´av´an´ım text˚u z obrazu. Vˇzila se pro nˇej zkratka OCR (z anglick´eho Optical Character Recognition). Poprv´e bylo pouˇzito, na zaˇc´atku deva-des´at´ych let minul´eho stolet´ı knihovnou ve Velk´e Brit´anii, pro digitalizaci star´ych novi-nov´ych v´ytisku11. Dalˇs´ı teorie t´eto ˇc´asti vych´az´ı z knihy Optical Character Recognition [2].
11
T F
Pozadí
F F
T
klasifikátor 1 klasifikátor 2 klasifikátor 3 vstupní
podokno hledaný objekt
Obr´azek 2.7: Sch´ema kask´adov´eho klasifik´atoru
Z´akladn´ı dˇelen´ı oblast´ı rozpozn´av´an´ı znak˚u
Z´akladn´ı dˇelen´ı OCR je na online a offline. Online prob´ıh´a v momentˇe, kdy je znak ps´an. Jsou tak k dispozici informace o pohybu pera. Naopak offline rozpozn´av´an´ı zpracov´av´a znaky aˇz po jejich vytiˇstˇen´ı ˇci naps´an´ı.
Offline rozpozn´av´an´ı se specializuje bud’ na texty napsan´e nev´azan´ym p´ısmem, nebo na texty psan´e v´azan´ym p´ısmem. Liˇs´ı se t´ım, zda jsou jednotliv´a p´ısmena od sebe oddˇelena, nebo spojena dohromady.
Rozpozn´av´an´ı nev´azan´ych znak˚u
OCR metody jsou zaloˇzeny na automatick´em rozezn´av´an´ı prvk˚u do tˇr´ıd. Tˇr´ıdy jsou p´ısmena, ˇ
c´ıslice a dalˇs´ı speci´aln´ı znaky. Kaˇzd´a tˇr´ıda si na z´akladˇe r˚uzn´ych obdrˇzen´ych vzor˚u vytvoˇr´ı prototyp nebo popis sv´eho znaku. Bˇehem rozpozn´av´an´ı je nezn´am´y znak postupnˇe porovn´an se vˇsemi tˇr´ıdami. Nejlepˇs´ı shoda se vzorem se povaˇzuje za v´ysledek rozpozn´av´an´ı.
Postup rozpozn´av´an´ı
Pr˚ubˇeh rozpozn´av´an´ı znak˚u lze rozdˇelit do n´asleduj´ıc´ıch ˇc´ast´ı.
Skenov´an´ı je poˇr´ızen´ı obrazu, ve kter´em se nach´az´ı text. Zahrnuje taky z´akladn´ı ´upravy jako je pˇreveden´ı obrazu do stupˇn˚u ˇsedi a prahov´an´ı.
Um´ıstˇen´ı a segmetace zahrnuje nalezen´ı pozice, kde se text nach´az´ı. D´ale se text rozdˇel´ı na jednotliv´a slova a slova n´aslednˇe na jednotliv´e znaky.
Pˇredzpracov´an´ı se skl´ad´a z normalizace a vyhlazen´ı znak˚u. Normalizace uprav´ı sklon, velikost a natoˇcen´ı znaku. Vyhlazen´ı zapln´ı pˇr´ıpadn´e mezery ve znaku a z´uˇz´ı ˇs´ıˇrku ˇcar znaku. Pˇr´ıklad pˇredzpracov´an´ı je na obr´azku 2.8.
Extrakce pˇr´ıznak˚u zjiˇst’uje charakteristick´e vlatnosti znaku tak, aby pro nˇej byly jedi-neˇcn´e. Pouˇz´ıv´a se nˇekolik typ˚u pˇr´ıznak˚u:
• rozloˇzen´ı bod˚u kaˇzd´eho znaku,
• transformaˇcn´ı metody – pouˇz´ıvaj´ı popisu kˇrivek, kter´e opisuj´ı okraje znaku, • struktur´aln´ı anal´yza – extrahuje ze znaku jeho charakteristick´e geometrick´e rysy. Klasifikace porovn´av´a kaˇzd´y znak s tˇr´ıdami podle extrahovan´ych pˇr´ıznak˚u. Klasifikace tak´e m˚uˇze vyuˇz´ıvat v´ıce metod:
• porovn´an´ı – identifikuje v´ysledn´y znak podle tˇr´ıdy, se kterou m´a rozpozn´avan´y znak nejlepˇs´ı shodu,
• optim´aln´ı statistick´e klasifik´atory – vypoˇc´ıtaj´ı pro znak pravdˇepodobnosti, s jak´ymi spad´a do vˇsech tˇr´ıd, n´aslednˇe je znak zaˇrazen do tˇr´ıdy s nejvyˇsˇs´ı pravdˇepodobnost´ı, • neuronov´e s´ıtˇe.
Dodateˇcn´e zpracov´an´ı spojuje jednotliv´e rozpoznan´e znaky do slov. Slova pak proch´az´ı detekc´ı chyb podle slovn´ıku nˇejak´eho jazyka, aby mˇela smysl. Rozpozn´av´an´ı samostatn´ych znak˚u je z tohoto d˚uvodu obt´ıˇzn´e.
2.4
Knihovny pro zpracov´
an´ı obrazu
V´yˇse popsan´e algoritmy jsou spolu s dalˇs´ımi implementov´any v knihovn´ach pro pr´aci s obrazem. D´ale budou pˇredstaveny nˇekter´e z nich.
2.4.1 Knihovna OpenCV
Open Source Computer Vision Library je knihovna, kter´a implementuje nˇekolik set algo-ritm˚u poˇc´ıtaˇcov´eho vidˇen´ı. V´yvoj projektu zaˇcala spoleˇcnost Intel v roce 1999. Zdrojov´e k´ody knihovny jsou uvolnˇeny pod licenc´ı BSD. Mezi podporovan´ymi operaˇcn´ımi syst´emy je i Android [1].
Pouˇz´ıt´ı OpenCV v operaˇcn´ım syst´emu Android
Rozhran´ı OpenCV pro Android se naz´yv´a OpenCV4Android a nab´ız´ı dva zp˚usoby pouˇzit´ı12. Prvn´ı variantou je pouˇz´ıt nativn´ı C++ rozhran´ı s pomoc´ı Android NDK. (Android NDK, nebo-li Native Development Kit, je sada n´astroj˚u, kter´e umoˇzˇnuj´ı, aby ˇc´ast aplikace byla naps´ana v jazyce C++.) T´ımto zp˚usobem je moˇzn´e vytvoˇrit pˇrenositeln´y k´od, pˇr´ıpadnˇe pouˇz´ıt jiˇz vyvinut´y program, a zasadit ho do Android aplikace.
Jednoduˇsˇs´ı moˇznost´ı v´yvoje je pouˇzit´ı Java rozhran´ı knihovny. To nab´ız´ı t´emˇeˇr vˇsechny jej´ı moˇznosti. Dan´ı za jednoduchost je pomalejˇs´ı bˇeh aplikace neˇz v prvn´ı variantˇe.
OpenCV4Android nab´ız´ı od verze 2.4.3 aplikaci OpenCV Manager. Ta spravuje potˇrebn´e bin´arn´ı knihovny. Zajiˇst’uje jejich aktualizace a pˇr´ıpadnˇe optimalizace pro konkr´etn´ı hard-ware. Vˇsechny aplikace sd´ılej´ı jen jednu kopii knihoven. V pˇr´ıpadˇe, ˇze OpenCV Manager nen´ı nainstalov´an a nˇejak´a aplikace potˇrebuje k bˇehu OpenCV knihovny, je uˇzivatel k jeho
12
instalaci vyzv´an pˇred jej´ım spuˇstˇen´ım. Instalace prob´ıh´a bud’ automaticky pomoc´ı Google Play, nebo ruˇcnˇe z bal´ıˇcku dostupn´eho na str´ank´ach projektu.
2.4.2 Prostˇredky pro optick´e rozpozn´av´an´ı znak˚u
Implementac´ı OCR algoritm˚u se zab´yv´a cel´a ˇrada knihoven13. Pouˇzit´ı v mobiln´ıch zaˇr´ızen´ıch s Andoridem umoˇzˇnuj´ı n´asleduj´ıc´ı:
• ABBYY Mobile OCR Engine14 je komerˇcn´ı OCR n´astoroj. Sdruˇzuje v´ıce funkc´ı,
napˇr´ıklad slovn´ıky pro pˇreklad rozpoznan´eho textu do dalˇs´ıch jazyk˚u.
• Tesseract15je povaˇzov´ana za nejpˇresnˇejˇs´ı open-source OCR n´astroj. Vyvinula ji spoleˇ
c-nost Hewlett Packard v letech 1984–1994. V roce 2005 ji uvolnila pod open-source licenc´ı a jej´ı v´yvoj pˇrevzala spoleˇcnost Google. V´yvoj vˇsak ustal (posledn´ı aktualizece na str´ance projektu je z dubna 2013).
• Tess-two16je odnoˇz knihovny Tesseract, kter´a pokraˇcuje ve v´yvoji jej´ıho rozhran´ı pro
Android (Tesseract Tools for Android).
13
http://en.wikipedia.org/wiki/Comparison_of_optical_character_recognition_software
14
V´ıce na:http://www.abbyy.com/mobile-ocr
15
V´ıce na:http://code.google.com/p/tesseract-ocr
16
Kapitola 3
N´
avrh aplikace
Celou problematiku aplikace je moˇzn´e abstrahovat na dva t´emˇeˇr nez´avisl´e pod´ukoly. Prvn´ım je vyhled´an´ı hrac´ıch karet v obraze z kamery, a tak´e spr´avn´e rozpozn´an´ı jejich hodnot. D´ale je tˇreba navrhnout uˇzivatelsk´e rozhran´ı, kter´e zobraz´ı v´ysledky a umoˇzn´ı spr´avu her. Tato kapitola se zamˇeˇr´ı pˇredevˇs´ım na prvn´ı podprobl´em.
3.1
Rozpozn´
av´
an´ı hodnot karet
Obecnˇe je moˇzn´e pro detekci objekt˚u v obraze pouˇz´ıt v´ıce zp˚usob˚u. Ovˇsem ne vˇsechny jsou vhodn´e pro ˇreˇsen´ı zadan´eho probl´emu.
3.1.1 Detekce pomoc´ı kl´ıˇcov´ych bod˚u
Problematice detekce zaloˇzen´e na kl´ıˇcov´ych bodech se bl´ıˇze vˇenuje ˇc´ast 2.3.1. V prostˇred´ı operaˇcn´ıho syst´emu Andorid je z knihovny OpenCV dostupn´a funkce ORB. Jej´ı pouˇzit´ı je vidˇet na obr´azku 3.1. V lev´e ˇc´asti obrazovky aplikace je zobrazena pˇredloha (vytvoˇren´a naskenov´an´ım karty), napravo od n´ı pak n´ahled z kamery. V obou ˇc´astech byly detekov´any kl´ıˇcov´e body. Ty, kter´e by si mˇely odpov´ıdat, jsou spojeny zelen´ymi ˇc´arami.
Z obr´azku je patrn´e, ˇze algoritmus dok´aˇze naj´ıt pozici karty v r´amci vstupn´ıho obrazu, ale neum´ı od sebe jednotliv´e karty odliˇsit. Na obr´azku3.1aje zn´azornˇena detekce srdcov´eho kr´ale, ovˇsem podobn´a shoda nastane i s dalˇs´ımi kartami, napˇr´ıklad s kˇr´ıˇzov´ym J na obr´azku 3.1b.
Tento zp˚usob detekce tedy nen´ı vhodn´y a bude nahrazen efektivnˇejˇs´ımi algoritmy.
(a) Srdcov´e K (b) Kˇr´ıˇzov´e J
3.1.2 Kask´adov´y klasifik´ator
Kask´adov´y klasifik´ator, kter´y je podrobnˇeji popsan´y v ˇc´asti2.3.2, umoˇzˇnuje naj´ıt v obraze objekty karet ˇr´adovˇe rychleji neˇz pˇredchoz´ı zp˚usob. V´ysledky detekce jsou vidˇet na obr´azku 3.2. Ve zhruba 15 % rozpozn´av´an´ı dojde k nespr´avn´e detekci (napˇr´ıklad mezi okraji sousedn´ıch karet). M´ıra nepˇresnosti je pˇr´ımo ´umˇern´a poˇctu karet, kter´e se v obraze nach´azej´ı. Pˇresnost ovlivˇnuj´ı i dalˇs´ı faktory jako barva pozad´ı, svˇeteln´e podm´ınky, odlesky nebo vlastn´ı vzhled karty.
D´ale je potˇreba urˇcit bodov´e hodnocen´ı jednotliv´ych karet. To se odv´ıj´ı pouze od hodnoty karty, nikoliv od jej´ı barvy. Proto by urˇcov´an´ı barev karet bylo pl´ytv´an´ı ˇcasem i syst´emov´ymi prostˇredky.
(a) Bezchybn´a detekce
(b) Chybn´a detekce
Urˇcovan´ı hodnoty karty podle znaku
Prvn´ı moˇznost, kter´a se nab´ız´ı, je pouˇzit´ı znaku v lev´em horn´ım rohu karty. Protoˇze znak, kter´y urˇcuje hodnotu karty, je bud’ ˇc´ıslice (dvˇe v pˇr´ıpadˇe des´ıtky), nebo jedno z p´ısmen J, Q, K ˇci A, zd´a se jako nejvhodnˇejˇs´ı pouˇzit´ı OCR algoritm˚u.
Z knihoven pro rozpozn´av´an´ı textu v obraze dostupn´ych pro Android (2.4.2) jsem vyzkouˇsel Tess-two, protoˇze je moˇzn´e ji volnˇe pouˇz´ıvat a je neust´ale vyv´ıjen´a. Knihovna fun-guje dobˇre pro cel´e vˇety, nebo alespoˇn jednotliv´a slova. Spr´avn´e urˇcen´ı samostatnˇe stoj´ıc´ıho znaku j´ı dˇel´a probl´emy. V takov´em pˇr´ıpadˇe je ´uspˇeˇsnost miziv´a. Napˇr´ıklad rozpozn´an´ı slova JOKER probˇehne bez probl´em˚u, ale samostatnˇe stoj´ıc´ı J se detekuje chybnˇe.
Funkci je moˇzn´e nastavit nˇekolik parametr˚u, kter´e by mˇely ovlivnit jej´ı fungov´an´ı. Prvn´ım je nastaven´ı reˇzimu str´anky na hodnotu PSM SINGLE CHAR. D´ale je moˇzn´e para-metrem whitelist explicitnˇe urˇcit mnoˇzinu znak˚u pro rozpozn´an´ı. Tyto parametry vˇsak nevedou ke zjevn´emu zlepˇsen´ı v´ysledk˚u. Nepom˚uˇze ani ´uprava vstupn´ıho obrazu (napˇr´ıklad prahov´an´ım).
Pouˇzit´ı OCR knihovny Tess-two pro rozpozn´av´an´ı znak˚u nevede k ˇreˇsen´ı probl´emu, je tedy tˇreba hledat dalˇs´ı ˇreˇsen´ı.
Urˇcen´ı hodnoty podle poˇctu symbol˚u
Pod´ıv´ame-li se bl´ıˇze na francouzsk´e karty, zjist´ıme, ˇze poˇcet symbol˚u na kaˇzd´e z nich kore-sponduje s jej´ım bodov´ym ohodnocen´ı ve hˇre ˇZol´ıky. Samoˇrejmˇe existuje nˇekolik v´yjimek, o tˇech bude ˇreˇc n´ıˇze.
Pro hled´an´ı symbol˚u jsem natr´enoval dalˇs´ı kask´adov´y klasifik´ator. Jako vstupn´ı obraz mu je pˇred´an pouze v´yˇrez s kartou urˇcen´y pˇredeˇsl´ym klasifik´atorem. Jeho v´ysledky jsou uspokojiv´e a m˚uˇzeme je vidˇet na obr´azku 3.3
Obr´azek 3.3: Symboly rozpoznan´e kask´adov´ym klasifik´atorem
Aby nedoch´azelo k detekci i ˇctveˇrice symbol˚u v roz´ıch karty, je minim´aln´ı velikost hledan´eho symbolu nastavena na pˇetinu ˇs´ıˇrky karty. Pro karty s hodnotou 2 aˇz 10 odpov´ıd´a poˇcet rozpoznan´ych symbol˚u bodov´emu ohodnocen´ı karty.
Karty J, Q a K obsahuj´ı pouze dva symboly, i kdyˇz jejich bodov´a hodnota je 10 bod˚u. Je potˇreba je odliˇsit od karty s hodnotou 2. Jako prvn´ı moˇznost rozliˇsen´ı se nab´ız´ı vyuˇz´ıt vz´ajemnou polohu obou symbol˚u v r´amci karty. Zat´ımco na kartˇe s hodnotou dva jsou
oba symboly um´ıstˇeny osovˇe pod sebou, na kart´ach J, Q, K se nach´azej´ı v protilehl´ych roz´ıch (obˇe karty jsou na obr´azku 3.3). Porovn´an´ım vodorovn´ych souˇradnic obou deteko-van´ych symbol˚u dojde k rozezn´an´ı pouze ve zhruba ˇsesti pokusech z deseti. To je zp˚usobeno zv´yˇsen´ym v´yskytem chybnˇe detekovan´ych symbol˚u u karet J,Q a K.
Druh´ym spoleˇcn´ym rysem karet J, Q, K, kter´y je odliˇsuje od karty s hodnotou 2, je vyobrazen´a postava. Nab´ız´ı se tak moˇznost jej´ı detekce. Rozhodl jsem se vyuˇz´ıt detekci obliˇceje. Knihovna OpenCV standardnˇe nab´ız´ı prostˇredky pro detekci obliˇcej˚u, ale protoˇze jsou obliˇceje postav na kart´ach specifick´e, radˇeji jsem zvolil vlastn´ı kask´adov´y klasifik´ator. Tento, v poˇrad´ı tˇret´ı klasifik´ator, dost´av´a jako vstup horn´ı polovinu detekovan´e karty. Pokud dojde k detekci obliˇceje, je bodov´a hodnota karty zmˇenˇena na 10 bod˚u.
Obr´azek 3.4: Detekce obliˇceje na kartˇe K
Dalˇs´ım moˇzn´ym ˇreˇsen´ım rozpozn´an´ı J, Q, K od karty dva, je pouˇzit´ıˇctveˇrice kask´adov´ych klasifik´ator˚u, kter´e by byly natr´enov´any zvl´aˇst’ pro kaˇzdou barvu (srdce, piky, kˇr´ıˇze a k´ary). V takov´em pˇr´ıpadˇe by se mohl poˇcet chybnˇe detekovan´ych symbol˚u zredukovat na ´uroveˇn, aby bylo moˇzn´e pouˇz´ıt prvn´ı zm´ınˇen´y zp˚usob rozezn´an´ı. Toto ˇreˇsen´ı jsem neimplemntoval, protoˇze by zbyteˇcnˇe nav´yˇsilo poˇcet kask´adov´ych klasifik´ator˚u, a tak prodlouˇzilo ˇcas detekce. Posledn´ı karty, jeˇz je tˇreba rozpoznat, jsou esa a ˇzol´ıky. Na prvn´ı pohled je ˇreˇsen´ı jednoduch´e. Esa obsahuj´ı jeden symbol a ˇzol´ık ˇz´adn´y. Situaci komplikuje pikov´e eso (obr´azek 3.5). To stejnˇe jako ˇzol´ık neobsahuje ˇz´adn´y standardn´ı symbol. Je tedy potˇreba je od sebe odliˇsit. Jako prvn´ı jsem zkusil detektoru symbol˚u nastavit niˇzˇs´ı minim´aln´ı velikost symbol˚u tak, aby detekoval symboly v roz´ıch esa. Pˇri t´eto velikosti ovˇsem dojde k chybn´e detekci i na kartˇe ˇzol´ıku. Nav´ıc podoba karty ˇzol´ıku se liˇs´ı bal´ıˇcek od bal´ıˇcku, tud´ıˇz na nˇem nen´ı moˇzn´e cokoliv detekovat.
Opˇet se nab´ız´ı v´ıce ˇreˇsen´ı. Napˇr´ıklad prohl´asit za podporovan´e pouze bal´ıˇcky karet, kter´e maj´ı na kartˇe ˇzol´ıku n´apis JOKER. N´apis lze rozeznat pomoc´ı OCR algoritm˚u. Esa by pak byly karty s ˇz´adn´ym nebo jedn´ım symbolem. T´ım by se vˇsak z´asadnˇe zmenˇsilo uplatnˇen´ı aplikace a zvˇetˇsila se jej´ı velikost kv˚uli pˇr´ıtomnosti knihony Tess-two (o nezanedbateln´ych 10 MB).
Z v´yˇse zm´ınˇen´ych d˚uvod˚u jsem se rozhodl pro n´asleduj´ıc´ı ˇreˇsen´ı. Karty ˇzol´ık˚u nej-sou v˚ubec zahrnuty do skenov´an´ı. Jejich poˇcet uˇzivatel zad´a pomoc´ı tlaˇc´ıtka v prostˇred´ı skenov´an´ı karet. Bˇehem skenov´an´ı je pak kaˇzd´a karta s maxim´alnˇe jedn´ım detekovan´ym symbolem povaˇzov´ana za eso a pˇriˇrad´ı se j´ı odpov´ıdaj´ıc´ı bodov´a hodnota.
V´ypoˇcet v´ysledn´eho sk´ore
Plocha, kterou je moˇzn´e fotoapar´atem sn´ımat, nen´ı neomezen´a. Karty mus´ı v obraze zauj´ımat dostateˇcn´y prostor, aby bylo moˇzn´e je spr´avnˇe rozpozn´avat. Optim´aln´ı je um´ıstit do n´ahledu fotoapar´atu 1 aˇz 4 karty najednou. V pˇr´ıpadˇe, kdy uˇzivateli zbyde po sehr´avce karet v´ıce, mus´ı prov´est jejich rozpozn´an´ı po etap´ach. V n´ahledu fotoapar´atu se do obrazu prom´ıtaj´ı obrysy karet detekovan´e prvn´ım kask´adov´ym klasifik´atorem. Uˇzivatel tak m´a pˇrehled o tom, kter´e karty pr´avˇe sn´ım´a.
Jako prvn´ı jsem vyzkouˇsel variantu, kde uˇzivatel postupnˇe zachyt´ı sn´ımky vˇsech sv´ych karet. Ty se n´aslednˇe zpracuj´ı v´yˇse popsan´ym zp˚usobem. V´yhodou je mal´a v´ypoˇcetn´ı n´aroˇcnost, protoˇze sn´ımk˚u jsou ˇr´adovˇe jednotky. Naopak v´yraznou nev´yhodou je, ˇze v pˇr´ıpadˇe chybn´e detekce jak´ehokoliv kask´adov´eho klasifik´atoru dojde hned k nespr´avn´emu vyhodno-cen´ı.
Proto jsem navrhl syst´em urˇcen´ı hodnot, kter´y je zaloˇzen´y na statistice. Vych´az´ım z pˇredpokladu, ˇze nadpoloviˇcn´ı vˇetˇsina rozpozn´an´ı probˇehne spr´avnˇe. V momentˇe, kdy uˇzivatel zah´aj´ı sn´ım´an´ı, je kaˇzd´y sn´ımek z kamery zpracov´an v´yˇse popsan´ym zp˚usobem. V´ysledn´e hodnoty kaˇzd´eho sn´ımku se pak ukl´adaj´ı do tabulky. Pot´e, co tabulka obsahuje dostatek dat, jsou z n´ı vybr´any nejpravdˇepodobnˇejˇs´ı v´ysledky.
Tabulka 3.1ve zkr´acen´e podobˇe ukazuje pˇr´ıklad v´ysledk˚u pro rozpozn´an´ı karet s hod-notami Q, 8 a 3. M˚uˇzeme vidˇet, ˇze na sn´ımc´ıch ˇc´ıslo 2, 8 a 10 probˇehla chybn´a detekce karet (karet je detekov´ano v´ıce, respektive m´enˇe neˇz je jejich skuteˇcn´y poˇcet). Na dalˇs´ıch sn´ımc´ıch jsou chybnˇe detekov´any pouze hodnoty nˇekter´ych karet. Napˇr´ıklad na sn´ımku ˇc´ıslo jedna bylo Q rozpozn´ano jako karta dva.
Po dokonˇcen´ı pˇrid´av´an´ı hodnot do tabulky se v kaˇzd´em ˇr´adku spoˇc´ıt´a poˇcet karet. Mezi tˇemito hodnotami se nalezne ta nejˇcastˇejˇs´ı (tak´e oznaˇcovan´a jako modus). Na ˇr´adc´ıch, kter´e obsahuj´ı jin´y neˇz nejˇcastˇejˇs´ı poˇcet karet, doˇslo pravdˇepodobnˇe k chybn´e detekci. Ale protoˇze nelze zpˇetnˇe urˇcit, kter´a z hodnot chyb´ı, nebo naopak pˇreb´yv´a, jsou vˇsechny ˇr´adky s rozd´ıln´ym poˇctem detekovan´ych karet z tabulky odstranˇeny.
Protoˇze nen´ı zaruˇceno stejn´e poˇrad´ı detekovan´ych karet na vˇsech sn´ımc´ıch, seˇrad´ı se hodnoty karet ve vˇsech vˇsech ˇr´adc´ıch od nejmenˇs´ı. Zv´yˇs´ı se tak pravdˇepodobnost, ˇze rozpoz-nan´e hodnoty jedn´e karty budou ve stejn´em sloupci. Tabulka3.2zn´azorˇnuje stav po smaz´an´ı nestandardn´ıch ˇr´adk˚u a seˇrazen´ı hodnot ve zbyl´ych ˇr´adc´ıch.
V posledn´ım kroku se z kaˇzd´eho sloupce vybere takt´eˇz nejˇcastˇejˇs´ı hodnota a ta se povaˇzuje za nejpravdˇepodobnˇejˇs´ı v´ysledek rozpozn´av´an´ı.
poˇrad´ı sn´ımku hodnoty 1 2 8 3 - -2 2 5 8 3 2 3 10 7 4 - -4 10 7 3 - -5 8 10 3 - -6 10 8 3 - -7 3 10 8 - -8 10 2 - - -9 3 8 2 - -10 3 8 3 3
-Tabulka 3.1: Naˇcten´e hodnoty
poˇrad´ı sn´ımku hodnoty
1 2 3 8 3 4 7 10 4 3 7 10 5 3 8 10 6 3 8 10 7 3 8 10 9 2 3 8
Tabulka 3.2: Promazan´e hodnoty
3.2
Objekty pro spr´
avu her
Aplikace, kter´a by umˇela pouze rozpozn´avat a pˇriˇrazovat bodov´e ohodnocen´ı karet, by postr´adala smysl. Uˇzivatel potˇrebuje m´ıt pˇrehled o hˇre. Proto je nutn´e navrhnout dalˇs´ı logick´e prostˇredky, kter´e umoˇzn´ı vyhodnocen´ı stavu hry. Tak´e je tˇreba vytvoˇrit grafick´e uˇzivatelsk´e prostˇred´ı pro interakci s uˇzivatelem.
Uˇzivatel chce prim´arnˇe hr´at hru ˇZol´ıky. Tedy m´ıt skupinu hr´aˇc˚u a postupnˇe jim pˇrid´avat body. Pro tento ´uˇcel bude v aplikaci slouˇzit objekt hra. Ta obsahuje mnoˇzinu hr´aˇc˚u, n´azev a dalˇs´ı dodateˇcn´e informace, kter´ymi jsou datum jej´ıho vytvoˇren´ı, poˇcet hr´aˇc˚u, poˇcet odehran´ych kol (sehr´avek) a statistiky.
Hlavn´ı poloˇzkou hry je objekt hr´aˇce, jehoˇz hlavn´ı poloˇzky jsou jm´eno, sk´ore a poˇcet odehran´ych kol. V kaˇzd´e hˇre mus´ı b´yt alespoˇn dva hr´aˇci. Pokud tomu tak nen´ı, jsou auto-maticky doplnˇeni. Horn´ı hranice poˇctu hr´aˇcu jedn´e hry nen´ı programovˇe omezena, i kdyˇz pravidla pˇripouˇst´ı maxim´alnˇe 6 hr´aˇc˚u. Od omezen´ı jsem upustil po diskuzi s potencion´aln´ımi uˇzivateli aplikace.
Aplikace m˚uˇze obsahovat v´ıce her. Konkr´etnˇe je jejich maxim´aln´ı poˇcet z technick´ych d˚uvod˚u omezen na 100. Pˇredpokl´ad´am, ˇze uˇzivatel´e budou ukl´adat maxim´alnˇe des´ıtky her a tato hranice jim poskytuje dostateˇcnou rezervu. Aplikace samozˇrejmˇe mus´ı obsahovat n´astroje pro vytv´aˇren´ı nov´ych her, jejich maz´an´ı a v´ybˇer aktu´aln´ı.
Vˇsechny v´yˇse popsan´e objekty se po ukonˇcen´ı ukl´adaj´ı do pamˇeti zaˇr´ızen´ı ve form´atu XML, aby bylo moˇzn´e po opˇetovn´em spuˇstˇen´ı obnovit jejich stav.
Tento n´avrh bylo moˇzn´e bez komplikac´ı realizovat. Jeho v´ysledn´a podoba, vˇcetnˇe uˇ ziva-telsk´eho rozhran´ı, bude pˇredstavena v dalˇs´ı kapitole.
Kapitola 4
V´
ysledn´
a aplikace
N´asleduj´ıc´ı kapitola popisuje v´yslednou aplikaci. Bl´ıˇze bude pˇredstavena implementace postup˚u navrˇzen´ych v pˇredeˇsl´e kapitole. Tak´e se bude vˇenovat tr´enov´an´ı pouˇzit´ych kask´ a-dov´ych klasifik´ator˚u a testov´an´ı.
4.1
Zpracov´
an´ı sn´ımk˚
u
Zpracov´an´ı sn´ımk˚u, popsan´e v pˇredeˇsl´e kapitole, se prov´ad´ı pro kaˇzd´y sn´ımek a odehr´av´a se ve funkci onCameraFrame() tˇr´ıdy Camera. Vlastn´ı zpracov´an´ı sm´ınku m´a pak na starost tˇr´ıda Finder. Jej´ı fungov´an´ı je zn´azornˇeno v diagramu na obr´azku 4.1. Bod uloˇzen´ı dat v sobˇe zahrnuje pˇrid´an´ı hodnot do tabulky popsan´e v pˇredch´azej´ıc´ı kapitole.
Vstupní obraz z kamery
Aktivní rozpoznávání hodnot? Detekce karet Výstupní obraz Vykreslení obrysů karet Ořez karty Detekce symbolů Ořez poloviny karty Detekce obličejů Určení hodnoty Uložení hodnoty NE ANO
4.2
Uˇ
zivatelsk´
e rozhran´ı
Po spuˇstˇen´ı aplikace se zobraz´ı posledn´ı vytvoˇren´a hra. Posouv´an´ım obrazovek vlevo se proch´azej´ı vˇsechny dˇr´ıve vytvoˇren´e hry. Posunut´ım vpravo se dostaneme na formul´aˇr pro vytvoˇren´ı nov´e. Cel´e toto sch´ema je implementov´ano jako jedna aktivita (pomoc´ı ViewPager adapteru) a je zn´azornˇeno na obr´azku4.2.
Hra (obr´azky 4.2a a 4.2b) zobrazuje pr˚ubˇeˇzn´e poˇrad´ı hr´aˇc˚u a jejich sk´ore. Po kaˇzd´em kole hry (sehr´avce) si hr´aˇci pˇriˇctou body kliknut´ım na sv´e jm´eno, ˇc´ımˇz spust´ı aktivitu fotoapar´atu (obr´azek4.3). Hr´aˇci jsou ˇrazeni podle sk´ore od nejniˇzˇs´ıho. V pr˚ubˇehu pˇrid´av´an´ı nov´ych v´ysledk˚u jsou hr´aˇci s jiˇz nav´yˇsen´ym sk´ore ˇrazeni pˇred ty zbyl´e. Aplikace tak´e hl´ıd´a, aby si hr´aˇc pˇriˇcetl body po kaˇzd´e sehr´avce pouze jednou.
Formul´aˇr pro vytvoˇren´ı nov´e hry (obr´azek 4.2c) tvoˇr´ı pol´ıˇcko pro zad´an´ı n´azvu hry a pol´ıˇcka pro jm´ena hr´aˇc˚u. Ty jsou na zaˇc´atku pouze dvˇe. Dalˇs´ı se pˇrid´avaj´ı automaticky po kliknut´ı do posledn´ıho pol´ıˇcka. V pˇr´ıpadˇe ˇze nen´ı uloˇzen´a ˇz´adn´a hra, zobraz´ı se tento formul´aˇr jako prvn´ı po spuˇstˇen´ı aplikace.
Na vˇsech obrazovk´ach je moˇzn´e z horn´ı liˇsty zobrazit menu (k vidˇen´ı na obr´azku4.2b). To nab´ız´ı vynulov´an´ı a smaz´an´ı aktu´alnˇe zobrazen´e hry, pˇr´ıpadnˇe zobrazen´ı z´akladn´ıch informac´ı o aplikaci. Na nejpravˇejˇs´ı obrazovce s formul´aˇrem (obr´azek 4.2c) jsou poloˇzky vynulovat a smazat nahrazeny moˇznost´ı vymaz´an´ı formul´aˇre.
Barevnou kombinaci b´ıl´e, ˇcerven´e a ˇcern´e jsem zvolil z´amˇernˇe s odkazem na barvy francouzsk´ych karet.
(a) Rozehran´a hra (b) Novˇe vytvoˇren´a hra (c) Vytvoˇren´ı nov´e hry
Obr´azek 4.2: Uˇzivatelsk´e prostˇred´ı aplikace
Posledn´ı d˚uleˇzitou ˇc´ast´ı uˇzivatelsk´eho rozhran´ı, zn´azornˇenou na obr´azku 4.3, je obra-zovka pro skenov´an´ım karet. Je implementovan´a jako samostatn´a aktivita, kter´a zobrazuje n´ahled z fotoapar´atu doplnˇen´y o obrysy detekovan´ych karet.
Aktivita tak´e obsahuje tˇri tlaˇc´ıtka pro jej´ı ovl´ad´an´ı. Tlaˇc´ıtko Skenovat, v lev´em doln´ım rohu, spust´ı detekci a zaznamen´av´an´ı hodnot karet. O jeho pr˚ubˇehu je uˇzivatel informov´an zmˇenou barvy obrys˚u detekovan´ych karet na ˇcervenou.
Jelikoˇz aplikace nepodporuje skenov´an´ı ˇzol´ık˚u, je v prav´em horn´ım rohu tlaˇc´ıtko pro jejich pˇriˇcten´ı. Kaˇzd´ym stiskem se pˇrid´a jeden ˇzol´ık. Informace o poˇctu jiˇz pˇridan´ych se zobraz´ı v popisku tlaˇc´ıtka.
Aktivita se ukonˇcuje bud’ tlaˇc´ıtkem Hotovo, nebo syst´emov´ym tlaˇc´ıtkem Zpˇet. Obˇe maj´ı stejnou funkˇcnost, ukonˇc´ı aktivitu a vr´at´ı celkov´e dosaˇzen´e sk´ore ze vˇsech skenov´an´ı.
Obr´azek 4.3: Aktivita detekce karet
4.3
Tr´
enov´
an´ı kask´
adov´
ych klasifik´
ator˚
u
Vˇsechny tˇri pouˇzit´e kask´adov´e klasifik´atory byly tr´enov´any stejn´ym postupem. Pouˇzil jsem funkce z knihovny OpenCV. Funkce opencv createsamples vytvoˇr´ı pozitivn´ı vstupn´ı vzorky. Tyto vzorky vzniknou z obr´azk˚u, kter´e obsahuj´ı alespoˇn jeden hledan´y objekt. Polohu vˇsech objekt˚u je nutn´e definovat pomoc´ı souˇradnic x a y. V´ystup funkce opencv createsamples se pˇred´a spoleˇcnˇe se seznamem negativn´ıch vzork˚u funkci opencv traincascade, kter´a prov´ad´ı vlastn´ı tr´enov´an´ı.
4.3.1 Popis datov´ych sad pro tr´enov´an´ı
Hlavn´ım ´ukolem bylo vytvoˇren´ı datov´e sady. Pro klasifik´ator karet bylo tˇreba vyfotit 400 sn´ımk˚u skupin karet na r˚uzn´ych povrˇs´ıch a v nich oznaˇcit polohu kaˇzd´e karty. Vzniklo tak pˇres 1800 pozitivn´ıch vzork˚u. Nejv´ıce se osvˇedˇcilo vytv´aˇret negativn´ı vzorky z tˇech pozi-tivn´ıch, a to zaˇcernˇen´ım oblast´ı, kde se nach´azely hledan´e objekty. Tato ´uprava prob´ıhala z´aroveˇn s oznaˇcov´an´ım poloh objekt˚u.
Stejn´y zp˚usob byl pouˇzit i u datov´e sady pro klasifik´ator symbol˚u. Ze 104 fotografi´ı karet bylo vytvoˇreno t´emˇeˇr 900 pozitivn´ıch vzork˚u.
Ze stejn´ych fotografi´ı vych´az´ı i vzorky pro posledn´ı kask´adov´y klasifik´ator obliˇcej˚u. V nich bylo oznaˇceno vˇsech 24 obliˇcej˚u (jako vstup slouˇz´ı jen poloviny karet, jejichˇz zrca-dlov´y obraz byl odstranˇen). Sadu negativn´ıch vzork˚u posledn´ıho klasifik´atoru tvoˇr´ı foto-grafie vˇsech zbyl´ych karet.
4.4
Pˇ
rehled implementovan´
ych tˇ
r´ıd
Zdrojov´e soubory aplikace jsem rozdˇelil do tˇrech bal´ıˇck˚u. Toto rozdˇelen´ı je moˇzn´e vidˇet na obr´azku4.4. D´ale n´asleduje popis toho, co kter´a tˇr´ıda implementuje.
• MainActivity.java – je hlavn´ı aktivita, kter´a se spouˇst´ı jako prvn´ı. Zobrazuje uˇzivatelsk´e rozhran´ı a star´a se o jeho funkce.
• ViewPagerAdapter.java – sestavuje jednotliv´e obrazovky uˇzivatelsk´eho rozhran´ı. K seznamu jmen hr´aˇc˚u pˇrid´av´a zobrazen´ı statistik.
• GameListAdapter.java – vytv´aˇr´ı poloˇzky seznam˚u hr´aˇc˚u hry.
• NewGameListAdapter.java – vytv´aˇr´ı poloˇzky seznamu jmen hr´aˇc˚u ve formul´aˇri pro vytvoˇren´ı nov´e hry.
• About.java – do aktivity, zobrazuj´ıc´ı informace o aplikaci, doplˇnuje verzi a n´azev programu.
• Player.java – vytv´aˇr´ı objekty hr´aˇc˚u. • Game.java – vytv´aˇr´ı objekty her.
• GameConstruktor.java – zpracov´av´a informace zadan´e do formul´aˇre pro vytvoˇren´ı nov´e hry. Vytv´aˇr´ı nov´e hry.
• Camera.java – implemetuje rozhran´ı pro pˇr´ıstup ke kameˇre zaˇr´ızen´ı. Z´aroveˇn obslu-huje tlaˇc´ıtka aktivity fotoapar´atu.
• Finder.java – prov´ad´ı anal´yzu kaˇzd´eho sn´ımku. Jeho fungov´an´ı je bl´ıˇze pˇredstaveno v ˇc´asti4.1.
cz.kluson.cardcounter
gui gamelogic imageprocessing
MainActivity.java ViewPagerAdapter.java GameListadapter.java NewGameListAdapter.java About.java Player.java Game.java GameConstructor.java Camera.java Finder.java
4.5
Testov´
an´ı
Testov´an´ı prob´ıhalo jak pr˚ubˇeˇznˇe bˇehem v´yvoje, tak i po jeho ukonˇcen´ı, aby bylo moˇzn´e zhodnotit dosaˇzen´e v´ysledky. K testov´an´ı byly pouˇz´ıv´any dva mobiln´ı telefony s operaˇcn´ım syst´emem Android. V tabulce 4.1 jsou uveden´e specifikace jejich parametr˚u. V posledn´ı kolonce tabulky je zaps´ano sk´ore, kter´eho dos´ahly v banchmarku Antutu1, aby si bylo moˇzn´e udˇelat lepˇs´ı pˇredstavu o jejich v´ykonu.
N´azev telefonu Pamˇet RAM Procesor Androidu Antutu
Samsung Galaxy Nexus 1 GB 2x 1,2 GHz, Snapdragon 400 4.4.4 13 246
YotaPhone C9660 2 GB 2x 1,7 GHz, Cortex-A9 4.2.2 27 321
Tabulka 4.1: Telefony pro testov´an´ı
Na obou telefonech bylo postupnˇe provedeno ˇsedes´at rozpozn´av´an´ı. Jako vzorky byly pouˇzity skupiny karet obsahuj´ıc´ı jednu aˇz ˇctyˇri karty. Karty byly um´ıstˇeny na kontrastn´ım podkladu a testov´an´ı prob´ıhalo za dobr´ych svˇeteln´ych podm´ınek. Dobr´ymi svˇeteln´ymi podm´ınkami je m´ınˇeno pˇrirozen´e denn´ı svˇetlo bez pˇr´ım´eho sluneˇcn´ıho z´aˇren´ı, jeˇz by vytv´aˇrelo na povrchu karet odlesky. V´ysledky tohoto testu jsou zobrazeny v tabulce4.2.
Pomˇer chybnˇe rozpoznan´ych karet [%]
Barva karty Galaxy Nexus YotaPhone
1 13 13
2 6 0
3 13 20
4 26 33
Tabulka 4.2: Pomˇer chybnˇe detekovan´ych karet k jejich poˇctu
Z namˇeˇren´ych hodnot vypl´yv´a, ˇze, s v´yjimkou prvn´ı skupiny s jednou kartou, je poˇcet chyb ´umˇern´y poˇctu najednou skenovan´ych karet. V tabulce4.3jsou zaps´any pr˚umˇern´e ˇcasy tvrv´an´ı rozpozn´av´an´ı bˇehem tohoto testu. Z nich je patrn´e, ˇze rozpozn´av´an´ı je v´ypoˇcetnˇe n´aroˇcn´e a prodluˇzuje se ´umˇernˇe poˇctu karet v obraze. Tak´e se potvrdil vyˇsˇs´ı v´ypoˇcetn´ı v´ykon telefonu YotaPhone.
Pr˚umˇern´y ˇcas potˇrebn´y pro detekci [s]
Poˇcet karet Galaxy Nexus YotaPhone
1 9,7 6,4
2 12,6 7,6
3 14,7 8,5
4 15,4 8,8
Tabulka 4.3: Pr˚umˇern´e doby trv´an´ı detekce
1
Bˇehem prvn´ıho testu oba telefony vyhodnotily urˇcitou skupinu vˇzdy shodnˇe ˇspatnˇe. Druh´y test se pokouˇs´ı odhalit karty, kter´e jsou nejˇcastˇeji rozpozn´any chybnˇe a zp˚usobovaly chyby i bˇehem prvn´ıho testu. Postupnˇe byly obˇema telefony naskenov´any vˇsechny karty z bal´ıˇcku. V tabulce 4.4 jsou zaznamen´any poˇcty ˇspatnˇe detekovan´ych karet pro kaˇzdou barvu. Z dat vypl´yv´a, ˇze vˇsechny barvy jsou rozpozn´av´any stejnˇe ´uspˇeˇsnˇe v pr˚umˇeru s jed-nou chybou.
Poˇcet chybnˇe detekovan´ych karet od kaˇzd´e barvy
Barva karty Galaxy Nexus YotaPhone
Srdce 0 1
K´ary 1 1
Piky 1 1
Kˇr´ıˇze 1 1
Tabulka 4.4: Poˇcet chyb v z´avislosti na barvˇe karty
Jako posledn´ı zb´yv´a ovˇeˇrit z´avislost chyb na hodnotˇe karty. U karet s hodnotami 2 aˇz 10 nedoˇslo k ˇz´adn´emu chybn´emu rozpozn´an´ı, proto jsou v tabulce4.5vynech´any. U zbyl´ych karet doˇslo k chybn´emu rozpozn´am´ı alespoˇn na jednom z telefon˚u. Nejh˚uˇre dopadla karta s hodnotou K, ta se rozpoznala ˇspatnˇe celkem tˇrikr´at z osmi pokus˚u.
Poˇcet chybnˇe detekovan´ych karet od kaˇzd´e hodnoty
Hodnota karty Galaxy Nexus YotaPhone
2 0 0 .. . 10 0 0 J 0 1 Q 1 1 K 1 2 A 1 0
Tabulka 4.5: Poˇcet chyb v z´avislosti na hodnotˇe karty
V´ysledky testov´an´ı jsou uspokojiv´e pro vˇetˇsinu hodnot karet. Uk´azalo se, ˇze optim´aln´ı poˇcet pro skenov´an´ı jsou tˇri karty (aplikace je navrˇzen´a maxim´alnˇe pro skupiny ˇctyˇr karet). Tak´e se objevily slabiny, na nˇeˇz by se bylo vhodn´e zamˇeˇrit v pˇr´ıpadˇe dalˇs´ıho v´yvoje.
Kapitola 5
Z´
avˇ
er
C´ılem pr´ace bylo vytvoˇrit aplikaci pro detekci karet v obraze a rozpozn´an´ı jejich hodnot. Vyzkouˇsel jsem nˇekolik ˇreˇsen´ı zaloˇzen´ych na r˚uzn´ych metod´ach zpracov´an´ı obrazu. Od nefunkˇcn´ıch pokus˚u jsem se propracoval aˇz k funkˇc´ımu rozpozn´av´an´ı. Vytvoˇril jsem zp˚usob urˇcov´an´ı hodnot karet z anal´yzy v´ıce po sobˇe n´asleduj´ıc´ıch sn´ımk˚u.
Navrˇzen´e uˇzivatelsk´e rozhran´ı hr´aˇc˚um umoˇzˇnuje vyhodnotit stav hry po kaˇzd´e sehr´avce. Bˇehem jeho implementace jsem se sezn´amil s problematikou programov´an´ı aplikac´ı pro mobiln´ı zaˇr´ızen´ı. Poznal jsem tak jejich v´yhody, ale i omezen´ı.
Aplikaci by zajist´e bylo moˇzn´e rozˇs´ıˇrit o detekci barev karet. Toho by bylo moˇzn´e dos´ahnout napˇr´ıklad vytvoˇren´ım kask´adov´ych klasifik´ator˚u pro symboly vˇsech barev. Pravdˇ e-podobnˇe by se t´ım zjednoduˇsil i probl´em rozpozn´an´ı karet J,Q a K od karty dva. Nicm´enˇe, toto rozˇs´ıˇren´ı by postr´adalo smysl bez pˇrid´an´ı podpory pro dalˇs´ı karetn´ı hru, jeˇz m´a pro karty stejn´ych hodnot a odliˇsn´ych barev r˚uzn´a bodov´a hodnocen´ı.
Literatura
[1] The OpenCV Reference Manual. 2014. Dostupn´e na: <http://docs.opencv.org/opencv2refman.pdf>.
[2] Eikvil, L. OCR – Optical Character Recognition. Oslo: Norsk Regnesentral, 1993. Technical Report, 876.
[3] Gargenta, M. Learning Android. Sebastopol: O’Reilly Media, Inc., 2011. ISBN 978-1-449-39050-1.
[4] Rivera, J. a Meulen, R. van der. Gartner Says Sales of Smartphones Grew 20 Percent in Third Quarter of 2014 [online]. 2014 [cit. 27. 4. 2015]. Dostupn´e na: <http://www.gartner.com/newsroom/id/2944819>.
[5] Svoboda, T. Ofici´aln´ı pravidla karetn´ıch her. Praha: Eminent, 2002. 270–271 s. ISBN 80-7281-116-9.
[6] Viola, P. a Jones, M. Rapid Object Detection using a Boosted Cascade of Simple Features. [b.m.]: Accepted Conference on Computer Vision and Pattern Recognition, 2001.