ˇ ´ UCEN ´I TECHNICKE ´ V BRNE ˇ VYSOKE BRNO UNIVERSITY OF TECHNOLOGY
ˇ ´ICH TECHNOLOGI´I FAKULTA INFORMACN ˇ ´ITACOV ˇ ´ ´ ´I USTAV POC E´ GRAFIKY A MULTIMEDI FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA
´ SLUZBA ˇ WEBOVA - OBRAZOVE´ MOZAIKY
ˇ ´ BAKALA´ RSK A´ PRACE BACHELOR’S THESIS
´ AUTOR PRACE AUTHOR
BRNO 2009
ˇ VOJTECH BEIL
ˇ ´I TECHNICKE ´ V BRNE ˇ VYSOKE´ UCEN BRNO UNIVERSITY OF TECHNOLOGY
ˇ ´ICH TECHNOLOGI´I FAKULTA INFORMACN ˇ ´ITACOV ˇ ´ ´ ´I USTAV POC E´ GRAFIKY A MULTIMEDI FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA
´ SLUZBA ˇ WEBOVA - OBRAZOVE´ MOZAIKY WEB SERVICE - IMAGE MOSAICS
ˇ ´ BAKALA´ RSK A´ PRACE BACHELOR’S THESIS
´ AUTOR PRACE
ˇ VOJTECH BEIL
AUTHOR
´ VEDOUC´I PRACE SUPERVISOR
BRNO 2009
ˇ Ing. MIROSLAV SVUB
Abstrakt Tato pr´ace se zab´ yv´a vytvoˇren´ım obr´azkov´e mozaiky – tedy obr´azku, kter´ y je sloˇzen z dalˇs´ıch tak, aby se z d´alky jevil jako obr´azek jin´ y. D´ale se pr´ace zab´ yv´ a moˇznost´ı pˇrenesen´ı takov´eto programu jako webovou sluˇzbu.
Kl´ıˇ cov´ a slova mozaika, obrazov´a mozaika, JPEG, PNG, datov´ a struktura, knihovna, dynamicky linkovan´a knihovna, DLL, C#, .NET, ASP.NET, sluˇzba, webov´ a sluˇzba, monitorov´ an´ı sluˇzby, datab´ aze, relaˇcn´ı datab´aze, SQL
Abstract This work describes creating mosaic images – images that from distace look like another image. It also explores posibility transfering that program as web service.
Keywords mosaic, images mosaics, JPEG, PNG, data structure, library, dynamic-link library, DLL, C#, .NET, ASP.NET, service, web service, service monitoring, database, relational database, SQL
Citace Vojtˇech Beil: Webov´a sluˇzba - obrazov´e mozaiky, bakal´ aˇrsk´ a pr´ace, Brno, FIT VUT v Brnˇe, 2009
Webov´ a sluˇ zba - obrazov´ e mozaiky Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem tuto bakal´aˇrskou pr´aci vypracoval samostatnˇe pod veden´ım pana Ing. Miˇ roslava Svuba Uvedl jsem vˇsechny liter´arn´ı prameny a publikace, ze kter´ ych jsem ˇcerpal. ....................... Vojtˇech Beil 21. ledna 2009
c Vojtˇech Beil, 2009. ° Tato pr´ ace vznikla jako ˇskoln´ı d´ılo na Vysok´em uˇcen´ı technick´em v Brnˇe, Fakultˇe informaˇ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
3
2 Teorie 2.1 Co je to obraz . . . . . . . . . . . . . 2.2 Manipulace obrazu . . . . . . . . . . 2.2.1 Zmenˇsen´ı, zvˇetˇsen´ı . . . . . . 2.3 Barevn´ y RGB model . . . . . . . . . 2.4 Podobnost dvou obraz˚ u . . . . . . . 2.4.1 Moˇznosti porovn´an´ı . . . . . 2.4.2 Pr˚ umˇern´a barva . . . . . . . 2.4.3 Nalezen´ı vhodn´ ych kandid´ at˚ u 2.5 Algoritmus . . . . . . . . . . . . . . 2.6 Webov´a sluˇzba . . . . . . . . . . . . 2.6.1 Rozdˇelen´ı webov´e sluˇzby . . . 2.7 Technologie . . . . . . . . . . . . . . 2.7.1 C# . . . . . . . . . . . . . . 2.7.2 .NET . . . . . . . . . . . . . 2.7.3 ASP.NET . . . . . . . . . . . 2.7.4 Relaˇcn´ı datab´aze, SQL . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
4 4 4 5 5 6 6 7 7 7 8 9 10 10 11 12 12
3 N´ avrh 3.1 Framework . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Seznam . . . . . . . . . . . . . . . . . . . . 3.1.2 Hash tabulka . . . . . . . . . . . . . . . . . 3.1.3 Seˇrazen´e pole . . . . . . . . . . . . . . . . . 3.2 Knihovny . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Dynamicky linkovan´e knihovny . . . . . . . 3.2.2 Extern´ı knihovny . . . . . . . . . . . . . . . 3.3 Vyhled´avac´ı sluˇzby . . . . . . . . . . . . . . . . . . 3.4 Knihovna pro vytvoˇren´ı mozaiky . . . . . . . . . . 3.5 Optimalizace rychlosti . . . . . . . . . . . . . . . . 3.5.1 Trojrozmˇern´ y hash . . . . . . . . . . . . . . 3.5.2 Pouˇzit´ı seˇrazen´eho pole s omezenou d´elkou 3.6 Optimalizace vyuˇzit´ı pamˇeti . . . . . . . . . . . . . 3.6.1 Droben´ı alokovan´e pamˇeti . . . . . . . . . . 3.6.2 Vyuˇzit´ı hash tabulky . . . . . . . . . . . . . 3.7 C# tˇr´ıda . . . . . . . . . . . . . . . . . . . . . . . 3.8 Formatter . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
13 15 15 15 15 16 16 16 17 17 18 18 18 18 18 19 20 20
1
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
3.9
3.8.1 N´avrh . . . . . . . . . . . 3.8.2 Konstrukce objektu . . . 3.8.3 Naˇcten´ı, uloˇzen´ı . . . . . 3.8.4 Moˇzn´a rozˇs´ıˇren´ı, pouˇzit´ı . Webov´a sluˇzba . . . . . . . . . . 3.9.1 ER diagram . . . . . . . . 3.9.2 Knihovna pro komunikaci 3.9.3 Uˇzivatelsk´e rozhrann´ı . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
20 21 21 21 22 23 24 24
4 Implementace 4.1 Barevn´ y model, barevn´a hloubka . . . . 4.2 Optimalizace ukl´ad´an´ı obr´azku . . . . . 4.3 Optimalizace alokace pamˇeti obr´azku . . 4.4 Obr´azky a vyrovn´avac´ı pamˇet’ . . . . . . 4.5 Pouˇzit´e v´ yvojov´e n´astroje . . . . . . . . 4.5.1 Visual Studio 2005 . . . . . . . . 4.5.2 SQL Server Management Studio 4.6 Pouˇzit´e technologie . . . . . . . . . . . . 4.7 Webov´a sluˇzba . . . . . . . . . . . . . . 4.7.1 Monitorov´an´ı sluˇzby . . . . . . . 4.8 Stahov´an´ı obr´azk˚ u . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
26 26 26 26 27 27 27 28 28 28 29 29
5 V´ ysledky 5.1 Popis programu pro pˇr´ıkazovou ˇr´ adku 5.2 Popis webov´e sluˇzby . . . . . . . . . . 5.3 Uk´azky v´ ystup˚ u . . . . . . . . . . . . 5.4 ASCII art . . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
31 32 32 32 32
. . . . . . . . . .
36 36 36 36 36 37 37 37 37 38 39
. . . .
6 Z´ avˇ er 6.1 Moˇzn´a rozˇs´ıˇren´ı . . . . . . . . . . . . . . . . . 6.1.1 Podpora dalˇs´ıch grafick´ ych form´at˚ u . 6.1.2 Pouˇzit´ı velk´ ych fotografi´ı a jejich ˇc´ ast´ı 6.1.3 Sd´ılen´ı pamˇeti . . . . . . . . . . . . . 6.1.4 Hash obr´azk˚ u . . . . . . . . . . . . . . 6.1.5 Rozestavˇen´ı obr´azk˚ u . . . . . . . . . . 6.1.6 Grafick´e uˇzivatelsk´e rozhran´ı . . . . . 6.1.7 Zobrazen´ı velk´ ych obr´azk˚ u online . . . 6.1.8 Rozˇs´ıˇren´ı webov´e sluˇzby . . . . . . . . 6.2 Z´avˇer . . . . . . . . . . . . . . . . . . . . . .
2
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
Kapitola 1
´ Uvod C´ılem t´eto bakal´aˇrsk´e pr´ace je vytvoˇrit aplikaci, kter´a ze zadan´eho vstupn´ıho obr´azku vytvoˇr´ı tzv. obr´azkovou mozaiku, coˇz je obraz sloˇzen´ y z mnoha mal´ ych obr´azk˚ u, pˇriˇcemˇz z dostateˇcn´e vzd´alenosti je jej´ı jako celek. Kapitola Teorie pojedn´av´a a shrnuje pouˇzit´e postupy, technologie a algoritmy. Dalˇs´ı kapitola se zab´ yv´a n´avrhem aplikace. Obsahuje n´avrh aplikace a poskytuje z´akladn´ı pohled na jednotliv´e ˇc´asti syst´emu. Navrhuje ide´aln´ı pouˇzit´ı konkr´etn´ıch algoritm˚ u a technologi´ı. Obsahuje t´eˇz popis, n´avrh a anal´ yzu webov´e sluˇzby. Zab´ yv´ a se komunikac´ı jednotliv´ ych ˇc´ast´ı vˇcetnˇe vytv´aˇren´ı knihoven, kter´e mohou b´ yt vyuˇzity zvl´aˇst’ a kter´e jsou pak d´ale pouˇz´ıv´any d´ale v projektu. Zab´ yv´ a se t´eˇz pˇrenosem dat mezi z´akladn´ımi stavebn´ımi kameny aplikace. Implementaˇcn´ı kapitola se zab´ yv´ a konkr´etnˇe pouˇzit´ ymi postupy, algoritmy, pouˇzit´ım konkr´etn´ıch datov´ ych struktur. Tak´e obsahuje v´ yˇcet pouˇzit´ ych technologi´ı, program˚ u a v´ yvojov´ ych n´astroj˚ u a jejich verz´ı. P´at´a kapitola nadepsan´a V´ ysledky“ ukazuje nˇekter´e konkr´etn´ı v´ ysledky pr´ace. Ob” sahuje hlavnˇe uk´azky obr´azk˚ u a webov´eho rozhran´ı. Posledn´ı z´avˇereˇcn´a kapitola shrnuje v´ ysledky bakal´ aˇrsk´e pr´ace. Velk´ a ˇc´ ast kapitoly je vˇenov´ana zamyˇslen´ım nad dalˇs´ımi moˇzn´ ymi rozˇs´ıˇren´ımi. Samotn´ y z´avˇer shrnuje vlastn´ı postup pˇri vypracov´av´an´ı, nastiˇ nuje nˇekter´ a technologick´ a rozhodnut´ı a zmiˇ nuje nejzaj´ımavˇejˇs´ı ˇc´asti pr´ace.
Obr´azek 1.1: Pˇr´ıklad v´ ystupu bakal´ aˇrsk´e pr´ace
3
Kapitola 2
Teorie 2.1
Co je to obraz
Obraz je grafick´e vyj´adˇren´ı, kter´e se podob´a nˇejak´emu pˇredmˇetu, fyzick´emu objektu ˇci osobˇe. Dvourozmˇern´e vyj´adˇren´ı m˚ uˇze b´ yt fotografie, obrazovka, pl´atno v kinˇe. Trojrozmˇern´e vyj´adˇren´ı je napˇr. socha, architektonick´e d´ılo. Obraz (dvourozmˇern´ y) je vˇetˇsinou zachyt´ av´ an pomoc´ı optick´eho zaˇr´ızen´ı (fotoapar´at, dalekohled). Obraz m˚ uˇze b´ yt natisknut, namalov´ an ˇci nakreslen.
2.2
Manipulace obrazu
Pˇri manipilaci obrazu z´avis´ı na jeho vyj´adˇren´ı. Obraz (dvourozmˇern´ y) m˚ uˇze b´ yt definov´ an vektory (vektorov´a grafika) nebo jednotliv´ ymi pixely (rastrov´ a grafika). Ve vektorov´e grafice se uchov´av´ a pouze obraz uloˇzen´ ych objekt˚ u, zat´ım co u vektorov´e grafiky lze vlastnosti uloˇzen´ ych objekt˚ u mˇenit. V´ yhodou vektorov´e grafiky je zobrazen´ı objekt˚ u st´ale hladk´e, zvˇetˇsen´ı rastrov´e grafiky je diskr´etn´ı (zubat´e), chybˇej´ıc´ı informaci o obrazu nen´ı odkud ˇcerpat. Obrazem m˚ uˇzeme manipulovat nˇekolika z´akladn´ımi zp˚ usoby: • Zmenˇsen´ı, zvˇetˇsen´ı • Oˇrez obrazu • Rotace obrazu, otoˇcen´ı podle osy • Zkosen´ı, jin´a transformace • Rozmaz´an´ı D´ale pak s obrazem m˚ uˇzeme prov´ adˇet dalˇs´ı pokroˇcil´e operace, napˇr. hled´an´ı hran, OCR (Optical character recognition - rozpozn´av´ an´ı text˚ u), zmˇena barev a dalˇs´ı.
4
2.2.1
Zmenˇ sen´ı, zvˇ etˇ sen´ı
Pˇri zmˇenˇe velikosti obrazu m´ame k dispozici nˇekolik metod, napˇr (zdroj [12]): • interpolace nejbliˇzˇs´ım sousedem • biline´arn´ı interpolace • bikubick´a intepolace Biline´arn´ı interpolace vyuˇz´ıv´ a line´arn´ı interpolaci ve dvou os´ach. Pro v´ ypoˇcet jednoho bodu ve v´ ysledn´em obr´azku je potˇreba zn´at barvy ˇctyˇr okoln´ıch pixel˚ u. Bikubick´a interpolace vyuˇz´ıv´ a polynomi´aln´ı interpolaci tˇret´ıho stupnˇe. V´ ypoˇcet se prov´ad´ı pomoc´ı kubick´eho polynomu. Pro dvojrozmˇern´ y rast je pro spoˇc´ıt´ an´ı potˇreba zn´at ˇsestn´act pixel˚ u.
Originál
Nejbližší soused
Bilineární interpolace
Bikubická interpolace
Obr´azek 2.1: Porovn´ an´ı interpolaˇcn´ıch metod
2.3
Barevn´ y RGB model zelená
červená
modrá
Obr´azek 2.2: Pl´aˇst’ a model RGB krychle
5
barva ˇcerven´a ˇzlut´a zelen´a azurov´a modr´a fialov´a b´ıl´a ˇcern´a
100 100 0 0 0 100 100 0
R % % % % % % % %
0 100 100 100 0 0 100 0
G % % % % % % % %
0 0 0 100 100 100 100 0
B % % % % % % % %
vlnov´ a d´elka 650 550 490 455 430 360
(nm) - 760 - 590 - 760 - 490 - 455 - 430
Tabulka 2.1: Barvy, intenzity sloˇzek a vlnov´ a d´elka ([13]) Barevn´ y RGB (Red – ˇcerven´ a, Green – zelen´a, Blue – modr´a) model je aditivn´ı zp˚ usob m´ıch´an´ı barev. Jde o m´ıch´an´ı vyzaˇrovan´eho svˇetla. Nepotˇrebuje vnˇejˇs´ı svˇeteln´ y zdroj a zobrazuje tedy i ve tmˇe. Aditivn´ı zp˚ usob m´ıch´an´ı barev je zp˚ usob, ve kter´em se jednotliv´e sloˇzky sˇc´ıtaj´ı a vytv´aˇr´ı svˇetlo vyˇsˇs´ı intenzity. Na obr´azku 2.2 je zobrazen pl´aˇst’ RGB krychle (a). Pl´aˇst’, kde kaˇzd´ a prostorov´ a osa pˇredstavuje intenzitu jedn´e barevn´e sloˇzky v bodˇe [0, 0, 0] je barva ˇcern´ a, v bodˇe [1, 1, 1] b´ıl´ a. Prom´ıtnut´ı krychle do prostoru (b) zobrazuje model krychle, kde bod [0, 0, 0] je neviditeln´ y. Na tomto obr´azku jsou naznaˇceny osy.
2.4 2.4.1
Podobnost dvou obraz˚ u Moˇ znosti porovn´ an´ı
Porovn´an´ı dvou obr´azk˚ u, zda se jedn´a o totoˇzn´e ˇci podobn´e, m˚ uˇze b´ yt obt´ıˇzn´e s pˇrihl´ednut´ım k JPEG kompresi, zmˇenˇe velikosti, moˇznosti pˇrid´ an´ı nebo odstranˇen´ı okraj˚ u ˇci pˇrid´ an´ı textu ˇci loga k okraj˚ um obr´azk˚ u (zdroj [11]). Techniky moˇzn´e k pouˇzit´ı k nalezen´ı podobn´ ych obr´azk˚ u: • Hled´an´ı podle barvy: pˇri hled´an´ı je vhodn´e nal´ezt a odstranit zbyteˇcn´e okraje, sn´ıˇzit poˇcet barev v obr´azku, pouˇzit´ı histogramu k identifikov´ an´ı nˇekolika barev ˇci barevn´ ych v´ yznamn´ ych region˚ u, podle kter´ ych se bude porovn´ avat podobnost dvou obraz˚ u. • Podle barevnosti ˇc´ast´ı: porovn´ a se pr˚ umˇern´ a barva nˇekolika (nebo vˇsech) ˇc´ ast´ı obr´azku. • Nalezen´ı hran: Obr´azky se zmenˇs´ı na stejnou velikost, provede se detekce hran a naleznou se kˇrivek. Pot´e se porovnaj´ı kˇrivky podle bl´ızkosti a podobnosti (napˇr. podle polohy, smˇeru, zakˇriven´ı, u ´hlu). • Prov´est rychlou Fourierovu transformaci (na ˇc´ asti obr´azk˚ u) a porovnat podobnost (nˇekolika prvn´ıch) koeficient˚ u.
6
2.4.2
Pr˚ umˇ ern´ a barva
Pro urˇcen´ı pr˚ umˇern´e barvy obrazu je pouˇzit vzorec: Pro obraz o rozmˇerech x × y s body (Rij , Gij , Bij ), kde Rij je intenzita ˇcerven´e sloˇzky (Gij , Bij zelen´e a modr´e) je pouˇzit vzorec: y y y x X x X x X X X X 1 (δR , δG , δB ) = Rij , Gij , Bij (2.1) x·y i=1 j=1
2.4.3
i=1 j=1
i=1 j=1
Nalezen´ı vhodn´ ych kandid´ at˚ u
Podobnost dvou obr´azk˚ u s pr˚ umˇern´ ymi barvami α = (αR , αG , αB ) a β = (βR , βG , βB ) je d´ana rozd´ılem jejich pr˚ umˇern´ ych barev: p = (αR − βR )2 + (αG − βG )2 + (αB − βB )2
(2.2)
´ Ukolem algoritmu je nal´ezt pro vstupn´ı ˇctverec α takov´ y β, aby bylo toto ˇc´ıslo minim´aln´ı.
2.5
Algoritmus Všechny obrázky (a)
(b)
Obrázek, ke kterému se vyhledává v databázi podobný
(c)
Nalezený obrázek
Obr´azek 2.3: Z´akladn´ı princip funkce algoritmu Pro vytvoˇren´ı mozaiky je d˚ uleˇzit´e, aby z vˇetˇs´ı vzd´alenosti se podobala co nejbl´ıˇze p˚ uvodn´ı pˇredloze. V´ ysledn´ y obr´azek by mˇel co nejbl´ıˇze zachovat p˚ uvodn´ı rozloˇzen´ı, p˚ uvodn´ı barevnost a v´ ybˇer mozaikov´ ych vloˇzen´ ych obr´azk˚ u by se mˇel co nejv´ıce podobat pˇredloze. Z´akladem algoritmu je pˇredpoklad, ˇze vstupn´ı obr´azek se rozdˇel´ı do pravideln´e (ˇctvercov´e) mˇr´ıˇzky o urˇcit´ ych rozmˇerech. K tˇemto vstupn´ım ˇctverc˚ um se pak pˇristupuje jednotlivˇe. Pro dan´ y ˇctverec se v datab´azi snaˇz´ı nal´ezt nejpodobnˇejˇs´ı obr´azek, kter´ y by se nam´ısto vstupn´ıho ˇctverce vloˇzil. Nalezen´ y obr´azek nemus´ı b´ yt vhodn´ ych rozmˇer˚ u a nemus´ı m´ıt vhodn´ y pomˇer stran. Vhodn´ y rozmˇer (velikost) lze odstranit zmenˇsen´ım nebo zvˇetˇsen´ım, nespr´avn´ y pomˇer stran
7
oˇr´ıznut´ım (ˇci zmˇenou rozmˇer˚ u bez zachov´ an´ı pomˇeru stran). Dalˇs´ı moˇznost´ı jeˇstˇe m˚ uˇze b´ yt pokraˇcov´an´ı v hled´an´ı a nalezen´ı obr´azku, kter´e tak´e splˇ nuje velikostn´ı krit´eria. Nejpˇresnˇejˇs´ı porovn´an´ı dvou obraz˚ u (vstupn´ıho ˇctverce a hledan´eho obr´azku) je pixel po pixelu, tato operace je ovˇsem velice n´aroˇcn´ a nehledˇe na poˇzadavky na vstupn´ı zaˇr´ızen´ı a pamˇet’. Protoˇze pro z´akladn´ı nahrazen´ı je dostaˇcuj´ıc´ı nal´ezt pr˚ umˇernou barvu (vzorec 2.1) vstupn´ıho ˇctverce a nal´ezt nahrazuj´ıc´ı obr´azek s pr˚ umˇernou barvou tak, aby rozd´ıl (vzorec 2.2) byl minim´aln´ı. Pro zachov´an´ı hran a detail˚ u (protoˇze rozloˇzen´ı barev, hran a dalˇs´ıch informac´ı na obr´azc´ıch m˚ uˇze b´ yt rozd´ıln´e a tud´ıˇz nalezen´ y obr´azek nemus´ı zachov´ avat vˇernˇe pˇredlohu) m˚ uˇze b´ yt vstupn´ı ˇctverec rozdˇelen do dalˇs´ıch ˇctverc˚ u a pro jednotliv´e ˇctverce v pˇredloze a v hledan´em obr´azku znovu provedeno hled´an´ı. Obr´azek 2.3 zobrazuje vlastn´ı fungov´ an´ı algoritmu. (a) Nejdˇr´ıve je nalezen seznam obr´azk˚ u s podobnou pr˚ umˇernou barvou. Tyto obr´azky jsou pak rozdˇeleny pravidelnou mˇr´ıˇzkou do menˇs´ıch ˇctverc˚ u (b) a podle pˇredlohy doch´ az´ı k porovn´ an´ı. T´ımto krokem je opˇet nalezen seznam kandid´atn´ıch obr´azk˚ u. Vˇsechny tyto informace lze pro urychlen´ı pˇrednaˇc´ıtat pˇredem z datab´aze. V posledn´ım bodˇe (c) je nalezen omezen´ y poˇcet kandid´ at˚ u, kter´e se jiˇz podobaj´ı pˇredloze velmi bl´ızce, pro maxim´aln´ı pˇresnost nyn´ı doch´ az´ı k vlastn´ımu naˇcten´ı kandid´atn´ıch obr´azk˚ u a porovn´ an´ı pixel po pixelu. Nalezen´ y obr´azek je pak vloˇzen do v´ ysledn´eho obr´azku na odpov´ıdaj´ıc´ı m´ısto.
2.6
Webov´ a sluˇ zba Klient
Server Prezentační služba
Klient
Databáze Klient Vykonná služba
Obr´azek 2.4: Rozdˇelen´ı aplikace na aplikaci typu klient/server Sluˇzba World Wide Web nab´ız´ı moˇznost prezentovat informace, datab´aze, v´ ysledky v´ ypoˇct˚ u ovlivnˇen´ ych uˇzivatelem nebo ˇc´ımkoliv jin´ ym. Existuje mnoho druh˚ u webov´ ych sluˇzeb od tˇech nejjednoduˇsˇs´ıch aˇz po komplexn´ı. Pˇr´ıkladem webov´e sluˇzby m˚ uˇze b´ yt zobrazen´ı n´ahodn´eho ˇc´ısla ˇci zobrazen´ı statistik z´ıskan´ ych od mnoha mili´on˚ u zkouman´ ych objekt˚ u. Pro pouˇz´ıv´an´ı webov´ ych sluˇzeb je potˇreba internetov´ y prohl´ıˇzeˇc, kter´ y je jiˇz dnes ale standardem pro naprostou vˇetˇsinu uˇzivatelk´ ych poˇc´ıtaˇc˚ u. Internetov´e prohl´ıˇzeˇce podporuj´ıc´ı r˚ uzn´ ych stupeˇ n webov´ ych technologi´ı disponuje nyn´ı st´ale v´ıce mobiln´ıch zaˇr´ızen´ı (telefon˚ u, PDA, ...) Webov´a sluˇzba je sluˇzba typu klient-server (bl´ıˇze pops´ano napˇr. [3]), kdy uˇzivatel pos´ıl´ a na server poˇzadavky, server poˇzadavek zpracuje a poˇsle klientovi odpovˇed’. Komunikaˇcn´ım protokolem m˚ uˇze b´ yt napˇr´ıklad HTTP (viz. [5]).
8
2.6.1
Rozdˇ elen´ı webov´ e sluˇ zby
Nˇekter´e webov´e sluˇzby mohou poskytovat v´ ysledky uˇzivatelsk´ ych dotaz˚ u v re´aln´em ˇcase jin´e poˇzadavky mohou b´ yt natolik ˇcasovˇe n´aroˇcn´e (nebo v´ ysledek m˚ uˇze b´ yt z´avisl´ y na vnejˇs´ıch neovlivniteln´ ych okolnostech) tak, ˇze pouze zprostˇredkov´ avaj´ı zobrazen´ı informac´ı z´ıskan´ ych z napˇr. extern´ıho zdroje. Ve sv´e bakal´aˇrsk´e pr´aci jsem zvolil pouˇzit´ı webov´e sluˇzby, kter´a je rozdˇelena na dvˇe ˇc´asti – prezentaˇcn´ı a v´ ykonnou: 1. Prezentaˇcn´ı – prezentuje v´ ysledky ˇcinnosti v´ ykonn´e ˇc´ asti, zobrazuje seznam poˇzadavk˚ u a jejich stav˚ u, umoˇzn ˇuje pˇrid´ avat nov´e u ´lohy. 2. V´ ykonn´a – zpracov´av´a frontu poˇzadavk˚ u, kv˚ uli zat´ıˇzen´ı serveru, m˚ uˇze zpracov´ avat sluˇzba pouze jeden poˇzadavek. 2.6.1.1
Uˇ zivatelsk´ e rozhrann´ı
K pˇr´ıstupu k webov´ ym sluˇzb´am je pouˇz´ıv´ an internetov´ y prohl´ıˇzeˇc, kter´ y zajiˇst’uje z´akladn´ı uˇzivatelsk´e rozhran´ı. Prezentaˇcn´ım prostˇredkem je jazyk HTML. HTML (HyperText Markup Langage) je znaˇckovac´ı jazyk pouˇz´ıvan´ y pro web. Popisuje strukturu textov´ ych informac´ı v dokumentu – oznaˇcen´ım u ´sek˚ u textu jako napis, odkaz nebo jako odstavec. 2.6.1.2
Sluˇ zba
Sluˇzba je v prostˇred´ı Windows ekvivalentn´ı v´ yznamu d´emona z prostˇred´ı Unix. V multitaskov´em operaˇcn´ım syst´emu je program (proces), kter´ y bˇeˇz´ı na pozad´ı a prov´ ad´ı ˇcinnost. Sluˇzba je vˇetˇsinou nastartov´ana pˇri startu poˇc´ıtaˇce. Sluˇzba m˚ uˇze vykon´ avat v´ ypoˇcet na pozad´ı, m˚ uˇze zpˇr´ıstupˇ novat zaˇr´ızen´ı, m˚ uˇze ˇcekat na vnˇejˇs´ı podmˇet a na ten reagovat. Jako sluˇzba m˚ uˇze b´ yt implementov´ an napˇr. internetov´ y server, kter´ y naslouch´ a na socketu a v pˇr´ıpadˇe poˇzadavku jej zpracuje a poˇsle odpovˇed’. 2.6.1.3
Komunikace
Komunikace mezi uˇzivatelsk´ ym rozhrann´ım a sluˇzbou je ot´azka meziprocesov´e komunikace. Uˇzivatelsk´e rozhrann´ı i sluˇzba bˇeˇz´ıc´ı na pozad´ı jsou aplikace (procesy), kter´e si potˇrebuj´ı vymˇen ˇovat data. Meziprocesov´a komunikace je sada technik pro v´ ymˇenu dat mezi dvˇema nebo v´ıce procesech. Techniky m˚ uˇzeme rozdˇelit na metody: • zas´ıl´an´ı zpr´av • synchronizace • sd´ılen´a pamˇet’ • vol´an´ı vzd´alen´ ych procedur Komunikace mezi procesy m˚ uˇze b´ yt t´eˇz provedena pomoc´ı sd´ılen´e datab´aze (pamˇeti), ke kter´e maj´ı oba procesy pˇr´ıstup. Komunikace pak prob´ıh´ a t´ım, ˇze prvn´ı proces provede u ´pravu (z´apis, aktualizaci, smaz´an´ı) datab´aze (´ uprava jednoho ˇci v´ıce ˇr´ adk˚ u nebo cel´e 9
Proces 1a Proces 2a Proces 1b
Databáze Proces 2b
Proces 1c
Obr´azek 2.5: Meziprocesov´ a komunikace pomoc´ı (relaˇcn´ı) datab´aze tabulky), druh´ y proces pak v dan´ ych intervalech (na vyˇz´ ad´ an´ı uˇzivatele, po urˇcit´e ˇcasov´e dobˇe) sleduje, zda neprobˇehla zmˇena v tabulce. V´ yhodami tohoto ˇreˇsen´ı je pak jednoduchost implementace (mnoho informaˇcn´ıch syst´em˚ u pouˇz´ıv´a jako zdroj dat datab´azi), komunikace mezi procesy je moˇzn´ a i v pˇr´ıpadˇe, kdy jeden proces nen´ı spuˇstˇen. Nev´ yhodou je potˇreba ˇcast´eho dotazov´ an´ı na datab´azi, zda nedoˇslo k nˇejak´e zmˇenˇe.
2.7 2.7.1
Technologie C#
C# je vysoce u ´rovˇ nov´ y objektovˇe orientovan´ y programovac´ı jazyk vyvinut´ y firmou Microsoft spoleˇcnˇe s platformou .NET Framework. C# nab´ız´ı automatick´ y garbage collector. Garbage collector je ˇc´ ast bˇehov´eho prostˇred´ı, kter´a m´a za u ´kol automaticky urˇcit, kter´a ˇc´ ast pamˇeti nen´ı uˇz pouˇz´ıvan´ a, a uvolnit ji pro dalˇs´ı znovupouˇzit´ı. Jazyk m´a objektovˇe orientovanou syntaxi zaloˇzenou na jazyce C++, ale je t´eˇz velmi ovlivnˇen jazykem Java. Prvn´ı verze jazyka C# 1.0 byla vydan´a v roce 2002 spoleˇcnˇe s .NET frameworkem 1.0. Dalˇs´ı verze 2.0 byla vyd´ana v roce 2005. Spoleˇcnˇe s .NET frameworkem 2.0 pˇrin´ aˇs´ı nov´e vlastnosti jako ˇc´asteˇcn´e a statick´e tˇr´ıdy, iter´atory, anonymn´ı metody, nullovateln´e typy a oper´ator koalescence (oper´ator ?? – dva otazn´ıky). Aktu´alnˇe posledn´ı verze 3.0 vyˇsla v roce 2007 spoleˇcnˇe s Frameworkem 3.5. Tato nov´ a verze pˇrin´aˇs´ı LINQ, pomoc´ı ˇcehoˇz se lze pt´at na objekty reprezentuj´ıc´ı datab´aze. D´ale tato nov´a verze pˇrin´aˇs´ı jednoduˇsˇs´ı lambda v´ yrazy, anonymn´ı tˇr´ıdy a dalˇs´ı nov´e vlastnosti. Tyto zmˇeny nevyˇzaduj´ı zmˇenu podkladov´eho CIL, takˇze s poˇzadovan´ ymi knihovnami mohou bˇeˇzet i na pˇredchoz´ım frameworku 2.0. 2.7.1.1
Tˇ r´ıdy
V objektovˇe orientovan´em programov´ an´ı je tˇr´ıda z´akladem vytv´aˇren´ı objekt˚ u. Tˇr´ıda definuje vlastnosti a metody. Vlastnosti mohou odliˇsovat jednotliv´e objekty. Tˇr´ıda je jak´ ysi bal´ıˇcek metadat obsahuj´ıc´ı pravidla, podle kter´ ych jsou tvoˇreny objekty a jak se objekty chovaj´ı. Objekty jsou naz´ yv´ any instancemi tˇr´ıd. Jazyk C# nab´ız´ı jednoduchou dˇediˇcnost.
10
2.7.1.2
Atributy
[FormatterTable("Keyword")] public class Keyword : Formatter { [FormatterAttribute("Name", FormatterAttribute.FormatterSqlType.SQL STRING)] public string Name; [FormatterAttribute("Description", FormatterAttribute.FormatterSqlType.SQL STRING)] public string Description;
public Keyword() { } } V jazyce C# je moˇzn´e urˇcit´ ym entit´ am pˇriˇradit znaˇcky“ (atributy) ke specifikov´ an´ı ” dodateˇcn´ ych informac´ı. Tyto informace mohou b´ yt pak za bˇehu z´ısk´ any pomoc´ı tzv. reflexion. Atributy jsou syst´emov´e i uˇzivatelsk´e. Program´ator m˚ uˇze definovat vlastn´ı a ty pouˇz´ıvat. Uk´azka z´apisu atribut˚ u je k dispozici v u ´seku zdrojov´eho k´odu uveden´eho v´ yˇse. Atributy mohou b´ yt pouˇzity k r˚ uzn´ ym u ´ˇcel˚ um. Jednou z moˇznost´ı je propojen´ı k´odu C# s dynamicky linkovanou knihovnou DLL (pomoc´ı atributu DllImport). Pomoc´ı atribut˚ u MarshalAs lze t´eˇz specifikovat, jak´ ym zp˚ usobem bude s parametry funkc´ı nakl´ad´ ano pˇri vol´an´ı funkc´ı z extern´ıch DLL knihoven.
2.7.2
.NET
Microsoft .NET Framework je soubor technologi´ı v softwarov´ ych produktech, kter´ y je dostupn´ y pro web, Windows i Pocket PC. Framework pokr´ yv´a mnoho potˇreb pro programov´ an´ı napˇr. uˇzivatelsk´e rozhrann´ı, pˇr´ıstup k dat˚ um, pˇripojov´an´ı k datab´az´ım, kryptografie, v´ yvoj pro web, numerick´e algoritmy a s´ıt’ovou komunikaci. Programy napsan´e pomoc´ı .NET frameworku jsou spouˇstˇeny v Common Language Runtime (CLR) (zdroj citemsdn:clr), na kter´em bˇeˇz´ı zvl´aˇstn´ı druh bytek´ odu. Zdrojov´ y k´od m˚ uˇze b´ yt ps´an v C#, Visual Basicu .NET ˇci dalˇs´ıch a bˇehem kompilace je zkompilov´an do CIL k´odu (Common Intermediate Language). Pˇri bˇehu programu je CIL k´odu pˇreveden do nativn´ıho k´odu operaˇcn´ıho syst´emu. Pro urychlen´ı m˚ uˇze b´ yt pro urychlen´ı zkompilov´an do nativn´ıho k´odu pˇred samotn´ ym bˇehem ve zvl´aˇstn´ım kroku. Tato technika umoˇzn ˇuje program´ator˚ um ignorovat specifika procesoru, na kter´em program bˇeˇz´ı.
11
Common Language Runtime obsahuje t´eˇz: • spr´avu pamˇeti, • spr´avu vl´aken, • spr´avu v´ yjimek • garbage collection • zabezpeˇcen´ı
2.7.3
ASP.NET
ASP.NET je souˇc´ast .NET frameworku pro v´ yvoj webov´ ych aplikac´ı a sluˇzeb. ASP.NET je n´astupcem technologie Active Server Pages (ASP). Program´ator pˇri vytv´aˇren´ı ASP.NET str´anek m˚ uˇze vyuˇz´ıvat kter´ ykoliv jazyk podporuj´ıc´ı CLR (viz. v´ yˇse). V´ yhodou tohoto ˇreˇsen´ı je rychlost, protoˇze aplikace zaloˇzen´e na ASP.NET jsou pˇrekompilov´any do DLL soubor˚ u (naproti skriptovac´ım jazyk˚ um, kter´e pˇri kaˇzd´em pˇr´ıstupu znovu parsov´any). ASP.NET umoˇzn ˇuje oddˇelen´ı k´odu od vzhledu – pro k´od i algoritmickou ˇc´ ast webu (napˇr. pr´aci s datab´az´ı, odchycen´ı ud´alost´ı) existuj´ı oddˇelen´e zdrojov´e soubory. Str´anky jsou skl´ad´any z ovl´adac´ıch prvk˚ u podobn´ ych ovl´ adac´ım prvk˚ um ve Windows. Tˇemto prvk˚ um lze nastavovat urˇcit´e vlastnosti ˇci zachyt´ avat ud´alosti. Tyto webov´e ovl´adac´ı prvky samy generuj´ı HTML, kter´e se pak vkl´ad´ a do v´ ysledn´eho HTML k´odu. Ud´alostmi ˇr´ızen´e programov´an´ı vyˇzaduje zachov´ an´ı stavu, jenˇze webov´ y protokol je s´am o sobˇe bezstavov´ y, proto se tento probl´em ˇreˇs´ı pomoc´ı HTML (a JavaScriptu) pomoc´ı dvou z´akladn´ıch technik (zdroj [9]): • ViewState – informace se uchov´ avaj´ı mezi poˇzadavky ve skryt´em formul´ aˇrov´em poli. Nev´ yhodou tohoto ˇreˇsen´ı je, ˇze se mezi serverem a klientem m˚ uˇze pˇren´ aˇset velk´e mnoˇzstv´ı dat. • SessionState – mezi serverem a klientem se pos´ıl´ a jedineˇcn´ y identifik´ ator (pomoc´ı skryt´eho formul´aˇrov´eho pole, souˇc´ ast´ı URL nebo jako cookie). Toto ˇreˇsen´ı zvyˇsuje n´aroky na v´ ykon serveru.
2.7.4
Relaˇ cn´ı datab´ aze, SQL
Relaˇcn´ı datab´aze je datab´aze zaloˇzen´ a relaˇcn´ım modelu (zdroj [14], [15]). Datab´aze je zjednoduˇsenˇe urˇcit´e u ´loˇziˇstˇe, kde se ukl´adaj´ı data. Datab´aze poskytuje rychlejˇs´ı pˇr´ıstup k dat˚ um neˇz soubory. Datab´aze t´eˇz umoˇzn ˇuje paraleln´ı pˇr´ıstup k dat˚ um od v´ıce uˇzivatel˚ u najednou. Z´akladem datab´aze je tabulka obsahuj´ıc´ı data. Tabulka se skl´ad´ a ze sloupc˚ u a ˇr´ adk˚ u. Kaˇzd´ y sloupec v tabulce m´a jedineˇcn´ y n´azev a urˇcit´ y datov´ y typ. Data se ukl´adaj´ı po ˇr´adc´ıch (z´aznamech). Pro urychlen´ı pˇr´ıstupu k dat˚ um m˚ uˇzeme nad sloupcem (nebo v´ıce sloupci) definovat kl´ıˇc, kter´ y urychl´ı pˇr´ıstup k z´aznam˚ um podle zvolen´ ych sloupc˚ u. Z´aznamy mezi tabulkami jsou reprezentov´ any nevlastn´ımi kl´ıˇci, kter´e napom´ahaj´ı k udrˇzen´ı integrity datab´aze. S relaˇcn´ımi datab´azemi se manipuluje pomoc´ı jazyku SQL (Structured Query Language). 12
Kapitola 3
N´ avrh Na obr´azku 3.1 je naznaˇcena z´akladn´ı struktura projektu, dˇediˇcnosti, zdroj˚ u i toku dat. N´avrh se ˇr´ıd´ı myˇslenkou, ˇze nejniˇzˇs´ı a v´ ypoˇcetnˇe nejn´aroˇcnˇejˇs´ı ˇc´ asti programu jsou co moˇzn´a nejv´ıce optimalizov´any, ide´alnˇe psan´e v programovac´ım jazyce s minim´aln´ımi poˇzadavky na reˇzie (napˇr. kontroly meze pol´ı, kontroly pˇr´ıstupu do pamˇeti). Dalˇs´ı vrstvy jsou pak ps´any pomoc´ı vyˇsˇs´ıho programovac´ıho jazyka, kter´ y poskytuje mnoho doplˇ nkov´ ych sluˇzeb a pomoc´ı kter´eho je jednoduch´e a hlavnˇe rychl´e naprogramovat uˇzivatelsk´e rozhran´ı. Vstupem i v´ystupem pr´ace programu je vˇzdy obr´azek. V´ ysledkem t´eto bakal´aˇrsk´e pr´ace jsou knihovny: • Framework – knihovna datov´ ych struktur, optimalizovan´ a (minim´aln´ı implementace) pro bakal´aˇrskou pr´aci • Mosaic.Lib.Static – knihovna pro vlastn´ı vytvoˇren´ı mozaiky a spr´avu datab´az´ı • Mosaic.Lib.Dynamic – .dll knihovna, kter´a slouˇz´ı pro propojen´ı s C# k´odem, spr´ava datab´az´ı je tu odstranˇena, pˇr´ıd´ any jsou moˇznosti pro spolupr´aci s C# pro pˇr´ım´e vytv´aˇren´ı obr´azku (takto lze doimplementovat podpora dalˇs´ıch form´at˚ u, kter´e zvl´adne .NET framework) • Mosaic.Class – C# tˇr´ıda pro pr´aci s mozaikou, toto tˇr´ıda je univerz´ aln´ı a mˇela by b´ yt vyuˇziteln´a pro jak´ ykoliv projekt (nejen takov´ y, kter´ y je v´az´ an na webovou sluˇzbu ˇci GUI) • Formatter – tˇr´ıda pro propojen´ı objekt˚ u a datab´aze (s minim´aln´ımi mˇenami lze tuto tˇr´ıdu pouˇz´ıvat napˇr. i pro ODBC a tedy i [skoro] libovolnou datab´azi) • Web.Library – knihovna pro spolupr´aci mezi webovou str´ankou (Web.Application) a programem na pozad´ı (Web.Service) A d´ale pak tyto programy: • Mosaic.Console – program pro vytv´aˇren´ı mozaikov´ ych obr´azk˚ u a spr´avu datab´az´ı, tento posledn´ı program je ps´an pˇrenositelnˇe, n´asleduj´ıc´ı ˇc´ asti jsou jiˇz kv˚ uli pouˇzit´ ym technologi´ım v´az´any je urˇcitou platformu • Web.Application – informaˇcn´ı syst´em, kter´ y prezentuje pr´aci sluˇzby bˇeˇz´ıc´ı na pozad´ı, pomoc´ı t´eto webov´eho informaˇcn´ıho syst´emu lze poˇzadavky zad´avat a zobrazovat 13
• Web.Service – program, kter´ y je navrˇzen tak, aby bˇeˇzel na pozad´ı a zpracov´ aval poˇzadavky zadan´e pˇres webovou sluˇzbu • Google Donwloader, Last.fm Downloader, ASCII Art Creator – programy pro z´ısk´ av´an´ı datab´aze obr´azk˚ u
Obr´azek 3.1: N´avrh struktury aplikace, knihoven, zdroj˚ u a toku dat
14
Pro vytvoˇren´ı obr´azkov´e mozaiky jsou vˇzdy potˇreba tˇri vˇeci: • vstupn´ı obr´azek – obr´azek, kter´ y je pouˇzit jako pˇredloha vytvoˇren´e mozaiky • datab´aze obr´azk˚ u – pˇredzpracovan´ a datab´aze s informacemi o obr´azc´ıch • obr´azky – z obr´azk˚ u se skl´ad´ a mozaika, obr´azky nemus´ı b´ yt pˇredepsan´e velikosti, pˇri zpracov´an´ı se automaticky jejich velikost oprav´ı podle potˇreby
3.1
Framework
Protoˇze nˇekter´e funkce a datov´e struktury se pouˇz´ıvaj´ı ˇcasto a na mnoha m´ıstech, rozhodnul jsem se nejdˇr´ıve vytvoˇrit knihovnu tˇechto funkc´ı a zcela ji osamostatnit od vlastn´ı implementace. V´ yhodou tohoto pˇr´ıstupu je znovupouˇzitelnost v dalˇs´ıch programech i projektech. Alternativou pouˇzit´ı t´eto knihovny by bylo napˇr. pouˇzit´ı STL knihovny C++. Vˇetˇsina datov´ ych struktur je optimalizov´ ana pro nˇekolik z´akladn´ıch operac´ı, vˇetˇsinou nen´ı potˇreba univerz´alnost (napˇr´ıklad u seznam je implementov´ an tak, aby bylo rychl´e pˇrid´av´an´ı na konec). Tyta knihovna je napsan´a pomoc´ı ISO C99. Knihovna nav´ıc od d´ale popsan´ ych datov´ ych struktur podporuje t´eˇz pr´aci s libovolnˇe dlouh´ ymi ˇretˇezci, alokaci velk´eho mnoˇzstv´ı mal´e pamˇeti a neomezenˇe velk´e pole.
3.1.1
Seznam
Tˇr´ıda jednosmˇern´eho line´arn´ıho seznamu. Speci´alnˇe upraven´ y liner´an´ı seznam. Tento zvl´aˇstn´ı pˇr´ıpad je optimalizov´ an pro velmi ˇcast´e pˇrid´av´an´ı prvku na konec seznamu. V´ ysledkem je pak pˇrid´an´ı na konec seznamu se sloˇzitost´ı O(1).
3.1.2
Hash tabulka
Hashovac´ı tabulka je datov´a struktura, kter´a sdruˇzuje kl´ıˇce (hashe) a hodnoty. Hodnota kl´ıˇce je vypoˇc´ıt´ana podle pravidla (hashovac´ı funkce) tak, aby: • byl kl´ıˇc co nejjednoznaˇcnˇeji urˇcen, • pravdˇepodobnost stejn´eho kl´ıˇce v´ıce (r˚ uzn´ ym) poloˇzk´ am byla co nejniˇzˇs´ı, • rozptyl hodnot kl´ıˇc˚ u pro dvˇe bl´ızk´e poloˇzky byl co nejvyˇsˇs´ı Hashovac´ı tabulka je urˇcena pro rychl´e vyhled´av´ an´ı v poli. Pomoc´ı hashovac´ı funkce pˇriˇrazujeme hodnotˇe kl´ıˇce ukazatel do datov´e struktury (pole). Hashovac´ı tabulka, kde kl´ıˇcem je ˇretˇezec. Velikost je volena jako prvoˇc´ıslo (kv˚ uli rovnomˇern´emu vyuˇzit´ı datov´e struktury). Sloˇzitost hled´an´ı v t´eto datov´e struktuˇre je O(n).
3.1.3
Seˇ razen´ e pole
Seˇrazen´e pole je datov´a struktura pˇri manipulaci s obsahem struktury (pˇrid´ av´ an´ı, odstran ˇov´an´ı poloˇzek) zachov´av´a seˇrazenost pole. Vyhled´av´an´ı v t´eto struktuˇre je ˇcastˇeji rychlejˇs´ı neˇz vyhled´av´ an´ı v neseˇrazen´em poli. 15
3.2
Knihovny
Knihovna je soubor (kolekce) funkc´ı (metod, tˇr´ıd) pouˇz´ıvan´ ych pˇr´ı v´ yvoje software. Hlavn´ım v´ yznamem moˇznost modul´arn´ıho pˇr´ıstupu k programov´ an´ı, kdy je jedna knihovna znovu vyuˇziteln´a ve v´ıce projektech. Knihovny poskytuj´ı aplikaˇcn´ı program´atorsk´e rozhran´ı (API). Knihovny m˚ uˇzeme rozliˇsovat podle zp˚ usobu propojen´ı s programem: • statick´a knihovna • dynamick´a knihovna Statick´e knihovny jsou s programem spojov´ any bˇehem sestavov´ an´ı (linkov´ an´ı) programu. Do c´ılov´eho programu se uloˇz´ı vˇsechen k´od a data odkazovan´ y z programu a vˇsechna data odkazovan´a v pouˇzit´em k´odu knihovny.
3.2.1
Dynamicky linkovan´ e knihovny
Dynamicky linkovan´e knihovny (v prostˇred´ı Microsoft Windows soubory s pˇr´ıponou .dll ) jsou programov´e moduly obsahuj´ıc´ı k´od, data a zdroje (zdroj [7]), jenˇz mohou b´ yt vyuˇzity dalˇs´ım modulem (aplikac´ı nebo dalˇs´ı dynamickou knihovnou). Pˇri sestavov´an´ı programu jsou do programu pouze um´ıstˇeny odkazy na symboly definovan´e v dynamick´e knihovnˇe, pro vlastn´ı chod programu je potˇreba pak i dynamick´ a knihovna nainstalovan´a ve stejn´em adres´aˇri jako program nebo v syst´emu (a samozˇrejmˇe dalˇs´ı knihovny, kter´e knihovna m˚ uˇze vyuˇz´ıvat). Dynamick´ a knihovna lze naˇc´ıst do programu i aˇz bˇehem bˇehu programu. Dynamick´e knihovny jsou z´avisl´e na operaˇcn´ım syst´emu. Typick´ a pˇr´ıpona dynamick´ ych knihoven v prostˇred´ı Windows je .dll, Unixov´ ych syst´emech pak .so. V´ yhodou pouˇzit´ı DLL knihovny je moˇznost mˇenit funkˇcnost program˚ u bez nutnosti mˇenit hlavn´ı program. Operaˇcn´ı syst´em m˚ uˇze optimalizovat vyuˇzit´ı pamˇeti t´ım, ˇze pokud vyuˇz´ıv´a dynamickou knihovnu v´ıce proces˚ u najednou, m˚ uˇze b´ yt knihovna v pamˇeti sd´ılen´ a.
3.2.2 3.2.2.1
Extern´ı knihovny libjpeg
JPEG je ˇcasto pouˇz´ıvan´a metoda komprese obr´azk˚ u a fotografi´ı. Metoda je pouˇz´ıvan´ a ve v´ıce obr´azkov´ ych form´atech (napˇr´ıklad JPEG/Exif nebo JPEG/JFIF), tyto form´aty nejsou vˇetˇsinou rozliˇsov´any a jsou oznaˇcov´ any jednoduˇse jako JPEG. JPEG je standardizov´an jako norma ISO 10918-1. Standard obsahuje kompresi obr´azku do datov´eho proudu i form´at uloˇzen´ı tohoto proudu do souboru. Implementaci pro pr´aci a manipulaci s obr´azky ve form´atu JPEG vytvoˇrila skupina Independent JPEG Group [2].
16
3.2.2.2
libpng, zlib
PNG (Portable Network Graphics) je rastrov´ y form´at souboru pro uloˇzen´ı obr´azku. Tento form´at byl vytvoˇren jako n´ahrada GIF1 (zdroj [16]). Oproti form´atu GIF pˇrin´aˇs´ı PNG tyto v´ yhody: • alfa kan´al – pr˚ uhlednost • gama korekce – multiplatformn´ı u ´prava svˇetlosti obr´azku • podpora prokl´ad´an´ı – obr´azek se m˚ uˇze zobrazovat postupnˇe (pˇri naˇc´ıt´ an´ı je obr´azek st´ale detailnˇejˇs´ı) Knihovna libpng vyuˇz´ıv´a bezztr´atovou kompresi (pomoci knihovny zlib).
3.3
Vyhled´ avac´ı sluˇ zby
Vyhled´avac´ı sluˇzby na Internetu pravidelnˇe proch´ az´ı WWW str´anky a indexuj´ı obsah. Vyhled´avac´ı sluˇzby jsou zamˇeˇreny hlavnˇe na indexov´ an´ı textu, ale vˇetˇsinou indexuj´ı i dalˇs´ı obsah. Napˇr´ıklad jsou to i obr´azky. Mezi takov´eto vyhled´avac´ı sluˇzby patˇr´ı napˇr´ıklad: • Google Images – http://images.google.com/ • Yahoo! Image Search – http://images.search.yahoo.com/ • Live Search – http://www.live.com/?scope=images Indexov´an´ı prob´ıh´a vˇetˇsinou podle alternativn´ıho popisu obr´azku (parametr alt), URL obr´azku, textu odkazu na obr´azek, textu na str´ance, kde je obr´azek zobrazen. Mohou b´ yt pouˇzity i pokroˇcilejˇs´ı techniky rozpozn´av´ an´ı obsahu obr´azk˚ u a fotografi´ı. V´ıce o z´ısk´av´an´ı obr´azk˚ u z webov´ ych sluˇzeb lze nal´ezt v kapitole 4.8.
3.4
Knihovna pro vytvoˇ ren´ı mozaiky
Kv˚ uli moˇznosti jednoduch´ ych u ´prav, pouˇzitelnosti, rozˇsiˇritelnosti a moˇznosti znovuvyuˇzit´ı k´odu je algoritmus a cel´a knihovna pro vytv´aˇren´ı mozaiky oddˇelena od zbytku k´odu. Tento postup umoˇzn ˇuje vyuˇz´ıt knihovnu pro program pro pˇr´ıkazovou ˇr´ adku nebo pro vytvoˇren´ı DLL knihovny, kter´a je pak zase pouˇz´ıv´ ana d´ale. Kv˚ uli d˚ usledn´emu oddˇelov´an´ı jednotliv´ ych logick´ ych modul˚ u bˇehem programov´ an´ı se tento postup velmi osvˇedˇcil. Pokud by napˇr´ıklad nˇekdo nyn´ı chtˇel vz´ıt knihovnu a vytvoˇrit GUI, staˇc´ı vz´ıt knihovnu a vyuˇz´ıvat pouze jejich sluˇzeb. Knihovna byla naps´ana tak, aby ˇz´ adn´e dalˇs´ı z´asahy do vlastn´ıho k´odu nebylo potˇreba prov´ adˇet. V´ıce o rozˇs´ıˇren´ıch lze nal´ezt v kapitole 6.1 Moˇzn´ a rozˇs´ıˇren´ı. 1
GIF - Graphics Interchange Format
17
3.5
Optimalizace rychlosti
Prap˚ uvodn´ı implementace programu obsahovala velmi m´alo optimalizac´ı. V t´eto implementaci byl na optimalizaci br´an velk´ y zˇretel, v´ ybˇer datov´ ych struktur i v´ ybˇer algoritm˚ u byl podˇr´ızen pamˇet’ov´e a rychlostn´ı optimalizaci. Protoˇze v prvn´ım stupni funkce algoritmu nen´ı tˇreba zn´at vlastn´ı obsah obr´azku, staˇc´ı si pamatovat pouze nˇekolik z´akladn´ıch hodnot (pr˚ umˇern´ a barva, pr˚ umˇern´ a barva submatic), staˇc´ı tyto informace naˇc´ıst z pˇredzpracovan´e datab´aze. T´ımto se velmi redukuje n´aroˇcnost na pamˇet’, ale i k poˇzadovan´ ym informac´ım.
3.5.1
Trojrozmˇ ern´ y hash
Asi nejvˇetˇs´ı optimalizac´ı, kter´a se velmi pozitivnˇe projevila pr´avˇe na rychlosti algoritmu je pouˇzit´ı uloˇzen´ı pole seznam˚ u obr´azk˚ u, kter´e maj´ı zhruba podobnou barevnost. Pˇredstavit tento postup si lze jako rozkr´ajen´ı trojrozmˇern´e RGB krychle (obr´azek 2.2), kde kaˇzd´a krychle obsahuje pouze barevnˇe podobn´e obr´azky. Pokud by n´ahodou nebyl nalezen´ y kandid´ at, staˇc´ı hledat pouze v bl´ızk´em okol´ı. Tento postup je tak´e uk´azal jako lepˇs´ı protoˇze algoritmus je v´ıce´ urovˇ nov´ y (obr´azek 2.3) a pro pˇrestup z jedn´e u ´rovnˇe do druh´e je potˇreba nal´ezt v´ıce kandid´ at˚ u. Hled´an´ı pouze podle pr˚ umˇern´e barvy m´a tu nev´ yhodu, ˇze pokud se hled´a nejlepˇs´ı shoda, m˚ uˇze se nal´ezt kandid´at, kter´ y je sice podle pr˚ umˇern´e barvy bliˇzˇs´ı, ale napˇr´ıklad podle hran by se jednalo o naprosto nevyhovuj´ıc´ı obr´azek.
3.5.2
Pouˇ zit´ı seˇ razen´ eho pole s omezenou d´ elkou
V posledn´ım kroku hled´an´ı vhodn´eho obr´azku do mozaiky se pouˇz´ıv´ a porovn´ av´ an´ı pixel po pixelu. (Tato operace je tak´e velmi n´aroˇcn´ a, proto se porovn´ av´ a pouze nˇekolik m´alo obr´azk˚ u). Pro selekci z pˇredchoz´ıho kroku se pouˇz´ıv´ a seˇrazen´e pole s omezenou d´elkou, kter´a automaticky ˇrad´ı nejlepˇs´ı kandid´ aty na zaˇc´ atek fronty a horˇs´ı automaticky vyˇrazuje. Odpadaj´ı tak probl´emy s pˇr´ıpadnou realokac´ı (pokud by bylo pouˇzito pole), ˇci pˇr´ıliˇsn´e pamˇet’ov´e n´aroky (pokud by byl pouˇzit seznam).
3.6
Optimalizace vyuˇ zit´ı pamˇ eti
Pr´ace s pamˇet´ı je pˇri bˇehu tohoto programu z´asadn´ı, protoˇze je navrˇzen tak, aby pracoval jako sluˇzba na pozad´ı bˇehu poˇc´ıtaˇce. Zvl´aˇstn´ı p´eˇce tedy byla vˇenov´ ana pamˇeti – tedy jej´ı alokaci a dealokaci a pokud moˇzno minimalizaci pamˇet’ov´ ych n´arok˚ u, protoˇze program je navrˇzen tak, aby pracoval s des´ıtkami tis´ıc obr´azk˚ u v datab´azi.
3.6.1
Droben´ı alokovan´ e pamˇ eti
Protoˇze bˇehem v´ ypoˇctu je potˇreba pˇristupovat a ˇc´ıst z mnoha soubor˚ u, o kter´ ych nen´ı pˇred spuˇstˇen´ım nic zn´amo, a naˇc´ıt´an´ı vˇsech je zase nemoˇzn´e z nedostatku pamˇeti, byla navrhnuta speci´aln´ı struktura a postup pro alokaci pamˇeti. Vyuˇz´ıv´a se toho, ˇze alokovat pamˇet’ je potˇreba velice ˇcasto, zat´ımco uvolnˇen´ı pamˇeti se prov´ad´ı aˇz po skonˇcen´ı algoritmu. Myˇslenka je takov´a, ˇze se nejdˇr´ıve alokuje velk´ y pamˇet’ov´ y prostor, ze kter´eho se postupnˇe podle poˇzadavk˚ u pˇridˇeluj´ı pamˇet’ov´e bloky. 18
← další bloky
poslední blok
Alokovaná paměť
Přidělená adresa (ukazatel)
Požadavek na paměť
Ukazatel na konec
Volná paměť
Ukazatel na další blok
Nevyužitá paměť
Obr´azek 3.2: N´azorn´ y nakres fungov´ an´ı tˇr´ıdy allocator Schematick´e zn´aroznen´ı tˇr´ıdy allocator je na obr´azku 3.2. V´ yhody: • Operaˇcn´ı syst´emy vˇetˇsinou pˇridˇeluj´ı pamˇet’ v bloc´ıch. Tento pˇr´ıstup dovoluje alokovat i po bytech. • Pamˇet’ je l´epe vyuˇzita pˇri alokaci velk´eho mnoˇzstv´ı mal´ ych u ´sek˚ u pamˇeti, nedoch´ az´ı k vytv´aˇren´ı ˇc´ast´ı pamˇeti, kter´e z˚ ust´ avaj´ı nevyuˇzity. • Dealokace pamˇeti prob´ıh´a v jednom kroku nen´ı potˇreba dealokovat vˇsechny pˇridˇelen´e bloky jednotlivˇe. Sniˇzuje se moˇznost memory leak˚ u2 . Nev´ yhody: • Na konci alokovan´eho velk´eho bloku m˚ uˇze vzniknout nepotˇrebn´ a pamˇet’. Alokace pamˇeti je ale navrˇzena tak, aby doch´ azelo k potˇrebˇe relativnˇe mal´ ych ˇc´ ast´ı pamˇeti. Pokud je alokovan´ y blok relativnˇe velk´ y, tato ztr´ata by mˇela b´ yt v porovn´ an´ı s cel´ ym blokem zanedbateln´a. • Pˇri potˇrebˇe alokovat blok vˇetˇs´ı neˇz je cel´ y alokovan´ y blok. • Nelze dealokovat jednotliv´ y pˇridˇelen´ y blok nebo ho zvˇetˇsit.
3.6.2
Vyuˇ zit´ı hash tabulky
Kaˇzd´ y z´aznam, kter´ y pˇredstavuje obr´azek m´a kromˇe barevn´ ych charakteristik pˇridˇeleno takt´eˇz kl´ıˇcov´e slovo (m˚ uˇze se pouˇz´ıvat, napˇr´ıklad kdyˇz chceme vytvoˇrit obr´azek auto z mnoha dalˇs´ıch aut). Protoˇze se kl´ıˇcov´a slova ˇcastokr´ at opakuj´ı, je kaˇzd´e kl´ıˇcov´e slovo v pamˇeti uloˇzeno pouze jednou. V pracovn´ı pamˇeti je pak pouze um´ıstˇen odkaz na toto kl´ıˇcov´e slovo, ne samotn´a alokovan´a pamˇet’. Pˇri naˇc´ıt´an´ı datab´aze se v hashtabulce nalezne kl´ıˇcov´e slovo a do samotn´eho z´aznamu v pamˇeti se uloˇz´ı pouze odkaz. 2
memory leak – ztr´ ata pamˇeti, kter´ a byla alokov´ ana a na kterou byl ztracen odkaz
19
3.7
C# tˇ r´ıda
Propojen´ı jazyk˚ u C# a C je provedeno pˇres dynamicky linkovanou knihovnu DLL (viz. 3.2.1). Tato knihovna sama o sobˇe nepˇrin´ aˇs´ı ˇz´ adnou dalˇs´ı funkˇcnost star´a se pouze o vol´ an´ı funkc´ı z niˇzˇs´ıho programovac´ıho jazyka. Pˇri vytvoˇren´ı t´eto tˇr´ıdy vznik´a znovupouˇziteln´ a knihovna (tˇr´ıda), kterou lze pouˇz´ıt v dalˇs´ıch programech. Napˇr´ıklad by bylo moˇzn´e vytvoˇrit jednoduch´e grafick´e uˇzivatelsk´e rozhrann´ı, program pro pˇr´ıkazov´ y ˇr´adek ˇci sluˇzbu bˇeˇz´ıc´ı na pozad´ı. Z tˇechto moˇznost´ı je v t´eto bakal´ aˇrsk´e pr´aci implementov´ana sluˇzba, kter´a spolupracuje s jednoduch´ ym webov´ ym uˇzivatelsk´ ym rozhran´ım. Dalˇs´ı v´ yhodou je moˇznost pˇridat dalˇs´ı funkˇcnost na u ´rovni .NET. Pˇr´ıkladem m˚ uˇze b´ yt podpora dalˇs´ıch grafick´ ych form´at˚ u (napˇr. GIF) ne lepˇs´ı spr´ava vstupn´ıch datab´az´ı obr´azk˚ u.
3.8
Formatter
Pro pr´aci s datab´az´ı existuje nˇekolik moˇznost´ı. Je moˇzn´e spojit se s datab´az´ı, vloˇzit SQL dotaz a zpracovat vr´acenou odpovˇed’. Tato tˇr´ıda se snaˇz´ı o trochu jin´ y pˇr´ıstup k datab´azi – snaˇz´ı se pˇr´ımo atributy tˇr´ıdy pˇriˇradit jednotliv´ ym sloupc˚ um tabulky. Jedna instance objektu pak zastupuje jeden ˇr´adek tabulky. + Třída +
Atributy ID Name Price
Tabulka v databázi ID Name Price
Obr´azek 3.3: Tˇr´ıda formatter – zobrazen´ı tabulky relaˇcn´ı datab´aze na objekt v C#
3.8.1
N´ avrh
N´avrh tˇr´ıdy Formatter je sv´az´an s moˇznost´ı jazyka C# pouˇz´ıvat a pˇriˇrazovat jednotliv´ ym ˇclen˚ um tˇr´ıd atributy (viz. 2.7.1.2). Tˇr´ıda se snaˇz´ı pˇred uˇzivatelem skr´ yt nutnost pouˇz´ıvat dotazovac´ı jazyk SQL datab´aze. Tˇr´ıda mus´ı m´ıt specifikov´ano, ke kter´e tabulce se vztahuje. Atributy ˇclen˚ u tˇr´ıdy specifikuj´ı propojen´ı se sloupcem v datab´azi a typ, kter´ y se pouˇzije pro form´atov´an´ı z ˇci do SQL dotaz˚ u. Dalˇs´ı v´ yhodou je dynamick´e generov´ an´ı SQL dotaz˚ u aˇz pˇri potˇrebˇe, aplikaˇcn´ı program´ator jednoduˇse napˇr´ıklad specifikuje, ˇze potˇrebuje naˇc´ıst z´aznam s konkr´etn´ım identifikaˇcn´ım ˇc´ıslem a formatter vygeneruje SQL pˇr´ıkaz, provede jej a v´ ysledek dotazu zpracuje a data pˇriˇrad´ı pˇr´ımo dat˚ um instanci objektu.
20
Formatter poskytuje z´akladn´ı sluˇzby nad objekty (z´aznamy): • Naˇcten´ı – je nalezen ˇr´adek v datab´azi a jeho hodnoty jsou pˇriˇrazeny instanci tˇr´ıdy. • Naˇcten´ı seznamu – podle SQL dotazu je vytvoˇren nov´ y seznam a obsahuje vˇsechny objekty, jenˇz zastupuj´ı z´aznamy v tabulce datab´aze • Vytvoˇren´ı – objekt je vytvoˇren, jeho hodnoty jsou inicializov´ any pomoc´ı konstruktoru. Pˇri pokusu o uloˇzen´ı je vygenerov´ an SQL dotaz INSERT. • Aktualizovat – objekt, kter´ y jiˇz byl z datab´aze naˇcten, je v datab´azi takt´eˇz aktualizov´an. Pˇri uloˇzen´ı (aktualizaci) je vygenerov´ an UPDATE dotaz. Formatter poskytuje tuto z´akladn´ı funkˇcnost: • Skr´ yv´a vˇetˇsinu potˇreby pouˇz´ıvat SQL dotazy. • Zjednoduˇsuje pˇr´ıpadnou nutnost pˇridat nov´e prvky nebo nˇekter´e odeb´ırat. SQL dotazy jsou generov´any podle atribut˚ u v tˇr´ıdˇe. Odebr´an´ı pˇrid´ an´ı automaticky zmˇen´ı dotazy. • Zruˇsen´ı nutnosti rozliˇsovat mezi t´ım, zda se jedn´a o vytvoˇren´ı nebo aktualizaci z´aznamu. Formatter zvol´ı operaci podle typu vytvoˇren´ı.
3.8.2
Konstrukce objektu
Kaˇzd´a, kter´a bude takto pouˇz´ıv´ana mus´ı b´ yt pˇredkem tˇr´ıdy Formatter. T´ımto zdˇed´ı metody pro naˇcten´ı a uloˇzen´ı (vloˇzen´ı a aktualizaci) a tak´e nˇekolik doprovodn´ ych metod (napˇr. zjiˇstˇen´ı tabulky sv´azan´e s tˇr´ıdou). Dˇedˇen´ım od t´eto tˇr´ıdy vznik´a nutnost m´ıt v kaˇzd´e tabulce m´ıt sloupec ID. Sloupec ID je typu GUID (viz. [4] nebo [6]), coˇz je unik´atn´ı identifik´ ator, kter´ y by mˇel b´ yt celosvˇetovˇe jedineˇcn´ y.
3.8.3
Naˇ cten´ı, uloˇ zen´ı
Existuj´ı dva druhy ˇcten´ı dat z datab´aze. Prvn´ı moˇznost je naplnit daty jiˇz existuj´ıc´ı (nebo novˇe vytvoˇren´ y) jeden objekt, dalˇs´ı moˇznost´ı je naˇcten´ı v´ıce poloˇzek (SQL dotaz vrac´ı v´ıce z´aznam˚ u). Protoˇze obecnˇe m˚ uˇze b´ yt takov´ ych poloˇzek nekoneˇcnˇe, je vhodn´e pouˇz´ıt pro uloˇzen´ı v´ıce z´aznam˚ u line´arn´ı seznam. Uloˇzen´ı poloˇzky m˚ uˇze prob´ıhat jako vloˇzen´ı nov´e poloˇzky nebo aktualizace jiˇz existuj´ıc´ı. Formatter si stav objektu vnitˇrnˇe pamatuje a SQL dotaz generuje podle potˇreby. Aplikaˇcn´ı program´ator nemus´ı mezi tˇemito dvˇema pˇr´ıpady rozliˇsovat, pro nˇej existuje pouze metoda pro uloˇzen´ı.
3.8.4
Moˇ zn´ a rozˇ s´ıˇ ren´ı, pouˇ zit´ı
Hlavn´ı v´ yhodou je moˇznost jednoduch´e manipulace s daty v tabulce relaˇcn´ı datab´aze.
21
Protoˇze kaˇzd´ y objekt mus´ı b´ yt sv´az´ an s pˇripojen´ım k datab´azi, mus´ı b´ yt toto spojen´ı vytvoˇreni pˇri vytvoˇren´ı objektu. Je v´ıce moˇznost´ı: • Specifikovat spojen´ı pˇri kaˇzd´em vytv´aˇren´ı zvl´aˇst’, napˇr´ıklad pˇred´ an´ı v konstruktoru objektu. • Prov´azat vytv´aˇren´ı objektu s konkr´etn´ı konfiguraˇcn´ı tˇr´ıdou, kter´ y m˚ uˇze existovat ’ pouze v jedn´e instanci – tzv. singleton. Tato tˇr´ıda by zajiˇst ovala otevˇren´ı komunikace s SQL serverem a pˇri vytv´aˇren´ı objektu by nebylo nutn´e toto spojen´ı explicitnˇe zad´avat. • Kombinace v´ yˇse uveden´ ych moˇznost´ı, implementovat obˇe varianty. Dalˇs´ı velkou v´ yhodou je jednoduchost a rychlost pouˇz´ıv´ an´ı. Nev´ yhodou to, ˇze sloˇzitˇejˇs´ı dotazy na datab´azi se mus´ı st´ale prov´ adˇet pomoc´ı p˚ uvodn´ıho programov´eho rozhrann´ı. Moˇznost´ı rozˇs´ıˇren´ı by bylo moˇznost naˇc´ıt´ an´ı pˇr´ımo cel´ ych dalˇs´ıch entit, pokud objekt (tabulka) obsahuje referenci na dalˇs´ı objekt (tabulku). Napˇr. tabulka Osoba obsahuje vazbu do takulky Adresa. Moˇznost´ı by bylo upravit gener´ator SQL k´odu tak, aby vˇsechna data byla pˇreˇctena jedn´ım SQL dotazem za pouˇzit´ı JOIN.
3.9
Webov´ a sluˇ zba
Webov´a sluˇzba je nadstavba nad C# knihovnou, kter´a usnadˇ nuje vyuˇz´ıv´ an´ı sluˇzeb knihovny pomoc´ı uˇzivatelsk´eho rozhran´ı. Webov´a sluˇzba poskytuje rozhrann´ı pro komunikaci uˇzivatele a sluˇzby zajiˇst’uj´ıc´ı vytv´aˇren´ı mazaiky. Protoˇze vytvoˇren´ı obr´azku je ˇcasovˇe a v´ ypoˇcetnˇe n´aroˇcn´ yu ´kol, kter´ y by mohl trvat do pozdˇejˇs´ı doby, neˇz by doˇslo k vyprˇsen´ı spojen´ı mezi serverem a klientem (timeout), byla webov´a sluˇzba rozdˇelena na dvˇe hlavn´ı ˇc´ asti - prezenˇcn´ı (uˇzivatelsk´e rozhrann´ı) a v´ ykonnou (sluˇzbu pracuj´ıc´ı na pozad´ı). Prezenˇcn´ı ˇc´ast je informaˇcn´ı syst´em pro spr´avu, zad´av´ an´ı a zobrazov´ an´ı poˇzadavk˚ u. Pomoc´ı jednoduch´eho grafick´eho rozhrann´ı zpˇr´ıstupnˇen´eho pˇres webov´ y prohl´ıˇzeˇc m˚ uˇze uˇzivatel uˇzivatel proch´azet poˇzadavky a vlastn´ı pˇrid´ avat. Poˇzadavek m´a vlastnosti, kter´e jsou nutn´e pro zpracov´ an´ı poˇzadavku. Napˇr´ıklad vstupn´ı soubor, kter´ y byl na server uˇzivatelem nahr´an, ˇcas pˇrid´ an´ı, stav prov´ adˇen´ı, atd. Pˇri pˇrid´av´an´ı poˇzadavku m˚ uˇze uˇzivatel specifikovat datab´azi (viz. 4.8 a 3.3), velikost vstupn´ıho a v´ ystupn´ıho ˇctverce a typ v´ ystupn´ıho obr´azku (PNG nebo JPEG). Pˇri pˇrid´an´ı poˇzadavku je poˇzadavek zaˇrazen do fronty, kde ˇcek´ a, aˇz bude sluˇzbou pracuj´ıc´ı na pozad´ı vybr´an a zpracov´ an. Sluˇzba na pozad´ı se dotazuje na dosud nezpracovan´ y poˇzadavek a v pˇr´ıpadˇe, ˇze takov´ y nalezne, oznaˇc´ı jej stavem zpracov´ av´ ano a spust´ı vytv´aˇren´ı mozaiky.
22
3.9.1
ER diagram
Job <
>ID Name InputFile OutputFile ImageType Keywords Tile Size
Keyword 0..n
0..n
AddTime StartTime FinishTime Progress Finished Error
<>ID Name
Service <>ID LastReport Status
Obr´azek 3.4: ER diagram webov´e sluˇzby
3.9.1.1
Job
´ Uloha (at’ jiˇz zpracovan´a nebo zat´ım ve frontˇe) je u ´stˇredn´ı entitou informaˇcn´ıho syst´emu. • Name – Pojmenov´an´ı poˇzadavku (popis toho co je na obr´azku) • InputFile – vstupn´ı soubor na serveru • OutputFile – v´ ystupn´ı soubor na serveru • ImageType – typ v´ ystupn´ıho obr´azku (m˚ uˇze b´ yt JPEG nebo PNG) • Keywords – kl´ıˇcov´a slova z nichˇz bude sloˇzena datab´aze, ze kter´e se bude generovat mozaika • Tile – velikost vstupn´ıho ˇctverce • Size – velikost v´ ystupn´ıho ˇctverce • AddTime, StartTime, FinishTIme – ˇcasy vloˇzen´ı, poˇc´ atku a dokonˇcen´ı zpracov´ an´ı • Progress – Procentu´aln´ı vyj´adˇren´ı dokonˇcen´ı u ´lohy • Finished – pˇr´ıznak, zda je u ´loha dokonˇcena • Error – Pˇr´ıznak, zda pˇri zpracov´ an´ı poˇzadavku nedoˇslo k chybˇe 3.9.1.2
Keyword
Keyword – kl´ıˇcov´e slovo (n´azev datab´aze). V tabulce jsou uloˇzena vˇsechna dostupn´a kl´ıˇcov´ a slova. Tato kl´ıˇcov´a slova byla pouˇzita jako dotaz na Google (viz. 4.8) nebo jinak vystihuj´ı skupinu (datab´azi) obr´azk˚ u.
23
3.9.1.3
Service
Monitorov´an´ı sluˇzby (viz. 4.7.1) se prov´ ad´ı pomoc´ı zvl´aˇstn´ıho vl´akna, kter´e pˇri spuˇstˇen´ı sluˇzby zapisuje do t´eto tabulky cyklicky datum a ˇcas aktualizace. Teoreticky by jedna tabulka mohla b´ yt vyuˇzita na monitorov´ an´ı v´ıce sluˇzeb, v tomto projektu je ovˇsem pouze jedna sluˇzba, takˇze v tabulce je vyuˇzit pouze jeden ˇr´ adek. Monitorovan´a sluˇzba je identifikov´ an´ı pomoc´ı jedineˇcn´eho GUID (viz. [4] nebo [6]). Toto GUID se mus´ı n´ahodnˇe zvolit a specifikovat v konfiguraci aplikace. Do sloupce LastReport se ukl´ad´ a datum a ˇcas posledn´ıho ohl´aˇsen´ı sluˇzby a do Statusu se ukl´ad´ a aktu´aln´ı stav sluˇzby (sluˇzba ˇcek´ a na poˇzadavky nebo sluˇzba zpracov´ av´ a poˇzadavek). Pokud je posledn´ı ohl´aˇsen´ı sluˇzby starˇs´ı neˇz vhodnˇe zvolen´ y ˇcas, je sluˇzba povaˇzov´ ana jako nefunkˇcn´ı. Tento stav lze pak v webov´e ˇc´ asti zobrazit.
3.9.2
Knihovna pro komunikaci
Webov´e rozhrann´ı i sluˇzba pro proveden´ı poˇzadavk˚ u na pozad´ı pouˇz´ıv´ a pro komunikaci datab´ azi a tud´ıˇz mnoho ˇc´ast´ı projektu je spoleˇcn´ ych. Pr´avˇe tyto spoleˇcn´e tˇr´ıdy a metody jsou um´ıstˇeny v dalˇs´ı knihovnˇe. Tˇemito spoleˇcn´ ymi ˇc´astmi je napˇr´ıklad nav´ az´ an´ı spojen´ı s datab´az´ı, pˇr´ıstup k obsahu datab´ aze, pˇr´ıstup k monitorovac´ı sluˇzbˇe, tˇr´ıdy (entity).
3.9.3
Uˇ zivatelsk´ e rozhrann´ı
Webov´e rozhrann´ı je uˇzivatelsky pˇr´ıvˇetiv´ a moˇznost zad´av´ an´ı a prohl´ıˇzen´ı poˇzadavk˚ u. Pouˇzit´ı webov´eho rozhrann´ı je moˇzn´e odst´ınit uˇzivatele od pouˇzit´eho operaˇcn´ıho syst´emu. Klient nen´ı limitov´an operaˇcn´ım syst´emem ani ˇz´ adn´ ymi dalˇs´ımi omezen´ımi plynouc´ı z pouˇzit´ı konkr´etn´ıho hardware, operaˇcn´ıho syst´emu ani dalˇs´ıch program˚ u. Jedin´ ymi poˇzadavky je m´ıt pˇristup k webov´e sluˇzbˇe (pˇres s´ıt’ Internet), webov´ y prohl´ıˇzeˇc a schopnost zobrazovat obr´azky. Pro kompletn´ı funkˇcnost mus´ı jeho webov´ y prohl´ıˇzeˇc umˇet pos´ılat soubory. Uk´azka webov´eho rozhran´ı je na obr´azku 4.2. Seznam úloh
Vložit novou úlohu
Úloha - podrobnosti
Obr´azek 3.5: Struktura str´anek a pˇrechod˚ u webov´e sluˇzby Uˇzivatelsk´e prostˇred´ı dovoluje uˇzivateli zad´avat poˇzadavky na zpracov´ an´ı. Zad´an´ı poˇzadavku se prov´ad´ı zvolen´ım souboru s obr´azkem a zvolen´ım doprovodn´ ych parametr˚ u.
24
Jako dalˇs´ı parametry m˚ uˇze uˇzivatel zvolit: • N´azev – n´azev poˇzadavku (uˇzivatelsk´e oznaˇcen´ı) • Seznam kl´ıˇcov´ ych slov – urˇcuje t´ematiku a rozs´ahlost pouˇzit´e datab´aze. • Form´at v´ ystupn´ıho obr´azku – lze zvolit form´at v´ ystupn´ıho obr´azku (viz. 4.2) • Vstupn´ı a v´ ystupn´ı velikost ˇctverce – algoritmus dok´aˇze pracovat s r˚ uzn´ ymi vstupn´ımi velikostmi takt´eˇz dok´aˇze upravit vstupn´ı obr´azek na poˇzadovanou velikost (zmˇena velikosti obr´azku)
25
Kapitola 4
Implementace 4.1
Barevn´ y model, barevn´ a hloubka
Program internˇe pracuje v pouze jedn´e barevn´e hloubce vyuˇz´ıvaj´ıc´ı RGB model. Program pro ukl´ad´an´ı do intern´ı pamˇeti vyuˇz´ıv´ a na jeden pixel celkem 3 byty, pracuje tedy s barevnou hloubkou 24 bit˚ u. U soubor˚ u JPEG pˇredpokl´ad´a pr´avˇe tento form´at. PNG obr´azky automaticky pomoci vnitˇrn´ıch filtr˚ u knihovny pˇrev´ad´ı na 24 bit˚ u, pˇr´ıpadnou pr˚ uhlednost´ı sloˇzku (alfa kan´ al) odstraˇ nuje.
4.2
Optimalizace ukl´ ad´ an´ı obr´ azku
Knihovny pro pr´aci s PNG (viz. 3.2.2.2) a JPEG (viz. 3.2.2.1) dovoluj´ı vytv´aˇret obraz postupnˇe po jednotliv´ ych ˇr´adc´ıch. V r´amci optimalizace vyuˇzit´ı pamˇeti tento program vyuˇz´ıv´ a t´eto moˇznosti a zapisuje obr´azky postupnˇe. Pˇri zpracov´an´ı poˇzadavku je pamˇet’ pˇridˇelena pouze pro jeden v´ ysledn´ y obrazov´ y blok. V´ yhodou je n´ızk´a pamˇet’ov´a n´aroˇcnost – cel´ y v´ ysledn´ y obr´azek, kter´ y je ˇcasto nav´ıc obrovsk´ y, nemus´ı b´ yt uchov´av´an v pamˇeti, v nˇekter´ ych kraj´ıch pˇr´ıpadech by mohlo doch´azet aˇz ke swapov´an´ı a celkov´emu zpomalen´ı syst´emu. Program dok´aˇze vytvoˇrit tak velk´ y obr´azek, kter´ y nemus´ı b´ yt ani klient schopen zobrazit (prohl´ıˇzeˇc jej odm´ıtne jako pˇr´ıliˇs velk´ y).
4.3
Optimalizace alokace pamˇ eti obr´ azku
Rastrov´ y obr´azek lze br´at jako dvourozmˇernou matici, a proto tak´e intuitivnˇe je jednoduˇsˇs´ı implementovat vnitˇrn´ı uloˇzen´ı jako pole pol´ı (jako matici). Tento pˇr´ıstup m´a ovˇsem tu nev´ yhodu, ˇze pˇri alokaci obr´azku doch´ az´ı k mnohon´asobn´e alokaci, doch´ az´ı tedy k tˇr´ıˇstˇen´ı ’ pamˇeti a protoˇze operaˇcn´ı syst´em vˇetˇsinou pˇridˇeluje pamˇet po pevnˇe velk´ ych bloc´ıch, m˚ uˇze doch´azek k alokaci pamˇeti, kter´a nakonec nebude vyuˇzita. Alokac´ı pˇresnˇe potˇrebn´e velikosti pole m˚ uˇze sice tak´e doj´ıt k nevyuˇzit´ı pamˇeti, ovˇsem ˇr´adovˇe menˇs´ı. N´azorn´e proveden´ı alokace je zobrazeno na obr´azku 4.1.
26
Začátek paměti Ukazatel na řádek Všechny ukazatele na řádky
Jeden blok paměti
Řádek obrázku č. 1 Řádek obrázku č. 2 ...
Poslední řádek obrázku
Obr´azek 4.1: Sch´ema rozloˇzen´ı pamˇeti pro intern´ı uloˇzen´ı obr´azku
4.4
Obr´ azky a vyrovn´ avac´ı pamˇ et’
Z´ısk´an´ı informac´ı o obr´azku je ˇcasovˇe n´aroˇcn´ a ˇcinnost. Pro z´ısk´ an´ı informac´ı, kter´e jsou potˇreba k v´ ypoˇctu je potˇreba obr´azek naˇc´ıst, proj´ıt pixel po pixelu a spoˇc´ıtat charakteristiky a vlastnosti obsahu obr´azku. Pˇri velk´em mnoˇzst´ı obr´azk˚ u (des´ıtky tis´ıc) m˚ uˇze b´ yt pamˇet’ov´ a n´aroˇcnost obrovsk´ a a pro dneˇsn´ı syst´emy nesplniteln´a. Proto pˇred vlastn´ım v´ ypoˇctem je potˇreba indexovat (pˇredzpracovat) obr´azky. Pro kaˇzd´ y naˇcten´ y obr´azek se zjiˇst’uje pr˚ umˇern´ a barva, pak se rozdˇel´ı na matici 4 × 4 a pro kaˇzdou matici se opˇet spoˇc´ıt´a pr˚ umˇern´a barva. Tato datab´aze se pak uloˇz´ı do textov´eho souboru spoleˇcnˇe s cestou k souboru a kl´ıˇcov´ ym slovem. Taktov´ato datab´aze je pak pˇripravena pro pouˇzit´ı vytv´aˇren´ı mozaiky. Nutnost pouˇzit´ı vyrovn´avac´ı pamˇeti vych´ az´ı z pouˇzit´eho algoritmu (popis ve zvl´aˇstn´ı kapitole 2.5).
4.5 4.5.1
Pouˇ zit´ e v´ yvojov´ e n´ astroje Visual Studio 2005
Microsoft Visual Studio je integrovan´e v´ yvojov´e prostˇred´ı pro v´ yvoj aplikac´ı. M˚ uˇze b´ yt vyuˇzito pro v´ yvoj aplikac´ı pro konzoli, s grafick´ ym uˇzivatelsk´ ym prostˇred´ım, webov´ ych str´anek, webov´ ych sluˇzeb. Je podporov´an v´ yvoj pomoc´ı nativn´ıch jazyk˚ u, ale i pomoc´ı tzv. managed code. Editor podporuje IntelliSense, kter´e automaticky nab´ız´ı automatick´e dokonˇcov´ an´ı k´odu. V dobˇe psan´ı programu existovala sice jiˇz novˇejˇs´ı verze .NET Frameworku (verze 3.5) i Visual Studia (verze 2008), ovˇsem tato starˇs´ı verze je naprosto dostaˇcuj´ıc´ı. 27
Technologie, n´astroj C jpeglib libpng C# .NET Framework ASP.NET Microsoft SQL Server Microsoft IIS Server PHP XHTML CSS Javascript Last.fm API Subversion Apache
Verze, norma ISO C99 6b (Win) 1.2.28 2.0 2.0 2.0 9.0 7.0 5.2.5 1.0 1.0 1.5 2.0 1.5.2 2.2.9
Tabulka 4.1: Tabulka konkr´etnˇe pouˇzit´ ych technologi´ı, n´astroj˚ u a programovac´ıch jazyk˚ u
4.5.2
SQL Server Management Studio
Microsoft SQL Server Management Studio je n´astroj distribuovan´ y spoleˇcnˇe s Microsoft SQL Server pro konfiguraci a spr´avu vˇsech ˇc´ ast´ı SQL Serveru. Obsahuje editor skript˚ u ale i grafick´e uˇzivatelsk´e n´astroje pro spr´avu. Pomoc´ı tohoto n´astroje lze vytv´aˇret, mˇenit a prohl´ıˇzet datab´aze i tabulky (ale i mnoho dalˇs´ıho).
4.6
Pouˇ zit´ e technologie
Vlastn´ı hlavn´ı programov´a ˇc´ast je naps´ana v C, ale nadstavba je pro rychlejˇs´ı v´ yvoj naps´ana ve vyˇsˇs´ım programovac´ım jazyce. Kv˚ uli tomuto postupu pˇri programov´ an´ı muselo b´ yt vyuˇzito plno technologi´ı (tabulka 4.1). Jejich propojen´ı nen´ı natolik sloˇzit´e, aby to ˇcinilo neuskuteˇcniteln´ y probl´em. Vˇsechny pouˇzit´e technologie jsou otevˇren´e a spolupracuj´ı spolu dobˇre, v pr˚ ubˇehu implementace nedoch´azelo ke konflikt˚ um ˇci vz´ajemn´e nekompatibilitˇe. Bˇehem implementace bylo (pro z´alohu, moˇznost vracet star´e verze a k dokumentaˇcn´ım u ´ˇcel˚ um) vyuˇz´ıv´ano Subversion. I kdyˇz je tento n´astroj urˇcen hlavnˇe pro pr´aci v´ıce program´ator˚ u, jeho vyuˇzit´ı se velmi osvˇedˇcilo. Pouˇz´ıv´ an´ı Subversion umoˇzn ˇuje zobrazovat star´e verze, vracet se k p˚ uvodn´ım, pˇri n´ahodn´e ztr´atˇe souboru, adres´aˇre ˇci ˇc´ asti k´odu je k dispozici z´aloha.
4.7
Webov´ a sluˇ zba
Webov´a sluˇzba je implementov´ana v ASP.NET bez pouˇzit´ı Web Server Controls. Webov´ a sluˇzba je naps´ana pomoc´ı XHTML, CSS (kask´ adov´e styly) a Javascriptu (Javascript slouˇz´ı pouze k doplˇ nkov´ ym funkc´ım, pro vlastn´ı bˇeh nen´ı nutn´ y). Webov´a sluˇzba je naps´ana minimalisticky tak, aby fungovala ve vˇetˇsinˇe prohl´ıˇzeˇc˚ u. K zobrazen´ı str´anek nen´ı potˇreba podpora Javascriptu ani CSS. Str´anky tak lze prohl´ıˇzet 28
↑Zobrazení detailu úlohy zpracování, úloha je hotová → Vložení nové úlohy - zadání všech potřebných parametrů ↓ Detail úlohy, která je zpracovávaná Monitorování služby: ? zelená vlajka - služba je připravena zpracovávat zadané požadavky ? modrá vlajka - služba pracuje ? červená vlajka - služba nepracuje, není spuštěna, došlo k chybě
Obr´azek 4.2: Webov´ a sluˇzba v akci a pouˇz´ıvat i na zaˇr´ızen´ ych, kter´e nemaj´ı velk´ y“ internetov´ y prohl´ıˇzeˇc. Takov´ ymito zaˇr´ıze” n´ımi jsou napˇr´ıklad telefony, PDA, komunik´ atory.
4.7.1
Monitorov´ an´ı sluˇ zby
Informace o stavu prov´adˇen´ı poˇzadavku se ukl´ad´ a do datab´aze. Fungov´an´ı pracuje na pˇredpokladu, ˇze pokud bˇeˇz´ı program na zpracov´ an´ı poˇzadavk˚ u, je sluˇzba dostupn´a. Sluˇzba pro zpracov´an´ı bˇeˇz´ı ve dvou oddˇelen´ ych vl´aknech. Jedno se star´a a vlastn´ı zpracov´av´an´ı, druh´e periodicky zapisuje stav druh´eho vl´akna s ˇcasov´ ym u ´dajem do datab´aze. V pˇr´ıpadˇe ukonˇcen´ı sluˇzby, skonˇc´ı tak´e druh´e vl´akno, k ˇz´ adn´emu z´apisu jiˇz nedojde a klientsk´ y program podle doby posledn´ıho z´apisu zjist´ı, ˇze sluˇzba nen´ı funkˇcn´ı.
4.8
Stahov´ an´ı obr´ azk˚ u
Pro pr´aci algoritmu je potˇreba v ide´aln´ım pˇr´ıpadˇe nˇekolik tis´ıc r˚ uzn´ ych obr´azk˚ u v datab´azi, ze kter´ ych se vytv´aˇr´ı v´ ysledn´a mozaika. Pro n´azorn´e pouˇzit´ı programu je id´aln´ı pouˇz´ıt obr´azky aut pˇri vytv´aˇren´ı obr´azku auta. Protoˇze ruˇcn´ı zaˇrazov´an´ı obr´azk˚ u by bylo ˇcasovˇe velice n´aroˇcn´e, vznikl n´apad vytvoˇrit
29
jednoduch´ y program (skript), kter´ y bude automaticky z indexovac´ıch sluˇzeb (viz. 3.3) stahovat obr´azky a automaticky je zaˇrazovat (pˇriˇrazovat tagy) do skupin. Google nab´ız´ı moˇznost vyhled´avat obr´azky podle vloˇzen´eho kl´ıˇcov´eho slova (textu). Tuto sluˇzbu nab´ız´ı ale i dalˇs´ı vyhled´avac´ı (indexovac´ı) internetov´e sluˇzby. Experimentov´an´ım s v´ıce sluˇzbami, jsem zjistil, ˇze vˇetˇsina sluˇzeb omezuje zobrazen´ı (nalezen´ı) asi na tis´ıc obr´azk˚ u. Takto velk´ a datab´aze je podle mnou proveden´ ych experiment˚ u k rozumn´emu v´ ysledku nedostateˇcn´ a. Naˇstˇest´ı nˇekter´e sluˇzby d´avaj´ı moˇznost vyhledat obr´azky r˚ uzn´ ych velikost´ı, ˇc´ımˇz lze z´ıskat v´ıce v´ıce obr´azk˚ u z jednoho dotazu. Nakonec pro stahov´an´ı obr´azk˚ u (a vytv´aˇren´ı datab´aze) vybral jako zdroj Google a jeho sluˇzbu Image Search. Samotn´ y skript je naprogramov´ an pomoc´ı PHP. (Vyuˇz´ıv´ a se toho, ˇze PHP m˚ uˇze fungovat jako interpret.) Na poˇzadovan´ y dotaz skript nalezne pomoc´ı sluˇzby obr´azky a jejich miniatury uloˇz´ı do jednoho adres´aˇre, kter´ y je pak pˇripraven pro indexov´ an´ı. K bakal´aˇrsk´e pr´aci je t´eˇz pˇriloˇzen skript, kter´ y dok´aˇze pomoc´ı Last.fm API nal´ezt pro konkr´etn´ıho uˇzivatele jeho nejposlouchanˇejˇs´ı skupiny a st´ahnout k nim obr´azky alb. Tyto staˇzen´e obr´azky pak lze pouˇz´ıt pro vytvoˇren´ı datab´aze.
30
Kapitola 5
V´ ysledky Cel´ y pl´anovan´ y syst´em se podaˇrilo zd´arnˇe implementovat. Webov´a ˇc´ast i sluˇzba zpracov´avaj´ıc´ı poˇzadavky je funkˇcn´ı a stabiln´ı. V´ ysledn´e obr´azky jsou si vˇernˇe podobn´e. Pˇri vzd´alenˇejˇs´ım pohledu na obr´azek, je p˚ uvodn´ı pˇredloha dobˇre rozpoznateln´a. Barevnost vybran´ ych obr´azk˚ u odpov´ıd´ a pˇredloze. Vybran´ y obr´azek pˇri pohledu z d´alky sedne do v´ ysledn´eho obr´azku. Hrany se algoritmus snaˇz´ı zachov´ avat. Pˇri pˇribl´ıˇzen´ı je vidˇet, ˇze pokud nˇekudy vedl ostr´ y, barevnˇe v´ yrazn´ y pˇrechod, algoritmus se snaˇz´ı nal´ezt obr´azek s velmi podobn´ ym pˇrechodem. V´ ykon programu je v r´amci moˇznost´ı rychl´ y – vytv´aˇren´ı pr˚ umˇern´e mozaiky trv´a v ˇr´ adu des´ıtek sekund maxim´alnˇe nˇekolik minut. T´ımto se potvrdil p˚ uvodn´ı pˇredpoklad, ˇze mozaiku nen´ı moˇzn´e vytv´aˇret za bˇehu, ale je nutn´e rozdˇelit zad´av´ an´ı a vytv´aˇren´ı do oddˇelen´ ych ˇc´ast´ı. Program zvl´ad´a datab´azi nˇekolika des´ıtek tis´ıc obr´azk˚ u v datab´azi. Programu neˇcin´ı probl´em vytvoˇrit opravdu velkou mozaiku (napˇr. vˇetˇs´ı neˇz 7000 × 5000 pixel˚ u). U vˇetˇs´ıch obr´azk˚ u vznik´a sp´ıˇse probl´em s jejich n´asledn´ ym zobrazen´ım. Na druhou stranu algoritmus sice relativnˇe dobˇre zvl´ad´ a hrany, ale jemn´e postupn´e pˇrechody ve vˇetˇsinˇe pˇr´ıpad˚ u p˚ usob´ı probl´emy a ve v´ ysledn´em obr´azku se takov´ yto pˇrechod zv´ yrazn´ı. V´ ykon je sice relativnˇe dostateˇcn´ y pro testovan´e datab´aze o obr´azky, n´avrh algoritm˚ u pro v´ ybˇer mozaiky zp˚ usobuje line´arn´ı n´aroˇcnost vytv´aˇren´ı mozaiky. Pˇri pouˇzit´ı o ˇr´ ad vˇetˇs´ı datab´aze (miliony obr´azk˚ u) by zpomalen´ı bylo citeln´e. V programu existuje nˇekolik konstantn´ıch parametr˚ u, kter´e ovlivˇ nuj´ı v´ yslednou mozaiku, uˇzitetel nem´a moˇznost jejich hodnotu mˇenit. Tyto hodnoty jsou experimenty nastaveny kompromisnˇe tak, aby v´ ypoˇcet nebyl pˇr´ıliˇs dlouh´ y a aby byl dostateˇcnˇe kvalitn´ı. V´ ybˇer obr´azku, kter´ y bude pouˇzit do mozaiky, se skl´ad´ a ze tˇr´ı u ´rovn´ı. Mezi kaˇzdou u ´rovn´ı je definov´an poˇcet obr´azk˚ u, kter´e jsou zaˇrazeny i do dalˇs´ı u ´rovnˇe. Zvˇetˇsen´ım tˇechto hodnot by mohlo k velk´emu n´ar˚ ustu n´aroˇcnosti. Dalˇs´ı konstantou je penalizace za pouˇzit´ı obr´azku. Snahou samozˇrejmˇe je, aby se obr´azky vedle sebe co nejm´enˇe opakovaly, proto je pˇri pouˇzit´ı obr´azku pˇripoˇctena penalizace, kter´a mu zhorˇs´ı v´ ybˇer v n´asleduj´ıc´ıch kroc´ıch. M˚ uˇze se ale st´at, ˇze obr´azek je nejlepˇs´ı kandid´ at a vloˇzen´ı jin´eho by pokazilo celkov´ y dojem z mozaiky. Z tohoto d˚ uvodu je penalizace nastavena pˇres mnoho pokus˚ u pevnˇe. Asi nejvˇetˇs´ı slabinou pˇri vytv´aˇren´ı mozaiky je datab´aze obr´azk˚ u. Ide´aln´ı vytv´aˇren´ı datab´aze je ruˇcnˇe nebo z obr´azk˚ u, kde je zaruˇceno, ˇze obr´azek opravdu obsahuje poˇzadovanou t´ematiku. Napˇr. pˇri hled´an´ı aut by bylo ide´aln´ı, aby na kaˇzd´em obr´azku bylo auto, ovˇsem vyhled´avac´ı sluˇzby nab´ıdnou obr´azky vzhledovˇe ne zcela odpov´ıdaj´ıc´ı t´eto pˇredstavˇe. 31
5.1
Popis programu pro pˇ r´ıkazovou ˇ r´ adku
Program pro pˇr´ıkazovou ˇr´adku je nejbl´ıˇze implementaci vlastn´ıho algoritmu a tud´ıˇz poskytuje nejv´ıce moˇznost´ı pr´ace s mozaikou i datab´azemi obr´azk˚ u. N´apovˇeda ke vˇsem parametr˚ um programu se z´ısk´ av´ a pˇr´ıkazem: Mosaic.Console.exe --help Vytvoˇren´ı souboru auta.db z adres´aˇre auta a nastaven´ı kl´ıˇcov´eho slova na car : Mosaic.Console.exe --keyword car --lookup auta --load_files --save_db auta.db Vytvoˇren´ı mozaiky z obr´azku male auto.png s datab´az´ı ze souboru auta.db jako JPEG do souboru velke auto.jpg se vstupn´ı velikost´ı 16 × 16 pixel˚ u a v´ ystupn´ı velikost´ı vloˇzen´ ych obr´azk˚ u 32 × 32 pixel˚ u: Mosaic.Console.exe --input male_auto.png --output velke_auto.jpg --jpeg --load_db auta.db --tile 16 --size 32
5.2
Popis webov´ e sluˇ zby
5.3
Uk´ azky v´ ystup˚ u
Ke shodnocen´ı v´ ysledku bakal´aˇrsk´e pr´ace pˇrikl´ ad´ am dvˇe v´ ysledn´e mozaiky (obr´azky 5.1 a 5.2).
5.4
ASCII art
Jedna z moˇzn´ ych vyuˇzit´ı t´eto bakal´ aˇrsk´e pr´ace je moˇznost pouˇz´ıvat ji k tvoˇren´ı ASCII artu (skl´ad´an´ı p´ısmen a znak˚ u tak, aby z vˇetˇs´ı d´alky p˚ usobil v´ ysledek jako obr´azek). Pokud se jako vstupn´ı datab´aze pouˇzij´ı obr´azky tvoˇren´e p´ısmeny je pomoc´ı programu moˇzn´e vygenerovat ASCII art. S vhodnou datab´az´ı je dokonce moˇzn´e vygenerovat barevnou verzi. Uk´azka za pouˇzit´ı ˇcernob´ıl´e datab´aze je na obr´azku 5.3.
32
↑ Vstupní obrázek → Výstupní obrázek vstupní dlaždice 8 × 8 pixelů, výstup 32 × 32, použity obrázky nalezené pomocí Google pro dotaz “face” ↓ Tentýž výstup s detailem tváře
Obr´azek 5.1: Pˇr´ıklad vstupu a v´ ystupu
33
↑ →
↓
Obr´azek 5.2: Porshe Cayman
34
↑ Vstupní obrázek - Les v Soběšicích → Výstupní obrázek - ukázka ASCII artu ↓ Detail části obrázku lesa - obrázek zobrazuje část kmene a využití velké části znaků
Obr´azek 5.3: Dalˇs´ı z moˇznost´ı vyuˇzit´ı – ASCII art
35
Kapitola 6
Z´ avˇ er 6.1
Moˇ zn´ a rozˇ s´ıˇ ren´ı
Na z´avˇer uvedu nˇekolik dalˇs´ıch moˇznost´ı na dalˇs´ı vylepˇsen´ı a rozˇs´ıˇren´ı. Tyto n´apady vznikly pˇri implementaci a jejich zaˇclenˇen´ı by bylo n´aroˇcn´e a vyˇzadovalo by mnoho zmˇen do jiˇz zpracovan´ ych postup˚ u. Dalˇs´ı moˇzn´ a rozˇs´ıˇren´ı jdou mimo rozsah a zad´an´ı t´eto bakal´ aˇrsk´e pr´ace.
6.1.1
Podpora dalˇ s´ıch grafick´ ych form´ at˚ u
Aktu´aln´ı implementace podporuje ˇcten´ı a z´apis pouze do dvou r˚ uzn´ ych form´at˚ u – JPEG a PNG. Tyto dva form´aty byly vybr´any, protoˇze vˇetˇsina obr´azk˚ u je dostupn´ ych pr´avˇe v tˇechto form´atech, dovoluj´ı postupn´ y z´apis do souboru (v pamˇeti nemus´ı b´ yt uchov´ an cel´ y obr´azek), existuje volnˇe ˇsiˇriteln´a implementace a pouˇzit´ı v projektech je jednoduch´e. Dalˇs´ım rozˇs´ıˇren´ım by mohla b´ yt podpora ˇcten´ı i z´apisu dalˇs´ıch rastrov´ ych obr´azk˚ u – napˇr. GIF, BMP nebo TIFF.
6.1.2
Pouˇ zit´ı velk´ ych fotografi´ı a jejich ˇ c´ ast´ı
Jako rozˇs´ıˇren´ı by tak´e mohlo b´ yt doprogramov´ ano naˇcten´ı velk´e fotografie a jej´ı rozˇrezn´ an´ı na menˇs´ı. Probl´emem je v´ ybˇer obr´azk˚ u s dostateˇcnˇe v´ yrazn´ ymi jednotliv´ ymi ˇc´ astmi. ˇ asteˇcnˇe v aplikaci podpora pro rozˇrez´ C´ av´ an´ı existuje, jej´ı pouˇzit´ı a zdokumentov´ an´ı nar´aˇz´ı na probl´em nesluˇcitelnosti s aktu´aln´ım rozvrˇzen´ım datab´aze a s vnitˇrn´ımi pochody, kter´e se staraj´ı o cachov´an´ı obr´azk˚ u. Toto rozˇs´ıˇren´ı se sp´ıˇse uk´azalo jako vhodn´ y test pro spr´avnou funkˇcnost algoritmu, kdy byl proveden pokus o sestaven´ı obr´azku z jeho vlastn´ıch ˇc´ ast´ı. Poˇctem u ´spˇeˇsn´ ych um´ıstˇen´ım ˇc´asti na p˚ uvodn´ı m´ısto lze mˇeˇrit spr´avnost a pˇresnost algoritmu.
6.1.3
Sd´ılen´ı pamˇ eti
Naˇcten´ı datab´aze do pamˇeti z disku je relativnˇe v´ ykonovˇe n´aroˇcn´ a operace, nav´ıc v aktu´aln´ı implementaci je tato struktura vytv´aˇrena pro kaˇzd´e zpracov´ an´ı vytv´aˇrena zvl´aˇst’. Toto implementaˇcn´ı rozhodnut´ı bylo zvoleno kv˚ uli tomu, ˇze je moˇzn´e pouˇz´ıvat r˚ uzn´e datab´ aze obr´azk˚ u pˇri vytv´aˇren´ı. Nav´ıc by mohl vzniknout probl´em pˇri cachov´ an´ı (aktu´alnˇe to znamen´a naˇcten´ı a zmˇena velikosti na poˇzadovan´e rozmˇery – tyto hodnoty se mohou mezi poˇzadavky mˇenit, musel by b´ yt zvolen jin´ y pˇr´ıstup pˇri implementaci).
36
N´avrh zlepˇsen´ı je takov´ y, ˇze tato datab´aze v pamˇeti by mohla b´ yt stabiln´ı, nemˇela by se vytv´aˇret znovu pˇri kaˇzd´em poˇzadavku, a pokud by program bˇeˇzel jako sluˇzba, mohla by tato pamˇet’ b´ yt vyuˇz´ıv´ana opakovanˇe.
6.1.4
Hash obr´ azk˚ u
Aktu´aln´ı implementace je sice rychl´ a, ale vyhled´av´ an´ı podobn´ ych obr´azk˚ u by pˇri n´arustech datab´aze mohlo v´est k probl´em˚ um s rychlost´ı. K vyˇreˇsen´ı tohoto probl´emu by mohlo b´ yt vyuˇzit´ı obr´azkov´eho hashe (viz. zdroj [17]). Hash obr´azk˚ u by mˇel m´ıt takov´e vlastnosti, ˇze vzhledovˇe podobn´e obr´azky by mˇely m´ıt takt´eˇz podobn´e hashe. A naopak rozd´ıln´e obr´azky by hash mˇely m´ıt co nejv´ıce rozd´ıln´e. Pˇri hled´an´ı podobn´ ych obr´azk˚ u by se mohlo hledat podle hash˚ u a pˇri pouˇzit´ı spr´avn´ ych algoritm˚ u, by mohlo doj´ıt k urychlen´ı hled´an´ı.
6.1.5
Rozestavˇ en´ı obr´ azk˚ u
(a)
(b)
Obr´azek 6.1: Moˇznost pouˇz´ıt i jin´e rozestavˇen´ı dlaˇzdic Aktu´aln´ı implementace poˇc´ıt´ a se ˇctvercov´ ym rozestavˇen´ım mozaiky. Jako rozˇs´ıˇren´ı do budoucna by v´ yslen´a mozaika mohla b´ yt skl´ad´ ana z jin´ ych tvar˚ u, kter´e lze uspoˇr´ adat do pravideln´e mˇr´ıˇzky. Na obr´azku 6.1 je provedeno visu´aln´ı porovn´ an´ı rozm´ıstˇen´ı stejn´ ych barev do pravideln´e ˇctvercov´e a ˇsesti´ uheln´ıkov´e mˇr´ıˇzky.
6.1.6
Grafick´ e uˇ zivatelsk´ e rozhran´ı
Moˇzn´ ym rozˇs´ıˇren´ım by mohlo b´ yt samostatn´e uˇzivatelsk´e rozhran´ı nez´avisl´e na SQL datab´azi. Moˇzn´ y vzhled je uveden na obr´azku 6.2. Vytvoˇren´ı uˇzivatelsk´eho rozhran´ı je d´ıky modularitˇe projektu moˇzn´e vystavˇet na Mosaic.Lib.Static (v pˇr´ıpadˇe pouˇzit´ı C/C++ nebo i jin´eho jazyka, kter´ y je moˇzn´ y propojit s moduly psan´ ymi v jazyce C) nebo Mosaic.Class pro .NET platformu (architektura Win32, v pˇr´ıpadˇe portov´an´ı Mosaic.Lib.Dynamic i dalˇs´ı).
6.1.7
Zobrazen´ı velk´ ych obr´ azk˚ u online
Pro webovou sluˇzbu je moˇzn´e pouˇz´ıt prohl´ıˇzeˇc velk´ ych obr´azk˚ u. Uˇzivatel pak m˚ uˇze plynule proch´azet obr´azkem, zvˇetˇsovat a zmenˇsovat a pˇritom jsou k nˇemu ze serveru pˇren´ aˇsena pouze data minim´alnˇe nutn´a pro zobrazen´ı. Takov´ ymto projektem je napˇr´ıklad IIPImage http://iipimage.sourceforge.net/
37
Obr´azek 6.2: Moˇzn´ y vzhled uˇzivatelsk´eho rozhrann´ı
6.1.8
Rozˇ s´ıˇ ren´ı webov´ e sluˇ zby
Aktu´aln´ı implementace webov´e sluˇzby nepˇrin´ aˇs´ı ˇz´ adn´ y mechanismus zabezpeˇcen´ı ˇci uˇzivatelsk´ ych u ´ˇct˚ u. Pˇri implementaci by bylo moˇzn´e pˇridat moˇznost zvolen´ı veˇrejn´e nebo neveˇrejn´e mozaiky nebo moˇznost zas´ıl´ an´ı informace o zpracov´ an´ı mozaiky na email. V pˇr´ıpadˇe opravdov´eho nasazen´ı by bylo potˇreba vytvoˇrit zabezpeˇcenou administraci, kde by bylo moˇzn´e poˇzadavky upravovat a mazat. Takt´eˇz by mˇelo b´ yt moˇzn´e spravovat bˇeh samotn´e sluˇzby – moˇznost pozastavit, resetovat a znovu spustit.
38
6.2
Z´ avˇ er
P˚ uvodn´ı n´avrh se podaˇrilo u ´spˇeˇsnˇe implementovat. Pˇred vlastn´ım zad´an´ım pr´ace jsem mˇel k dispozici z´akladn´ı pro osobn´ı potˇreby napsanou implementaci algoritmu, takˇze jsem mˇel z ˇceho vych´ azet a plno zkuˇsenost´ı jsem jiˇz z´ıskal dˇr´ıve. Mohl jsem se tedy soustˇredit na rozˇsiˇrov´ an´ı a zlepˇsov´ an´ı. Opravdu velkou v´ yzvou byly vˇsechny pouˇzit´e optimalizace, p˚ uvodn´ı implementace byla naps´ana narychlo a nikdy se nepoˇc´ıtalo s t´ım, ˇze by mohla bˇeˇzet jako sluˇzba (tedy s minim´aln´ı pamˇet’ovou n´aroˇcnost´ı a bez memory leak˚ u). Pouˇzit´ı vˇetˇsiny algoritm˚ u bylo znovu zv´aˇzeno a vˇetˇsinou byly algoritmy nahrazeny jin´ ymi nebo pˇreps´ any. Dalˇs´ım velk´ ym u ´kolem bylo tento p˚ uvodnˇe v jazyce C psan´ y program zprovoznit tak, aby fungoval a spolupracoval s k´odem pro .NET framework. K tomuto byla pouˇzita jako mezistupeˇ n .dll knihovna. N´asledn´e spojen´ı s datab´az´ı a zapracov´ an´ı jako jednoduch´ y informaˇcn´ı syst´em bylo jiˇz d´ıky pouˇzit´ ym technologi´ım relativnˇe jednoduch´e. P˚ uvodnˇe jsem zvaˇzoval m´ısto pouˇzit´ı Microsoft Internet Information Services (IIS) moˇznost spolupr´ace s Apache serverem a naprogramov´an´ı webov´e sluˇzby v PHP. Nakonec jsem se rozhodnul pro tuto variantu hlavnˇe kv˚ uli osobn´ımu z´ajmu o .NET platformu. Dalˇs´ı velmi zaj´ımavou ˇc´ast´ı je Formatter (kapitola 3.8), kter´ y velmi zjednoduˇsil moˇznost pr´ace s datab´az´ı. Moˇzn´a k ˇcasu v´ yvoje a testov´ an´ı se jedn´a o zbyteˇcnˇe sloˇzit´ y n´astroj. Jeho znovuvyuˇzitelnost je ovˇsem z m´eho pohledu velk´ a a zjednoduˇsuje k z´akladn´ım operac´ım nad relaˇcn´ı datab´az´ı. V z´avˇeru jsem se pokusil jeˇstˇe naznaˇcit moˇzn´ a dalˇs´ı vylepˇsen´ı a cesty, kudy by dalˇs´ı v´ yvoj mohl pokraˇcovat. Vytv´aˇren´ı mozaiky je velice zaj´ımavou ˇcinnost´ı a mnoho lid´ı obr´azkov´e mozaiky fascinuj´ı.
39
Literatura [1] Troelsen, A.: C# a .NET 2.0 profesion´ alnˇe. 1. vyd´an´ı, Brno: ZONER Press, 2006, 1198 s, ISBN 80-86815-42-0 [2] IJG.ORG: Independent JPEG Group. [online], [cit. 2008-11-27], http://www.ijg.org/ [3] The Client Server Architecture. [online], [cit. 2009-01-10], http: //www.webdevelopersnotes.com/basics/client_server_architecture.php3 [4] Leach P., Microsoft, Mealling M, Refactored Networks, LLC, Salz E, DataPowe Technology Inc: RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace [online]. [ˇcervenec 2005], [cit. 2008-12-15], [online], http://www.ietf.org/rfc/rfc4122.txt [5] Fieldng R., UC Irvine, Gettys J., Compaq/W3C, Mogul J., Frystyk H., W3C/MIT, Masinter L., Xerox, Leach P., Microsoft, Berners-Lee T.: RFC 2116: Hypertext Transfer Protocol – HTTP/1.1, [ˇcerven 1999], [cit. 2008-12-26], [online], http://www.ietf.org/rfc/rfc2616.txt [6] Microsoft Corporation: MSDN: Guid Structure (System). [online], [cit. 2008-12-15], http://msdn.microsoft.com/en-us/library/system.guid.aspx [7] Microsoft Corporation: Dynamic-Link Libraries. [online], [cit. 2008-12-18], http://msdn.microsoft.com/en-us/library/ms682589.aspx [8] Microsoft Corporation: Common Language Runtime. [online], [cit 2008-01-04], http://msdn.microsoft.com/en-us/library/8bs2ecf4.aspx [9] Microsoft Corporation: ASP.NET State Management. [online], [cit 2008-01-05], http://msdn.microsoft.com/en-us/library/y5y3c2c5(VS.80).aspx [10] ECMA-334: C# Language Specification [online], 4th edition, [cit. 2009-01-03], http://www.ecma-international.org/publications/standards/Ecma-334.htm [11] Thyssen, Anthony: Hints, Tips and Notes on bulk sorting of images [online], [cit. 2008-01-06], http://www.cit.gu.edu.au/~anthony/info/graphics/image_comparing [12] Tezaur, Radka: Co se dˇeje, kdyˇz se obr´ azky zmenˇsuj´ı a zvˇetˇsuj´ı [online]. 2001-12-10, [cit. 2009-01-08] http://www.paladix.cz/clanky/ co-se-deje-kdyz-se-obrazky-zmensuji-a-zvetsuji.html
40
[13] Barvy: Vlnov´e d´elky [online]. [cit. 2009-01-08] http://barvy.xf.cz/teorie/vlnove-delky ˇ ak, Karel: Historie relaˇcn´ıch datab´ [14] Z´ az´ı [online], 2001-10-19, [cit 2008-01-08], http://www.root.cz/clanky/historie-relacnich-databazi/ [15] Horv´ath, Tom´aˇs: Teoretick´y u ´vod do relaˇcn´ıch datab´ az´ı [online], 2007-11-08, [cit. 2008-01-09], http://programujte.com/index.php?akce=clanek&cl= 2007110801-teoreticky-uvod-do-relacnich-databazi [16] Reolofs, Greg: Into to PNG Featurs [online], 2008-01-30, [cit. 2009-01-10], http://www.libpng.org/pub/png/pngintro.html [17] Johnson M.: Image Hashing. [online], [cit. 2008-01-12], http://www.eecs.berkeley.edu/~mjohnson/abstracts/hashing.htm
41
Pˇ r´ılohy Pˇ riloˇ zen´ e DVD Na pˇriloˇzen´em DVD se nach´az´ı: • Zdrojov´e soubory – kompletn´ı zdrojov´e soubory ke vˇsem modul˚ um v jazyce C, C#, PHP, SQL skripty na vytvoˇren´ı datab´aze, zkompilovan´e verze pouˇzit´ ych knihoven (libpng, jpeglib) • Kompilovan´a verze – bin´arn´ı spustiteln´e verze program˚ u (program pro pˇr´ıkazovou ˇr´adku, sluˇzba, webov´ y projekt pro IIS), nav´ıc je k dispozici jednoduch´e GUI • Datab´aze obr´azk˚ u – pˇredpˇripraven´e datab´aze s motivy: auta, pˇr´ıroda, tv´aˇre, ovoce, albumarty, fonty pro ASCII art (ˇcernob´ıl´ y i barevn´ y) • Uk´azky vstupu i v´ ystupu – vˇsechny vstupn´ı i v´ ysledn´e obr´azky pouˇzit´e v t´eto bakal´aˇrsk´e pr´aci, d´ale pak i dalˇs´ı, vˇse v p˚ uvodn´ım vysok´em rozliˇsen´ı • Prezentaˇcn´ı video – uk´azka funkˇcnosti bakal´ aˇrsk´e pr´ace: vloˇzen´ı poˇzadavku, zobrazen´ı pr˚ ubˇehu v´ ypoˇctu a v´ ysledn´eho obr´azku • Video – moˇzn´e vyuˇzit´ı t´eto bakal´ aˇrsk´e pr´ace vytvoˇren´e pomoc´ı programu Video.Animator
42