ˇ ´ vysoke ´ uc ˇen´ı technicke ´ v Praze Cesk e ´ Fakulta elektrotechnicka ˇr ˇen´ı Katedra me
Zpracov´ an´ı sign´ alu z obrazov´ eho senzoru s vyuˇ zit´ım OS Linux pro embedded zaˇr´ızen´ı
Bc. Jan Breuer
Vedouc´ı pr´ace: Ing. Jan Fischer, CSc.
Diplomov´a pr´ace kvˇeten 2009
Abstrakt C´ılem t´eto diplomov´e pr´ace je vytvoˇren´ı aplikace pro zpracov´an´ı obrazu ve vestavn´em (embedded) zaˇr´ızen´ı. Na c´ılov´e zaˇr´ızen´ı byl portov´an operaˇcn´ı syst´em Linux. V tomto syst´emu byla vytvoˇrena aplikace detekuj´ıc´ı pohyb v obraze. V pr´aci jsou d´ale porovn´any rozd´ıly mezi detekc´ı pohybu pomoc´ı senzoru PIR a detekc´ı pohybu v obraze.
Abstract The purpose of this Diploma’s thesis is to develop an image processing application on an embadded device. For this purpose, Linux had to be ported on the target device in order to develop a picture motion detection application on it. Furthermore, differences between a PIR sensor and picture motion detection are compared.
Podˇ ekov´ an´ı Chtˇel bych podˇekovat Ing. Janu Fischerovi, CSc., vedouc´ımu m´e diplomov´e pr´ace, za podnˇetn´e rady a pˇripom´ınky. Dˇekuji tak´e firmˇe JabloCOM, pˇredevˇs´ım pak Ing. Jiˇr´ımu Holnigerovi, za poskytnut´ı z´azem´ı pro tvorbu pr´ace a za poskytnut´ı vzorku kamery EYE-02. D´ale bych chtˇel podˇekovat sv´e rodinˇe za podporu a fin´aln´ı korektury.
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem svou diplomovou pr´aci vypracoval samostatnˇe a pouˇzil jsem pouze podklady (literaturu, projekty, SW atd.) uveden´e v pˇriloˇzen´em seznamu.
V Praze dne ...............
......................................... podpis
Obsah 1 Rozbor problematiky
7
2 Bezpeˇ cnostn´ı kamera JabloCOM EYE-02 2.1 Popis bezpeˇcnostn´ı kamery EYE-02 . . . . . . . . . . . . . . . . . 2.2 Hardwarov´e uspoˇra´d´an´ı kamery EYE-02 . . . . . . . . . . . . . .
10 10 11
3 Operaˇ cn´ı syst´ em Linux ´ 3.1 Uvod do operaˇcn´ıho syst´emu Linux . . . . . . . . . . . . 3.1.1 Obecn´e vlastnosti operaˇcn´ıch syst´em˚ u . . . . . . 3.1.2 Existuj´ıc´ı operaˇcn´ı syst´emy pro vestavn´a zaˇr´ızen´ı 3.1.3 Linuxov´e distribuce pro vestavn´a zaˇr´ızen´ı . . . . . 3.1.4 V´ yhody a nev´ yhody pouˇzit´ı OS Linux . . . . . . 3.2 Popis nˇekter´ ych vlastnost´ı OS Linux . . . . . . . . . . . 3.2.1 Souborov´ y syst´em a adres´aˇrov´a struktura . . . . . 3.2.2 Virtu´aln´ı soubory zaˇr´ızen´ı . . . . . . . . . . . . . 3.2.3 Operace se soubory . . . . . . . . . . . . . . . . . 3.2.4 Sd´ılen´e knihovny a knihovna libc . . . . . . . . . 3.2.5 Procesy a vl´akna . . . . . . . . . . . . . . . . . . 3.3 Portov´an´ı OS Linux na nov´e zaˇr´ızen´ı . . . . . . . . . . . 3.3.1 V´ yvojov´e n´astroje jazyka C pro procesory ARM . ´ 3.3.2 Uprava a kompilace j´adra Linuxu . . . . . . . . . 3.3.3 Bal´ıˇckovac´ı syst´em distribuc´ı . . . . . . . . . . . . 3.3.4 Pˇr´ıprava obrazu souborov´eho syst´emu . . . . . . . 3.4 Inicializace a start syst´emu . . . . . . . . . . . . . . . . . 3.4.1 Bootloader – zavadˇeˇc syst´emu . . . . . . . . . . . 3.4.2 Start linuxov´eho j´adra . . . . . . . . . . . . . . .
14 14 14 15 16 16 17 17 19 21 21 22 23 23 25 25 26 27 27 29
4
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
3.4.3 Souborov´ y syst´em v pamˇeti RAM . . . 3.4.4 Program init a spuˇstˇen´ı sluˇzeb . . . . . 3.5 Pˇr´ıstup k zaˇr´ızen´ı pro digitalizaci obrazu . . . . 3.5.1 Inicializace kamery a z´ısk´an´ı informac´ı . 3.5.2 Vyˇc´ıt´an´ı obr´azk˚ u ze senzoru . . . . . . . 3.6 Testov´an´ı n´aroˇcnosti detekce pohybu . . . . . . 3.6.1 Aplikace pro testov´an´ı n´aroˇcnosti detekce 3.7 Komunikace s vestavn´ ym zaˇr´ızen´ım . . . . . . . 3.7.1 Zp˚ usoby komunikace s kamerou . . . . . 3.7.2 Spouˇstˇen´ı program˚ u v kameˇre . . . . . . 3.7.3 Sd´ılen´ı soubor˚ u . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
29 31 31 32 33 33 34 35 35 35 36
. . . . . . . . . . . . . . . . . . .
38 38 39 39 39 45 47 49 49 50 50 50 51 51 51 51 52 52 52 53
5 Vlastn´ı ˇ reˇ sen´ı detekce pohybu 5.1 Optimalizace v´ ypoˇctu . . . . . . . . . . . . . . . . . . . . . . . . .
54 54
4 Detekce pohybu v obraze 4.1 Pˇrehled projekt˚ u zab´ yvaj´ıc´ıch se detekc´ı pohybu v obraze . 4.2 Metody detekce pohybu v obraze . . . . . . . . . . . . . . 4.2.1 Definice . . . . . . . . . . . . . . . . . . . . . . . . 4.2.2 Metody vyuˇz´ıvaj´ıc´ı model pozad´ı . . . . . . . . . . 4.2.3 Metody zaloˇzen´e na korelaci obr´azk˚ u . . . . . . . . 4.2.4 Detekce pohybu kamery . . . . . . . . . . . . . . . 4.3 Nastaven´ı parametr˚ u detekce . . . . . . . . . . . . . . . . . 4.3.1 Volba prahu rozd´ılov´eho obr´azku . . . . . . . . . . 4.4 Poˇzadavky na detekci pohybu v obraze . . . . . . . . . . . 4.4.1 Detekce pohybu ve venkovn´ım prostˇred´ı . . . . . . 4.4.2 Adaptace na zmˇeny pozad´ı . . . . . . . . . . . . . . 4.4.3 Necitlivost na zmˇeny celkov´eho osvˇetlen´ı sc´eny . . . 4.4.4 Potlaˇcen´ı faleˇsn´ ych poplach˚ u. . . . . . . . . . . . . 4.4.5 V´ ypoˇcet v re´aln´em ˇcase . . . . . . . . . . . . . . . 4.4.6 Filtrace ˇsumu . . . . . . . . . . . . . . . . . . . . . 4.5 Implementace detekce pohybu v obraze . . . . . . . . . . . 4.5.1 Implementace metod v programu Matlab . . . . . . 4.5.2 Implementace metod s pouˇzit´ım knihovny OpenCV 4.5.3 Vlastn´ı ˇreˇsen´ı implementace detekce pohybu . . . .
5
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
5.1.1 Pˇr´ıstup k prvk˚ um pole . . . . . . . . . . . . . . . . . 5.1.2 Rychl´ y v´ ypoˇcet odmocniny . . . . . . . . . . . . . . . 5.1.3 Dˇelen´ı cel´ ych ˇc´ısel . . . . . . . . . . . . . . . . . . . . 5.2 Poˇzadavky na prostˇred´ı pro detekci pohybu . . . . . . . . . 5.3 Pouˇzit´a metoda pro detekci pohybu . . . . . . . . . . . . . . 5.3.1 Zmenˇsen´ı nasn´ıman´eho obrazu pro potˇreby detekce . 5.3.2 Stabilizace obrazu kamery . . . . . . . . . . . . . . . 5.3.3 Celkov´a zmˇena jasu v obraze . . . . . . . . . . . . . 5.3.4 Modelov´an´ı odhadu pozad´ı sc´eny . . . . . . . . . . . 5.3.5 Detekce objekt˚ u na popˇred´ı . . . . . . . . . . . . . . 5.3.6 Zpracov´an´ı detekovan´ ych bod˚ u popˇred´ı . . . . . . . . 5.3.7 Zpracov´an´ı detekovan´ ych souvisl´ ych komponent . . . 5.3.8 Namˇeˇren´e v´ ysledky v r˚ uzn´ ych prostˇred´ıch . . . . . . 5.4 Detekce pohybu pomoc´ı senzoru PIR . . . . . . . . . . . . . 5.4.1 Pasivn´ı infraˇcerven´ y senzor . . . . . . . . . . . . . . . 5.4.2 Typick´e v´ ystupn´ı pr˚ ubˇehy sign´al˚ u . . . . . . . . . . . 5.4.3 Zpracov´an´ı sign´alu z ˇcidla . . . . . . . . . . . . . . . 5.4.4 Ruˇsiv´e vlivy senzoru PIR . . . . . . . . . . . . . . . 5.4.5 Porovn´an´ı detekce pohybu v obraze se senzorem PIR
. . . . . . . . . . . . . . . . . . .
6 Uˇ zivatelsk´ e rozhran´ı a vizualizace detekce pohybu 6.1 Poˇc´ıtaˇcov´ y program pro demonstraci detekce pohybu v obraze 6.2 Demonstrace detekce pohybu pˇr´ımo v kameˇre EYE-02 . . . . . 6.3 Ovl´ad´an´ı kamery z osobn´ıho poˇc´ıtaˇce . . . . . . . . . . . . . . 6.4 Ovl´ad´an´ı kamery pˇres mobiln´ı telefon . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . . . . . . .
54 58 59 60 60 62 62 63 64 65 66 66 67 67 67 71 71 73 73
. . . .
75 75 77 77 78
7 Z´ avˇ er
80
Obsah CD
84
Literatura
86
6
Kapitola 1 Rozbor problematiky Tato diplomov´a pr´ace se zab´ yv´a nˇekolika oblastmi, kter´e umoˇzn ˇuj´ı zpracov´an´ı obrazu ve vestavn´em zaˇr´ızen´ı. Pro vytvoˇren´ı v´ ysledn´e aplikace byl zvolen operaˇcn´ı syst´em Linux, kter´ y mus´ı b´ yt upraven pro potˇreby kaˇzd´eho specifick´eho vestavn´eho zaˇr´ızen´ı. Zpracov´an´ı obrazu je demonstrov´ano na detekci pohybu v obraze. V t´eto ˇca´sti je br´an ohled na v´ ypoˇcetn´ı n´aroˇcnost pouˇzit´ ych algoritm˚ u. C´ılov´e zaˇr´ızen´ı je zabezpeˇcovac´ı kamera EYE-02 firmy JabloCOM. V kameˇre je pouˇz´ıv´an propriet´arn´ı syst´em, kter´ y je pro tuto pr´aci nahrazen operaˇcn´ım syst´emem Linux. Pouˇzit´ı operaˇcn´ıho syst´emu pˇrin´aˇs´ı oproti propriet´arn´ımu syst´emu nˇekolik v´ yhod. V´ yvoj jednotliv´ ych ˇca´st´ı syst´emu m˚ uˇze prob´ıhat naprosto oddˇelenˇe. Na jednotliv´e ˇc´asti mohou b´ yt naps´any testovac´ı skripty, kter´e automaticky odhal´ı regrese v nov´ ych verz´ıch. Operaˇcn´ı syst´em pˇrin´aˇs´ı dokonalejˇs´ı spr´avu proces˚ u a pamˇeti a poskytuje v´ yvoj´aˇri definovan´a aplikaˇcn´ı rozhran´ı pro pˇr´ıstup k zaˇr´ızen´ım. Pro operaˇcn´ı syst´em Linux bylo naps´ano mnoˇzstv´ı aplikac´ı, kter´e jsou zveˇrejnˇeny se zdrojov´ ym k´odem. Mnoh´e z nich lze pouˇz´ıt pro vestavn´a zaˇr´ızen´ı bez velk´ ych zmˇen. T´ım je moˇzn´e uˇsetˇrit ˇcas v´ yvoje stejn´e funkcionality pro propriet´arn´ı syst´em. J´adro Linuxu se mus´ı pˇripravit pro urˇcen´e zaˇr´ızen´ı. Cel´ y syst´em Linux zab´ır´a vˇetˇs´ı mnoˇzstv´ı pamˇeti neˇz p˚ uvodn´ı propriet´arn´ı syst´em. Je tedy nutn´e nal´ezt zp˚ usob pro uloˇzen´ı j´adra syst´emu a pro uloˇzen´ı souborov´eho syst´emu. Se zp˚ usobem uloˇzen´ı tak´e souvis´ı zp˚ usob startu cel´eho syst´emu. Pro start syst´emu je tˇreba vytvoˇrit jednoduch´ y program, kter´ y cel´ y syst´em zavede do pamˇeti. Operaˇcn´ı syst´em Linux pˇrin´aˇs´ı pro kameru v´ yhody v podobˇe abstrakce hard7
ware. Aplikace vyvinut´e pro c´ılovou platformu mohou b´ yt pouˇzity beze zmˇeny na jin´ ych zaˇr´ızen´ıch se stejn´ ym procesorem. Aplikace jsou ps´any v jazyce C a C++ a je tedy velice snadn´e je pouˇz´ıt i na jin´ ych platform´ach. D´ıky abstrakci hardware je tak moˇzn´e vyv´ıjet, testovat a spouˇstˇet aplikace na jin´em stroji, napˇr´ıklad osobn´ım poˇc´ıtaˇci. Pro c´ılov´e zaˇr´ızen´ı je tˇreba sestavit upraven´e j´adro a sadu utilit pro vytvoˇren´ı z´akladn´ıho souborov´eho syst´emu. D´ale je nutn´e vytvoˇrit ovladaˇce zaˇr´ızen´ı, kter´a nejsou souˇca´st´ı hlavn´ı ˇrady j´adra. K ovladaˇc˚ um zaˇr´ızen´ı mus´ı b´ yt naps´any sluˇzby, kter´e s daty zach´azej´ı. Pro kamery EYE-02 je napˇr´ıklad nutn´e vytvoˇrit ovladaˇc senzoru PIR a d´ale vytvoˇrit sluˇzbu, kter´a bude tento senzor hl´ıdat z uˇzivatelsk´eho prostoru operaˇcn´ıho syst´emu. C´ılov´e zaˇr´ızen´ı nem´a obrazovku, je tedy nutn´e nal´ezt zp˚ usob pˇr´ıstupu. Pro tyto u ´ˇcely jsou nejvhodnˇejˇs´ı s´eriov´e porty nebo porty USB. D´ale je nutn´e nal´ezt zp˚ usob pˇrenosu velk´eho objemu informac´ı v podobˇe obr´azk˚ u. Dalˇs´ım u ´kolem je navrhnout metodu detekce pohybu v obraze. Existuje mnoho projekt˚ u a odborn´ ych ˇcl´ank˚ u, kter´e se touto problematikou zab´ yvaj´ı. Nˇekter´e metody jsou n´aroˇcnˇejˇs´ı, ale dok´aˇz´ı l´epe popsat sledovan´e prostˇred´ı, jin´e metody jsou jednoduˇsˇs´ı, ale horˇs´ı v identifikaci pohybuj´ıc´ıch se objekt˚ u. Je tˇreba nal´ezt vhodnou metodu, kter´a bude dostateˇcnˇe pˇresn´a i pˇri minim´aln´ıch n´aroc´ıch. Je tˇreba eliminovat vlivy prostˇred´ı jako jsou zmˇeny osvˇetlen´ı, pohybuj´ıc´ı se pozad´ı apod. Vytvoˇrenou metodu je tedy nutn´e otestovat v r˚ uzn´ ych prostˇred´ıch a vyhodnotit v´ ysledky. Detekce pohybu v obraze je doplˇ nkov´a funkce zabezpeˇcovac´ı kamery EYE02. Je tˇreba porovnat vlastnosti detekce pohybu v obraze a vlastnosti detekce pohybu pomoc´ı senzoru PIR, kter´ y je tak´e souˇc´ast´ı kamery. Senzor PIR je vhodn´ y pro vnitˇrn´ı pouˇzit´ı, ale pro venkovn´ı ne, protoˇze vyvol´av´a pˇr´ıliˇs velk´e mnoˇzstv´ı faleˇsn´ ych poplach˚ u. Implementace pohybu v obraze mus´ı b´ yt naps´ana s pˇrihl´ednut´ım na v´ ypoˇcetn´ı n´aroˇcnost. V aplikaci je nˇekolik funkc´ı, kter´e proch´azej´ı kaˇzd´ y obrazov´ y bod v obraze. Tyto funkce mus´ı b´ yt optimalizovan´e pro rychl´e vykon´an´ı. D´ıky tomu, ˇze jsou vˇsechny aplikace ps´any pro operaˇcn´ı syst´em, je jednoduch´e je modifikovat tak, aby fungovaly bez velk´ ych zmˇen na osobn´ım poˇc´ıtaˇci a na vestavn´em zaˇr´ızen´ı. Toho lze vyuˇz´ıt jednak pro vlastn´ı v´ yvoj, kter´ y je na osobn´ım poˇc´ıtaˇci jednoduˇsˇs´ı a jednak pro vytvoˇren´ı demonstraˇcn´ı aplikace detekce pohybu
8
v obraze. Dalˇs´ı demonstrace ˇcinnosti je moˇzn´a vytvoˇren´ım webov´eho rozhran´ı kamery, pˇres kter´e jsou pˇren´aˇseny jednotliv´e obr´azky. V´ ysledkem cel´e pr´ace by mˇel b´ yt funkˇcn´ı syst´em detekce pohybu v obraze a n´avrh spolupr´ace se senzorem PIR. Detekce by mˇela co nejv´ıce odolat ruˇsiv´ ym vliv˚ um tak, aby vytv´aˇrela minim´aln´ı poˇcet faleˇsn´ ych poplach˚ u.
9
Kapitola 2 Bezpeˇ cnostn´ı kamera JabloCOM EYE-02 2.1
Popis bezpeˇ cnostn´ı kamery EYE-02
Kamera JabloCOM EYE-02 je zabezpeˇcovac´ı zaˇr´ızen´ı, kter´e slouˇz´ı pro monitorov´an´ı prostor. Kamera obsahuje jednak vizu´aln´ı monitorovac´ı syst´em s detekc´ı pohybu a jednak zvukov´ y monitorovac´ı syst´em. Veˇsker´a data je moˇzn´e odes´ılat prostˇrednictv´ım vestavˇen´eho GSM modulu v podobˇe SMS, MMS, hlasov´eho vol´an´ı nebo e-mailu. Kamera m˚ uˇze komunikovat s centr´aln´ım serverem a je tedy moˇzn´e kontrolovat stav kamery pomoc´ı webov´eho rozhran´ı. Kameru je moˇzn´e ovl´adat pomoc´ı zaslan´e SMS nebo pomoc´ı bezdr´atov´e kl´ıˇcenky.
Obr´ azek 2.1: Fotografie kamery EYE-02 [25]
V kameˇre bˇeˇz´ı propriet´arn´ı syst´em firmy JabloCOM, kter´ y je vyvinut pˇr´ımo 10
pro tuto kameru. Syst´em se star´a o sledov´an´ı senzor˚ u a o zpracov´an´ı a zasl´an´ı poplachu. Kamera m˚ uˇze b´ yt pˇripojena k poˇc´ıtaˇci pomoc´ı USB portu. K ovl´ad´an´ı funkc´ı kamery z poˇc´ıtaˇce slouˇz´ı n´astroj JabloTool. V tomto n´astroji je moˇzn´e sledovat obraz z kamery, ˇc´ıst ud´alosti z historie kamery a nastavovat parametry kamery. Kamera je vyv´ıjena s c´ılem jednoduch´e obsluhy a mont´aˇze. Je urˇcena pro nepˇretrˇzit´e sledov´an´ı a monitorov´an´ı prostor odkudkoli pomoc´ı poˇc´ıtaˇce nebo mobiln´ıho telefonu. Kamera umoˇzn ˇuje jednak reˇzim hl´ıd´an´ı s vyvol´an´ım poplachu a jednak reˇzim samostatn´eho monitorov´an´ı prostor bez vyvol´an´ı poplachu. Kamera je chr´anˇena pˇred neopr´avnˇenou manipulac´ı pomoc´ı otˇresov´eho senzoru. Nasn´ıman´e video sekvence a obr´azky k jednotliv´ ym ud´alostem jsou uloˇzeny na microSD kartˇe.
2.2
Hardwarov´ e uspoˇ r´ ad´ an´ı kamery EYE-02
C´ılem pr´ace je vytvoˇrit aplikaci detekce pohybu pro kamery EYE-02. Kamera je navrˇzena pro bˇeh firemn´ıho software. Dostupn´e periferie v zaˇr´ızen´ı jsou pops´any na blokov´em sch´ematu. Z´akladem cel´e kamery je mikrokontrol´er s j´adrem ARM926EJ-S. Jedn´a se o mikrokontrol´er firmy ATMEL AT91SAM9260. Tento mikrokontrol´er obsahuje sadu ˇc´ıtaˇc˚ u a ˇcasovaˇc˚ u, ˇradiˇc DMA, periferie pro s´eriovou komunikaci (UART, I2C/SMBUS, SPI, I2S), periferie pro ladˇen´ı JTAG a s´eriov´ y port pro ladˇen´ı. Disponuje tˇremi 32bit paraleln´ımi IO ˇradiˇci, hostitelsk´ ym portem USB, portem USB zaˇr´ızen´ı, ˇradiˇcem pro obsluhu obrazov´eho senzoru a ˇradiˇcem pro obsluhu pamˇet’ov´ ych karet MMC/SD. Syst´em bˇeˇz´ı na frekvenci 198MHz, kter´a je mˇeniteln´a za bˇehu pomoc´ı PLL. Zmˇenou frekvence lze dos´ahnout u ´spory energie. Pro detekov´an´ı zaseknut´ı ˇ ızen´ı hodin vykon´av´an´ı vnitˇrn´ıho programu je dostupn´ y ˇc´ıtaˇc watchdog. R´ re´aln´eho ˇcasu obstar´av´a vnitˇrn´ı oscil´ator 32kHz. J´adro mikrokontrol´eru m˚ uˇze zpracov´avat 32bit instrukce ARM a nebo 16bit instrukce Thumb. D´ale m˚ uˇze b´ yt pˇrepnuto do reˇzimu Jazelle, ve kter´em pˇr´ımo vykon´av´a bytecode Javy. Pomoc´ı instrukc´ı Thumb lze pˇreloˇzit k´od, u kter´eho nen´ı d˚ uleˇzit´a rychlost, ale velikost v´ ysledn´eho bin´arn´ıho programu. Vˇetˇsina bˇeˇzn´ ych funkc´ı m˚ uˇze b´ yt pˇreloˇzena do instrukc´ı Thumb, pouze nˇekter´e n´aroˇcn´e funkce pro zpracov´an´ı obrazu by mˇely b´ yt pˇreloˇzeny do instrukc´ı ARM. Pˇrekladaˇc GNU
11
!"
)*) !+,
2+.5 !+,
7 1
-%/
$-.+/0%% 123%
#$ %!'
.4.'
$0.5
Obr´ azek 2.2: Hardwarov´ a koncepce kamery EYE-02
GCC ovl´ad´a oba reˇzimy a umoˇzn ˇuje pouˇz´ıt reˇzim Thumb i ARM v jednom programu. K mikrokontrol´eru je pˇripojena operaˇcn´ı pamˇet’ DRAM o velikosti 32MB. Pamˇet’ je ve verzi pro mobiln´ı zaˇr´ızen´ı pro sn´ıˇzen´ı spotˇreby. Velikost operaˇcn´ı pamˇeti dostaˇcuje pro pouˇzit´ı syst´emem Linux. K mikrokontrol´eru je d´ale pˇripojena pamˇet’ EEPROM pro ukl´ad´an´ı nastaven´ı. Hlavn´ı program je naˇc´ıt´an z DataFlash velikosti 512kB. Tato pamˇet’ je plnˇe dostaˇcuj´ıc´ı pro firemn´ı syst´em, ale pro pouˇzit´ı se syst´emem Linux je pˇr´ıliˇs mal´a. Doporuˇcen´a zmˇena hardware pro kameru je nahrazen´ı t´eto pamˇeti DataFlash ekvivalentem s vˇetˇs´ı kapacitou. Nejmenˇs´ı doporuˇcen´a hodnota je 4MB optim´alnˇe vˇsak 8MB pro kompletn´ı syst´em. Pro v´ yvojov´e u ´ˇcely jsem pamˇet’ DataFlash pouˇzil jen pro um´ıstˇen´ı zavadˇeˇce syst´emu (Bootloaderu). Tento zavadˇeˇc naˇcte j´adro Linuxu z extern´ı pamˇet’ov´e karty, na kter´e je i cel´ y souborov´ y syst´em Linuxu. Na pamˇet’ov´e kartˇe je dostatek m´ısta a nen´ı tˇreba zmˇeny hardware. Pokud by mˇela b´ yt kamera vyr´abˇena komerˇcnˇe se syst´emem Linux, byla by zmˇena hardware nutn´a. Pokud by uˇzivatel smazal pamˇet’ovou kartu, smazal by t´ım i cel´ y syst´em a kamera by pˇrestala fungovat. Dalˇs´ı periferie obsaˇzen´e v kameˇre slouˇz´ı pro komunikaci se zaˇr´ızen´ımi. Kamera obsahuje r´adiov´ y modul pro obsluhu extern´ıch ˇcidel, kl´ıˇcenek a sir´en. D´ale je v kameˇre um´ıstˇen GSM/GPRS modul. Ten slouˇz´ı k pˇred´av´an´ı informac´ı o poplachu pomoc´ı SMS, MMS a e-mailu. GSM modul je pˇripojen pˇres s´eriov´ y port a je ovl´ad´an AT pˇr´ıkazy. Kamera obsahuje senzory pro detekci vniknut´ı do hl´ıdan´e oblasti. Pro de-
12
tekci pohybu v interi´erech slouˇz´ı senzor PIR. D´ale je k dispozici detekce otˇresu a detekce rozbit´ı skla. Kamera obsahuje obrazov´ y sn´ımaˇc CMOS. Tento sn´ımaˇc je schopn´ y dod´avat obraz v rozliˇsen´ı aˇz 640×480 px. Obrazov´ y sn´ımaˇc je barevn´ ya barevn´e filtry jednotliv´ ych obrazov´ ych bod˚ u sn´ımaˇce jsou um´ıstˇeny v Bayerovˇe mˇr´ıˇzce. Funkci senzoru PIR lze rozˇs´ıˇrit pomoc´ı detekce pohybu v obraze a t´ım umoˇznit detekci pohybu i v prostˇred´ıch, kde PIR nelze pouˇz´ıt.
13
Kapitola 3 Operaˇ cn´ı syst´ em Linux Kapitola o Linuxu ukazuje moˇznosti pouˇzit´ı tohoto syst´emu ve vestavn´em zaˇr´ızen´ı. Jsou zde uvedeny informace potˇrebn´e pro pochopen´ı ovladaˇc˚ u zaˇr´ızen´ı v syst´emu. D´ale je pops´ana metoda pro komunikaci s takov´ ym ovladaˇcem, konkr´etnˇe s ovladaˇcem kamery. Tato ˇc´ast je urˇcena pro nav´az´an´ı na tuto pr´aci a pro poskytnut´ı z´akladn´ıch informac´ı pro v´ yvoj software pro kameru EYE-02 v Linuxu.
3.1 3.1.1
´ Uvod do operaˇ cn´ıho syst´ emu Linux Obecn´ e vlastnosti operaˇ cn´ıch syst´ em˚ u
Operaˇcn´ı syst´em vytv´aˇr´ı rozhran´ı mezi aplikaˇcn´ım programem a hardware. Skl´ad´a se z j´adra syst´emu a obsluˇzn´ ych program˚ u a knihoven. Slouˇz´ı pro zaveden´ı a start aplikac´ı a pro spr´avu zdroj˚ u, jako je napˇr´ıklad pamˇet’ nebo procesor. Operaˇcn´ı syst´em poskytuje aplikac´ım syst´emov´a vol´an´ı, kter´a jsou definov´ana jako aplikaˇcn´ı rozhran´ı syst´emu (API). Obsluhu jednotliv´ ych specifick´ ych ˇc´ast´ı zaˇr´ızen´ı zajiˇst’uj´ı ovladaˇce, kter´e pˇristupuj´ı pˇr´ımo k hardware a poskytuj´ı dalˇs´ı syst´emov´a vol´an´ı pro obsluhu takov´ ych zaˇr´ızen´ı z uˇzivatelsk´e aplikace. Nˇekter´e ovladaˇce poskytuj´ı pouze mezivrstvu pro dalˇs´ı ovladaˇce. Napˇr´ıklad ovladaˇc pro USB ˇradiˇc zprostˇredkov´av´a komunikaci pˇripojen´eho zaˇr´ızen´ı s ovladaˇcem tohoto zaˇr´ızen´ı. Takov´ y ovladaˇc zaˇr´ızen´ı pak m˚ uˇze fungovat s libovoln´ ym ˇradiˇcem USB, protoˇze vˇsechny ovladaˇce ˇradiˇc˚ u USB poskytuj´ı stejn´e API.
14
Abstrakce hardware je v´ yhodn´a, protoˇze uˇzivatelsk´e aplikace mohou b´ yt naps´any v dobˇe, kdy konkr´etn´ı zaˇr´ızen´ı jeˇstˇe neexistuje. Spr´avn´ y ovladaˇc zaˇr´ızen´ı pouze poskytne definovan´e API k nov´emu zaˇr´ızen´ı. Operaˇcn´ı syst´em se d´ale star´a o pˇridˇelov´an´ı pamˇeti aplikac´ım a o pˇrep´ın´an´ı proces˚ u. V modern´ıch operaˇcn´ıch syst´emech je pˇrep´ın´an´ı proces˚ u plnˇe v reˇzii operaˇcn´ıho syst´emu, kter´ y v pravideln´ ych intervalech pˇreruˇs´ı prov´adˇen´ı aplikac´ı a podle situace pˇridˇel´ı procesor aplikaci jin´e. V takto ˇreˇsen´em syst´emu nevede napˇr´ıklad nekoneˇcn´a smyˇcka v jedn´e aplikaci k u ´pln´emu zaseknut´ı syst´emu. Takov´emu chov´an´ı se ˇr´ık´a preemptivn´ı multitasking. Z´aleˇz´ı na sloˇzitosti implementace, jak vhodnˇe budou jednotliv´e aplikace pˇrep´ın´any mezi sebou. V´ıce proces˚ u s sebou samozˇrejmˇe nese probl´emy v podobˇe souˇcasn´eho pˇr´ıstupu v´ıce aplikac´ı ke stejn´emu zdroji. V takov´ ych pˇr´ıpadech se pouˇz´ıvaj´ı z´amky, semafory a mutexy. Zaˇr´ızen´ı, kter´a obsahuj´ı jednotku pro spr´avu pamˇeti (MMU) mohou d´ale poskytovat ochranu pamˇeti pˇred neopr´avnˇen´ ym pˇreps´an´ım. Aplikace, kter´a se snaˇz´ı pˇristupovat do pamˇeti, kterou si nealokovala, je ukonˇcena. Nenaruˇs´ı tak chod jin´ ych aplikac´ı. Chyby zp˚ usoben´e z´apisem do pamˇeti, kter´a patˇr´ı jin´emu procesu, by mohly zp˚ usobit neoˇcek´avan´e chov´an´ı jin´ ych aplikac´ı, kter´e jinak pracuj´ı v poˇr´adku. Ochrana pamˇeti zajist´ı, ˇze se tak nestane. Z´apis do ˇspatn´e ˇca´sti pamˇeti, kter´a shodou okolnost´ı patˇr´ı stejn´emu procesu nen´ı detekov´an.
3.1.2
Existuj´ıc´ı operaˇ cn´ı syst´ emy pro vestavn´ a zaˇ r´ızen´ı
Pro vestavn´a zaˇr´ızen´ı existuje mnoho operaˇcn´ıch syst´em˚ u a exekutiv. Existuj´ı jak komerˇcn´ı syst´emy, tak syst´emy s otevˇren´ ym zdrojov´ ym k´odem. Mezi komerˇcn´ı syst´emy patˇr´ı napˇr´ıklad VxWorks, Windows CE. Zn´am´ ych otevˇren´ ych operaˇcn´ıch syst´em˚ u existuje cel´a ˇrada, napˇr. FreeRTOS, RTEMS, FreeBSD a Linux. Vˇetˇsina operaˇcn´ıch syst´em˚ u definuje sv´e vlastn´ı API. D´ale vˇetˇsina syst´em˚ u poskytuje jeˇstˇe vybran´e ˇsiroce rozˇs´ıˇren´e API, jako je napˇr´ıklad POSIX nebo TRON. POSIX (Portable Operating System Interface for Unix) je standard definovan´ y IEEE. Definuje z´akladn´ı knihovnu jazyka C, vytv´aˇren´ı a ˇr´ızen´ı proces˚ u, jednoduchou meziprocesovou komunikaci, pr´aci se soubory a adres´aˇri a ˇr´ızen´ı vstup˚ u a v´ ystup˚ u. Dalˇs´ı rozˇs´ıˇren´e ˇca´sti normy definuj´ı vytv´aˇren´ı vl´aken a chov´an´ı v syst´emech re´aln´eho ˇcasu. 15
3.1.3
Linuxov´ e distribuce pro vestavn´ a zaˇ r´ızen´ı
Operaˇcn´ı syst´em Linux implementuje z velk´e ˇca´sti standard POSIX. Linux jako takov´ y je pouze j´adro operaˇcn´ıho syst´emu. Vˇetˇsinou se pouˇz´ıv´a s programy a n´astroji, kter´e vznikly pod z´aˇstitou projektu GNU (GNU is Not Unix). Z tohoto d˚ uvodu je nˇekdy oznaˇcov´an jako GNU/Linux. O spojen´ı j´adra s vybran´ ymi aplikacemi se staraj´ı skupiny lid´ı, kter´e vytv´aˇrej´ı distribuce Linuxu. Nejzn´amˇejˇs´ı distribuce pro poˇc´ıtaˇce PC jsou napˇr´ıklad Debian, SuSe, Ubuntu, Gentoo apod. Pro vestavn´a zaˇr´ızen´ı existuj´ı specializovan´e distribuce, kter´e pˇredpokl´adaj´ı nasazen´ı v syst´emech s omezen´ ym mnoˇzstv´ım pamˇeti nebo diskov´eho prostoru. Distribuce pro vestavn´a zaˇr´ızen´ı jsou vyv´ıjena jednak komerˇcn´ımi firmami a jednak komunitami v´ yvoj´aˇr˚ u. Komerˇcn´ı produkty jsou vˇetˇsinou k z´akazn´ıkovi dod´any jiˇz pˇripraven´e pro pˇredem domluven´ y hardware. Firma vytvoˇr´ı a zprovozn´ı vˇsechny periferie v zaˇr´ızen´ı a vytvoˇr´ı pro nˇe ovladaˇce. Z´akazn´ık pak jiˇz p´ıˇse jen uˇzivatelsk´e aplikace, kter´e nepˇristupuj´ı pˇr´ımo k hardware. Mezi takov´e distribuce patˇr´ı napˇr´ıklad MontaVista Linux a ELinOS. Komunitn´ı distribuce se d´ale dˇel´ı na distribuce odvozen´e od kompletn´ıch linuxov´ ych distribuc´ı, napˇr. Emdebian, Embedded Gentoo apod. Nˇekter´e distribuce jsou urˇceny pouze pro vestavn´a zaˇr´ızen´ı, nebo dokonce v´ yhradnˇe pro mobiln´ı telefony, napˇr. Openmoko, Angstrom, OpenWRT a Android. Posledn´ı skupinou jsou pouze n´astroje pro snadn´e vytvoˇren´ı vlastn´ıho syst´emu, jako je napˇr. OpenEmbedded, nebo Buildroot. Jednou z cest je i vytvoˇren´ı vlastn´ıho sestaven´ı bez pouˇzit´ı v´ yˇse zm´ınˇen´ ych n´astroj˚ u. Takov´e sestaven´ı nen´ı komplikovan´e, protoˇze je vˇetˇsinou potˇreba pouze velmi mal´e mnoˇzstv´ı aplikac´ı. Syst´em d´ale neobsahuje aplikace, kter´e nebudou nikdy pouˇzity.
3.1.4
V´ yhody a nev´ yhody pouˇ zit´ı OS Linux
Linux je ˇsk´alovateln´ y operaˇcn´ı syst´em. Koncepce Linuxu je univerz´aln´ı, takˇze pracuje stejnˇe dobˇre na vestavn´ ych zaˇr´ızen´ıch, osobn´ıch poˇc´ıtaˇc´ıch nebo na superpoˇc´ıtaˇc´ıch. Vytv´aˇr´ı abstrakci hardware, takˇze je moˇzn´e ladit aplikace na jin´em stroji, neˇz bude c´ılov´a platforma. Pro zaˇr´ızen´ı, kter´a nemaj´ı ani jednotku pro spr´avu pamˇeti, byla vytvoˇrena speci´aln´ı u ´prava j´adra uCLinux. V´ yhody Linuxu spoˇc´ıvaj´ı pr´avˇe ve snadnosti v´ yvoje aplikac´ı. Jednotliv´e sluˇzby
16
a aplikace mohou b´ yt vyv´ıjeny a testov´any samostatnˇe. Pro v´ yvoj mohou b´ yt d´ale pouˇzity rozmanit´e lad´ıc´ı n´astroje, kter´e odhal´ı napˇr´ıklad nespr´avn´e pˇr´ıstupy do pamˇeti. Linux poskytuje definovan´a a dokumentovan´a API k r˚ uzn´ ym standardn´ım zaˇr´ızen´ım a je proto jednoduch´e pracovat napˇr´ıklad se s´eriov´ ym portem bez znalosti konkr´etn´ı hardwarov´e implementace. Jedna z v´ yhod Linuxu je tak´e jeho otevˇrenost. Na v´ yvoji se pod´ıl´ı komunita v´ yvoj´aˇr˚ u sloˇzen´a jak z nadˇsenc˚ u, tak i z profesion´al˚ u z r˚ uzn´ ych firem. Otevˇren´ y k´od je d´ale dobr´ ym vzorem pro psan´ı vlastn´ıch ovladaˇc˚ u zaˇr´ızen´ı, kter´e by bylo jinak komplikovan´e. Hlavn´ı nev´ yhoda Linuxu je vˇetˇs´ı spotˇreba operaˇcn´ı pamˇeti a pamˇeti pro uloˇzen´ı aplikac´ı. Minim´aln´ı syst´em lze um´ıstit do datov´e pamˇeti o velikosti 4MB s vyuˇzit´ım 16MB pamˇeti RAM.
3.2
Popis nˇ ekter´ ych vlastnost´ı OS Linux
3.2.1
Souborov´ y syst´ em a adres´ aˇ rov´ a struktura
K vˇetˇsinˇe zdroj˚ um se v Linuxu pˇristupuje pomoc´ı soubor˚ u. Kdo m˚ uˇze k jednotliv´ ym soubor˚ um pˇristupovat je d´ano uˇzivatelsk´ ymi pr´avy. Kaˇzd´ y uˇzivatel m´a pˇriˇrazeno vlastn´ı ˇc´ıslo UID (user ID) a ˇc´ıslo skupiny, do kter´e patˇr´ı GID (group ID). Kaˇzd´ y soubor m´a nastavena pr´ava pro ˇcten´ı, z´apis a vykon´an´ı pro majitele, skupinu a pro vˇsechny ostatn´ı. Pokud napˇr´ıklad provedeme v´ ypis adres´aˇre /bin pomoc´ı pˇr´ıkazu 1
# l s −l
Listing 3.1: Pˇr´ıkaz pro v´ ypis adres´ aˇre
bude jeden z ˇr´adk˚ u vypadat n´asledovnˇe: 1
−rwxr−xr−x 1 r o o t r o o t
35208 2 5 . ˜ dub 1 0 . 0 9 mkdir
Listing 3.2: Jeden ˇra´dek z v´ ypisu adres´ aˇre
Prvn´ı trojice rwx ˇr´ık´a, ˇze uˇzivatel root m´a pr´ava pro z´apis, ˇcten´ı a spuˇstˇen´ı. Druh´a trojice r-x ˇr´ık´a, ˇze vˇsichni, kdo jsou ve skupinˇe root mohou program mkdir pouze ˇc´ıst a spouˇstˇet a tˇret´ı trojice r-x ˇr´ık´a, ˇze tento program mohou 17
ˇc´ıst a spouˇstˇet tak´e vˇsichni ostatn´ı. Uˇzivatel root m´a vˇzdy UID=0 a GID=0. Jde o takzvan´eho superuˇzivatele nebo administr´atora, kter´ y m´a pr´ava prov´adˇet vˇsechny operace. Soubory jsou organizov´any v adres´aˇr´ıch. Standardn´ı adres´aˇrov´a struktura obsahuje n´asleduj´ıc´ı adres´aˇre. • /bin – adres´aˇr s d˚ uleˇzit´ ymi utilitami pro syst´em. • /boot – adres´aˇr obsahuj´ıc´ı obraz j´adra a konfiguraci bootloaderu. V syst´emu pro kameru nen´ı tento adres´aˇr vyuˇzit. • /dev – adres´aˇr s virtu´aln´ımi soubory zaˇr´ızen´ı. • /etc – adres´aˇr s nastaven´ım syst´emu. • /home – adres´aˇr ve kter´em jsou domovsk´e adres´aˇre uˇzivatel˚ u. • /lib – adres´aˇr se sd´ılen´ ymi knihovnami. • /mnt – adres´aˇr, ve kter´em jsou nejˇcastˇeji pˇripojov´any jin´e souborov´e syst´emy. • /opt – adres´aˇr, kter´ y slouˇz´ı k uloˇzen´ı program˚ u, kter´e nepoch´azej´ı od distributora. V syst´emu pro kameru nen´ı adres´aˇr vyuˇzit. • /proc – adres´aˇr s virtu´aln´ım souborov´ ym syst´emem, kaˇzd´ y spuˇstˇen´ y proces m´a v tomto adres´aˇri sv˚ uj adres´aˇr ve kter´em jsou vˇsechny informace o procesu. D´ale jsou zde informace o naˇcten´ ych modulech, informace o procesoru apod. • /root – domovsk´ y adres´aˇr uˇzivatele root. • /sbin – adres´aˇr s utilitami, kter´e jsou urˇcen´e v´ yhradnˇe pro uˇzivatele root. • /sys – adres´aˇr s virtu´aln´ım souborov´ ym syst´emem, kter´ y poskytuje ˇradu informac´ı o naˇcten´ ych ovladaˇc´ıch. Nˇekter´a zaˇr´ızen´ı je moˇzn´e pˇres tento adres´aˇr ovl´adat. Napˇr´ıklad ovladaˇc LED je moˇzn´e nastavovat pomoc´ı soubor˚ u v tomto adres´aˇri. • /tmp – adres´aˇr pro odkl´ad´an´ı doˇcasn´ ych soubor˚ u. V syst´emu pro kameru je tento adres´aˇr pˇripojen jako ramdisk. 18
• /usr – adres´aˇr pro uˇzivatelsk´e programy, kter´e nejsou potˇreba pro start syst´emu. • /usr/bin – adres´aˇr pro spustiteln´e soubory program˚ u. • /usr/lib – adres´aˇr pro knihovny program˚ u. • /usr/share – adres´aˇr pro nemˇenn´a data program˚ u. • /var – adres´aˇr pro data, kter´a se mˇen´ı za bˇehu syst´emu. V syst´emu pro kameru jsou vˇsechny n´asleduj´ıc´ı adres´aˇre pˇripojeny jako ramdisk. • /var/lock – adres´aˇr pro ukl´ad´an´ı soubor˚ u z´amk˚ u. • /var/log – adres´aˇr pro zapisov´an´ı informac´ı o bˇehu program˚ u. • /var/run – adres´aˇr pro ukl´ad´an´ı informac´ı o bˇeˇz´ıc´ıch sluˇzb´ach. • /var/tmp – adres´aˇr pro odkl´ad´an´ı doˇcasn´ ych soubor˚ u.
3.2.2
Virtu´ aln´ı soubory zaˇ r´ızen´ı
V unixov´ ych syst´emech je pro pˇr´ıstup k zaˇr´ızen´ım pouˇz´ıv´an adres´aˇr se soubory, kter´e reprezentuj´ı jednotliv´a zaˇr´ızen´ı. Tento adres´aˇr se nejˇcastˇeji jmenuje /dev. Kaˇzd´ y soubor m˚ uˇze reprezentovat znakov´e nebo blokov´e zaˇr´ızen´ı. Znakov´e zaˇr´ızen´ı reprezentuje sekvenˇcn´ı pˇr´ıstup k proudu dat. Typick´a znakov´a zaˇr´ızen´ı jsou s´eriov´e porty, USB endpointy, kl´avesnice, zaˇr´ızen´ı pro zpracov´an´ı videa apod. U takov´ ych zaˇr´ızen´ı nen´ı moˇzn´e pˇreskoˇcit na jinou ˇca´st pamˇeti a tu naˇc´ıst. Blokov´e zaˇr´ızen´ı reprezentuje pˇr´ıstup k dat˚ um s n´ahodn´ ym pˇr´ıstupem. Typick´a blokov´a zaˇr´ızen´ı jsou napˇr´ıklad pamˇet’ RAM, pevn´ y disk, pamˇet’ov´a karta apod. Tato zaˇr´ızen´ı podporuj´ı nav´ıc funkci seek, kter´a umoˇzn ˇuje pˇr´ıstup do libovoln´e ˇca´sti pamˇeti zaˇr´ızen´ı. V´ ypis nˇekter´ ych soubor˚ u z adres´aˇre /dev ukazuje typ zaˇr´ızen´ı (prvn´ı p´ısmeno v ˇra´dku) a major a minor ˇc´ıslo zaˇr´ızen´ı. Propojen´ı mezi jadern´ ym a uˇzivatelsk´ ym prostorem je vytvoˇreno pomoc´ı soubor˚ u zaˇr´ızen´ı. Kaˇzd´ y soubor je reprezentov´an tˇremi u ´daji. Prvn´ı je typ zaˇr´ızen´ı, kter´ y oznaˇcuje, jestli jde o znakov´e nebo blokov´e zaˇr´ızen´ı. Druh´ y a tˇret´ı u ´daj jsou osmibitov´a ˇc´ısla, kter´a reprezentuj´ı takzvan´a major a minor ˇc´ısla. 19
1 2 3 4 5 6 7 8
/ dev # l s − l crw−rw−−−− crw−r−−r−− crw−rw−−−− crw−rw−−−− brw−rw−−−− crw−rw−−−− crw−rw−−−−
1 1 1 1 1 1 1
root root root root root root root
audio root root root disk tty root
14 , 61 , 89 , 1, 179 , 4, 1,
4 0 0 3 0 0 5
Feb 10 2009 a u d i o Jan 1 0 1 : 4 3 g p i o Jan 1 0 1 : 1 8 i 2 c −0 Jan 1 0 1 : 1 8 n u l l Jan 1 0 1 : 1 8 mmcblk0 Jan 1 0 1 : 1 8 t t y 0 Jan 1 0 1 : 1 8 z e r o
Listing 3.3: Pˇr´ıklad v´ ypisu adres´ aˇre zaˇr´ızen´ı ukazuje pˇridˇelen´a ˇc´ısla k soubor˚ um
Major ˇc´ıslo ud´av´a ˇc´ıslo ovladaˇce, se kter´ ym m´a j´adro komunikovat pˇri pouˇz´ıv´an´ı takov´eho souboru. Minor ˇc´ıslo ud´av´a poˇrad´ı zaˇr´ızen´ı pro ovladaˇc. M˚ uˇze tak b´ yt najednou naˇcteno aˇz 256 znakov´ ych a 256 blokov´ ych ovladaˇc˚ ua kaˇzd´ y z nich m˚ uˇze obsluhovat aˇz 256 zaˇr´ızen´ı. Modern´ı linuxov´a j´adra umoˇzn ˇuj´ı sd´ılen´ı major ˇc´ısel mezi ovladaˇci tak, ˇze si ovladaˇce rozdˇel´ı rozsahy minor ˇc´ısel. Vˇetˇsina ovladaˇc˚ u v j´adˇre ale tento pˇr´ıstup st´ale nedovoluje. Ovladaˇce zaˇr´ızen´ı, kter´a jsou v syst´emu naˇctena, je moˇzn´e zjistit vyˇcten´ım virtu´aln´ıho souboru /proc/devices 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
˜ # cat / proc / d e v i c e s Character d e vi ce s : 1 mem 2 pty 3 ttyp 4 / dev / vc /0 4 tty 4 ttyS 5 / dev / t t y 5 / dev / c o n s o l e 5 / dev /ptmx 7 vcs 10 misc 13 i n p u t 89 i 2 c 128 ptm 136 p t s 254 r t c
19 20 21 22
Block d e v i c e s : 7 loop 179 mmc
Listing 3.4: Obsah souboru ‘/proc/devices‘ ukazuje naˇcten´e moduly znakov´ ych a blokov´ ych zaˇr´ızen´ı
20
3.2.3
Operace se soubory
Vˇsechny obyˇcejn´e soubory umoˇzn ˇuj´ı operace open, close, read, write. D´ale je moˇzn´e s obyˇcejn´ ymi soubory pracovat pomoc´ı funkce fcntl, kter´a umoˇzn ˇuje nadstandardn´ı operace se soubory. Napˇr´ıklad umoˇzn ˇuje zamknout byty 100 aˇz 110 v dan´em souboru. Virtu´aln´ı soubory zaˇr´ızen´ı podporuj´ı stejnou sadu operac´ı jako obyˇcejn´e soubory, ale nav´ıc je moˇzn´e pouˇz´ıvat funkce jako select nebo ioctl. Funkce select slouˇz´ı k blokuj´ıc´ımu ˇcek´an´ı na zmˇenu souboru. Pokud ovladaˇc zaˇr´ızen´ı tuto funkci podporuje, m˚ uˇze napˇr´ıklad po pˇr´ıchodu znaku z obsluhovan´e periferie uvolnit ˇcek´an´ı uˇzivatelsk´eho procesu, kter´ y si okamˇzitˇe naˇcte v´ ysledek. Funkce ioctl slouˇz´ı k nastaven´ı a vyˇcten´ı parametr˚ u zaˇr´ızen´ı, kter´a jsou virtu´aln´ımi soubory definov´ana. Tato funkce slouˇz´ı napˇr´ıklad pro nastaven´ı pˇrenosov´e rychlosti s´eriov´eho portu, pro nastaven´ı sn´ımkov´e frekvence zaˇr´ızen´ı pro zachyt´av´an´ı videa apod. Nˇekter´e virtu´aln´ı soubory v˚ ubec nemus´ı pouˇz´ıvat funkce read a write, protoˇze jejich pouˇzit´ı nen´ı vhodn´e a veˇsker´a komunikace se zaˇr´ızen´ım prob´ıh´a pouze pˇres vol´an´ı pˇr´ısluˇsn´ ych ioctl. Pˇr´ıkladem takov´eho zaˇr´ızen´ı jsou nˇekter´a zaˇr´ızen´ı pro zachyt´av´an´ı videa. Pˇri pouˇzit´ı funkce read by doch´azelo ke zbyteˇcn´emu kop´ırov´an´ı velk´eho mnoˇzstv´ı dat. Proto se pro pˇred´av´an´ı nasn´ıman´ ych obr´azk˚ u pouˇz´ıv´a sd´ılen´a pamˇet’.
3.2.4
Sd´ılen´ e knihovny a knihovna libc
Vˇsechny spustiteln´e soubory potˇrebuj´ı pro svoji ˇcinnost stejnou z´akladn´ı sadu funkc´ı. Pokud v syst´emu nen´ı velk´e mnoˇzstv´ı bin´arn´ıch aplikac´ı, je moˇzn´e vˇsechny aplikace slinkovat staticky se vˇsemi knihovnami. Takov´a aplikace nebude ke sv´e ˇcinnosti potˇrebovat ˇza´dn´e dalˇs´ı soubory. Pouˇzit´ı statick´eho linkov´an´ı m´a nev´ yhodu ve zv´ yˇsen´e velikosti aplikace. V´ yhoda statick´eho linkov´an´ı je zaruˇcen´a funkˇcnost na kaˇzd´em syst´emu s dan´ ym procesorem. Jedin´e, co je potˇreba pro spr´avnou funkˇcnost takov´e aplikace, je spr´avn´e bin´arn´ı rozhran´ı j´adra. Z´akladem kaˇzd´e aplikace napsan´e v jazyce C je i knihovna libc. Tato knihovna je pops´ana v normˇe POSIX. Nejpouˇz´ıvanˇejˇs´ı implementac´ı t´eto knihovny v prostˇred´ı operaˇcn´ıho syst´emu Linux je knihovna GNU C Library (glibc). Tato knihovna implementuje kompletnˇe normu POSIX.1, ale pro svou univerz´alnost
21
nen´ı vˇzdy vhodn´a. Pro vestavn´a zaˇr´ızen´ı a pro jin´e speci´aln´ı u ´ˇcely vzniklo nˇekolik jin´ ych implementac´ı knihovny libc. Knihovna uClibc vznikla jako implementace knihovny libc se snahou o co nejmenˇs´ı velikost v´ ysledn´eho bin´arn´ıho souboru. Nen´ı zde kladen d˚ uraz na plnou implementaci standardu. Knihovna vznikla jako souˇca´st projektu uCLinux. Na rozd´ıl od t´eto verze j´adra podporuje plnˇe jednotku pro spr´avu pamˇeti MMU, takˇze je vhodn´a pro libovoln´ y syst´em. Nev´ yhoda t´eto knihovny je nutnost u ´pravy nˇekter´ ych program˚ u, kter´e vyuˇz´ıvaj´ı pokroˇcil´ ych funkc´ı glibc. Knihovna klibc vznikla pro u ´ˇcely inicializaˇcn´ıch ramdisk˚ u. Inicializaˇcn´ı ramdisk je naˇcten do pamˇeti bootloaderem spolu s j´adrem Linuxu. Z ramdisku jsou d´ale spuˇstˇeny programy, kter´e napˇr´ıklad pomohou pˇripojit koˇrenov´ y adres´aˇr. Po vykon´an´ı vˇsech potˇrebn´ ych funkc´ı je ramdisk smaz´an. Pro rychl´e naˇc´ıt´an´ı ramdisku do pamˇeti je potˇreba jeho mal´a velikost. Ta m˚ uˇze b´ yt zaruˇcena pr´avˇe knihovnou klibc. linkov´ an´ı glib uClibc statick´ e 579656 14344 dynamick´ e 6472 5904 ld.so 119056 21728 velikost libc 1375408 352576
klibc 1416 896 72872 0
Tabulka 3.1: Porovn´ an´ı velikost´ı aplikace Hello World
Knihovny, kter´e mohou b´ yt naˇcteny za bˇehu aplikace se nejˇcastˇeji oznaˇcuj´ı pˇr´ıponou .so a knihovny, kter´e slouˇz´ı jen v ˇcas sestaven´ı aplikace maj´ı nejˇcastˇeji pˇr´ıponu .a. O naˇc´ıt´an´ı dynamick´ ych knihoven se star´a z´akladn´ı knihovna /lib/ld.so, kter´a po naˇcten´ı aplikace do pamˇeti naˇcte i vhodn´e knihovny do jej´ıho pamˇet’ov´eho prostoru.
3.2.5
Procesy a vl´ akna
Operaˇcn´ı syst´em Linux nerozliˇsuje mezi procesem a vl´aknem. Vˇsechna vl´akna maj´ı stejn´e vlastnosti jako proces. V Linuxu je implementov´an preemptivn´ı multitasking. Kaˇzd´ y proces m´a svoji prioritu s hodnotou od –20 do 19. Prioritu menˇs´ı neˇz 0 m˚ uˇze nastavit pouze uˇzivatel root. Priorita –20 je nejvyˇsˇs´ı moˇzn´a. Procesy mohou b´ yt synchronizov´any pomoc´ı semafor˚ u a sign´al. Pro sd´ılen´ı dat mohou b´ yt pouˇzity mechanizmy sd´ılen´e pamˇeti. Jednosmˇernou komunikaci 22
lze realizovat jednoduˇse pomoc´ı rour. Na jedn´e stranˇe je roura otevˇrena aplikac´ı, kter´a vytv´aˇr´ı data, a na druh´e stranˇe je roura otevˇrena aplikac´ı, kter´a data zpracov´av´a. Obousmˇern´a komunikace m˚ uˇze b´ yt vytvoˇrena pomoc´ı UNIX socket. Jde o virtu´aln´ı soubor, kter´ y se po otevˇren´ı chov´a jako socket zn´am´ y ze s´ıt’ov´ ych rozhran´ı. Dokonalejˇs´ı obousmˇern´a komunikace m˚ uˇze b´ yt vytvoˇrena pomoc´ı rozhran´ı SysV IPC, nebo pomoc´ı DBUS.
3.3
Portov´ an´ı OS Linux na nov´ e zaˇ r´ızen´ı
Pro vytvoˇren´ı kompletn´ıho syst´emu pro nov´e zaˇr´ızen´ı jsem proˇsel nˇekolik krok˚ u. Prvn´ı krok je vytvoˇren´ı nebo z´ısk´an´ı n´astroj˚ u pro vytv´aˇren´ı aplikac´ı pro danou architekturu. N´aslednˇe jsem upravil a nakonfiguroval j´adro a pomoc´ı tˇechto n´astroj˚ u jsem jej pˇreloˇzil. N´asledovala ˇc´ast pˇreloˇzen´ı zb´ yvaj´ıc´ıch program˚ u a pˇr´ıprava souborov´eho syst´emu. Inicializaci syst´emu jsem provedl pomoc´ı vlastn´ıho bootloaderu, kter´ y z pamˇet’ov´e karty naˇcetl bin´arn´ı obraz j´adra a spustil ho.
3.3.1
V´ yvojov´ e n´ astroje jazyka C pro procesory ARM
Projekt GNU zaˇstit’uje veˇsker´e n´astroje pro v´ yvoj aplikac´ı pro procesory ARM. Jako prvn´ı je nutn´e zvolit si knihovnu jazyka C, kterou budu pouˇz´ıvat. D´ale je nutn´e vytvoˇrit n´astroje slouˇz´ıc´ı pro pr´aci s bin´arn´ımi soubory. N´asleduje vytvoˇren´ı samotn´eho kompil´atoru pro procesor ARM a cel´ y proces pˇr´ıpravy je ukonˇcen kompilac´ı knihovny jazyka C. Jako z´akladn´ı knihovnu jsem zvolil knihovnu jazyka C glibc, protoˇze je kompatibiln´ı se vˇsemi programy, kter´e jsou dostupn´e pro Linux. D´ale vol´ım novˇejˇs´ı aplikaˇcn´ı bin´arn´ı rozhran´ı (ABI) j´adra a knihovny C, kter´e je upraveno speci´alnˇe pro vestavn´a zaˇr´ızen´ı a kter´e zrychluje pr´aci s ˇc´ısly v plovouc´ı ˇra´dov´e ˇca´rce na procesorech, na kter´ ych nen´ı k dispozici jednotka pro v´ ypoˇcty v plovouc´ı ˇra´dov´e ˇca´rce. Pro v´ yvojov´e u ´ˇcely je jednoduˇsˇs´ı pouˇz´ıvat kompletn´ı n´astroje a po vyvinut´ı program˚ u pouˇz´ıt optimalizace pro mal´a zaˇr´ızen´ı jako je napˇr´ıklad z´amˇena za knihovnu uCLibc. Pˇred samotn´ ym zapoˇcet´ım pr´ace jsem se rozhodl pro pouˇzit´ı distribuce Embedded Gentoo. V t´eto distribuci jsou vˇsechny bal´ıˇcky distribuov´any ve zdrojov´ ych souborech. Obsahuje tak´e podporu pro kˇr´ıˇzovou kompilaci. Kompilace 23
samotn´a prob´ıh´a na silnˇejˇs´ım stroji, obvykle osobn´ım poˇc´ıtaˇci, a v´ ysledn´a aplikace se do c´ılov´eho zaˇr´ızen´ı zkop´ıruje jiˇz v bin´arn´ım tvaru. Cel´ y proces zaˇc´ın´a pˇr´ıpravou prostˇred´ı pomoc´ı n´astroje crossdev, podle zadan´eho ˇretˇezce vytvoˇr´ı n´astroje pro kˇr´ıˇzovou kompilaci. 1
˜ # c r o s s d e v arm−s o f t f l o a t −l i n u x −g n u e a b i
Listing 3.5: Pˇr´ıkaz pro vytvoˇren´ı kompletn´ıho prostˇred´ı pro vytv´ aˇren´ı aplikac´ı pro procesor ARM v jazyc´ıch C, C++ a Fortran.
Podle zvolen´eho procesoru a pouˇzit´e knihovny vytvoˇr´ım textov´ y ˇretˇezec, kter´ y bude nad´ale pouˇz´ıv´an pro vˇsechny n´astroje. Textov´ y ˇretˇezec pro n´astroje pro procesor ARM s vyuˇzit´ım knihovny glibc a s pouˇzit´ım nov´eho bin´arn´ıho rozhran´ı (EABI) arm-softfloat-linux-gnueabi d´ale ˇr´ık´a, ˇze v´ ysledn´e n´astroje budou vytv´aˇret aplikace pro Linux. Podobnˇe by tento ˇretˇezec vypadal napˇr´ıklad pro pouˇzit´ı knihovny uCLibc arm-softfloat-linux-uclibcgnueabi. Bal´ık n´astroj˚ u, kter´ y se star´a o statick´e linkov´an´ı a vytv´aˇren´ı knihoven, se jmenuje binutils. Tento bal´ık obsahuje skripty pro v´ ysledn´e sestaven´ı bin´arn´ıch aplikac´ı. D´ale obsahuje n´astroj pro statick´e sestaven´ı knihoven ar, n´astroj pro statick´e a dynamick´e sestavov´an´ı v´ ysledn´ ych bin´arn´ıch soubor˚ u ld, d´ale je dostupn´ y n´astroj strip pro odstranˇen´ı informac´ı z bin´arn´ıho souboru, kter´e nejsou potˇreba pro spr´avn´ y bˇeh, ale jsou napˇr´ıklad d˚ uleˇzit´e pro ladˇen´ı aplikace. V´ ysledn´e programy se jmenuj´ı arm-softfloat-linux-gnueabi-ar, arm-softfloat-linux-gnueabi-ld apod. D´ale je sestaven vlastn´ı kompil´ator pro jazyk C a n´aslednˇe i pro jazyk C++. Nakonec je sestavena knihovna jazyka C, v tomto pˇr´ıpadˇe glibc. Pro snadn´e sestavov´an´ı vlastn´ıch aplikac´ı a pro sestaven´ı j´adra pouˇz´ıv´am skript, kter´ y pro spr´avnˇe napsan´ y Makefile vytvoˇr´ı spustiteln´ y soubor pro platformu ARM. 1 2 3 4
#! / b i n / b a s h SYSROOT=” / u s r /arm−s o f t f l o a t −l i n u x −g n u e a b i / ” TOOLCHAIN=”arm−s o f t f l o a t −l i n u x −gnueabi−” make ARCH=”arm” CROSS COMPILE=”$TOOLCHAIN” INSTALL MOD PATH=”$SYSROOT” $ ∗
Listing 3.6: N´ ahrada programu ‘make‘ pro kˇr´ıˇzovou kompilaci
Ladˇen´ı aplikac´ı jsem prov´adˇel pˇr´ımo v PC t´ım, ˇze jsem programy zkompiloval pro architekturu x86. D´ıky abstrakci hardware je pro testov´an´ı aplikac´ı pro kameru jedin´ y z´asadn´ı rozd´ıl rychlost procesoru a velikost dostupn´e pamˇeti. 24
Jako v´ yvojov´e prostˇred´ı jsem pouˇz´ıval IDE code::blocks, kter´e poskytovalo jednoduchou moˇznost v´ yvoje a ladˇen´ı jak aplikac´ı pro x86 pomoc´ı debuggeru GDB, tak vzd´alen´e ladˇen´ı aplikace pomoc´ı n´astroje GDBserver [41] [17]. Mocn´ y n´astroj na hled´an´ı probl´emu s pˇr´ıstupem do pamˇeti je program Valgrind, kter´ y slouˇz´ı k detekci pˇr´ıstupu do nealokovan´ ych m´ıst v pamˇeti a k detekci neuvolˇ novan´e pamˇeti (memory leak).
3.3.2
´ Uprava a kompilace j´ adra Linuxu
J´adro Linuxu je jiˇz pˇripraveno pro procesory ARM, ale nen´ı pˇredpˇripraveno pro konkr´etn´ı zapojen´ı r˚ uzn´ ych zaˇr´ızen´ı. Nejpodobnˇejˇs´ı zapojen´ı ke kameˇre EYE02 byl v´ yvojov´ y kit pro procesor AT91SAM9260. Z definice t´eto desky jsem vych´azel a vytvoˇril jsem vlastn´ı definici pro kameru. 1
a r c h /arm/mach−a t 9 1 / board−e y e 0 2 . c
Listing 3.7: Soubor pro vlastn´ı definici hardware
D´ale jsem zaregistroval novou desku EYE-02 na internetov´ ych str´ank´ach projektu Linuxu pro ARM, takˇze od verze j´adra 2.6.28 je tato definice jiˇz v hlavn´ı vˇetvi j´adra. Desce EYE-02 bylo pˇriˇrazeno ˇc´ıslo 1887. 1
a r c h /arm/ t o o l s /mach−t y p e s
Listing 3.8: Soubor s informacemi o zaregistrovan´em zaˇr´ızen´ı
Po vytvoˇren´ı souboru desky s definic´ı vˇsech pˇripojen´ ych periferi´ı jsem j´adro nakonfiguroval a zkompiloval. V´ ysledn´ y obraz je uloˇzen v souboru arch/arm/boot/zImage. Tento soubor je pomoc´ı bootloaderu naˇcten do pamˇeti RAM. V souboru zImage je zkomprimovan´ y obraz j´adra. J´adro se po spuˇstˇen´ı samo dekomprimuje.
3.3.3
Bal´ıˇ ckovac´ı syst´ em distribuc´ı
Vˇetˇsina linuxov´ ych distribuc´ı obsahuje bal´ıˇckovac´ı syst´em, kter´ y slouˇz´ı pro jednoduchou instalaci aplikac´ı. Distribuce Gentoo obsahuje bal´ıˇckovac´ı syst´em portage, kter´ y je vhodn´ y i pro kˇr´ıˇzovou kompilaci pro jinou architekturu. Vyuˇzil jsem proto tento syst´em pro snadnou kompilaci a instalaci z´akladn´ıch program˚ u 25
potˇrebn´ ych pro bˇeh syst´emu. Program pro kompilaci bal´ıˇck˚ u se jmenuje emerge. Vytvoˇril jsem jednoduch´ y skript emerge arm, kter´ y nastav´ı promˇenn´e prostˇred´ı tak, aby probˇehla kompilace a instalace do spr´avn´eho adres´aˇre. N´asledn´e vytvoˇren´ı aplikace, kter´a je souˇc´ast´ı bal´ıˇckovac´ıho syst´emu Gentoo, lze elegantnˇe zprostˇredkovat pomoc´ı zavol´an´ı pˇr´ıkazu emerge. 1
˜ # emerge busybox
Listing 3.9: Pˇr´ıkaz pro sestaven´ı a instalaci programu Busybox
Konkr´etnˇe tento pˇr´ıkaz s´am st´ahne zdrojov´e soubory bal´ıku busybox, provede konfiguraci, kompilaci a instalaci v´ ysledn´eho bin´arn´ıho programu do pˇredem urˇcen´eho adres´aˇre.
3.3.4
Pˇ r´ıprava obrazu souborov´ eho syst´ emu
Z´akladem cel´eho syst´emu je aplikace busybox, kter´a obsahuje vˇsechny d˚ uleˇzit´e utility. Jedn´a se o jedin´ y bin´arn´ı soubor, ke kter´emu je vytvoˇreno mnoho symbolick´ ych odkaz˚ u s n´azvy program˚ u. Bal´ık busybox obsahuje veˇsker´e z´akladn´ı n´astroje pro pr´aci se soubory (mv, cp, rm, . . . ), d´ale obsahuje napˇr´ıklad n´astroje pro pr´aci v s´ıti (udhcp, httpd, telnet, wget). Na pˇripravovan´em souborov´em syst´emu je d´ale pomoc´ı bal´ıku static-dev vytvoˇren adres´aˇr /dev se z´akladn´ımi soubory zaˇr´ızen´ı. Ostatn´ı aplikace a knihovny jsou z´ısk´any stejn´ ym zp˚ usobem. Syst´em je nutn´e nakonfigurovat pomoc´ı soubor˚ u v adres´aˇri /etc. V souboru fstab jsou nadefinov´any pˇripojen´e diskov´e odd´ıly a pˇripojen´e virtu´aln´ı souborov´e syst´emy sysfs, procfs, ramfs apod. V souborech group a passwd jsou nadefinov´any uˇzivatelsk´e u ´ˇcty a skupiny uˇzivatel˚ u. V souboru inittab je nastaveno chov´an´ı po startu syst´emu a chov´an´ı pˇri ukonˇcen´ı bˇehu syst´emu. Je zde nadefinov´an prvn´ı inicializaˇcn´ı skript, kter´ y bude spuˇstˇen procesem init. Prvn´ı spuˇstˇen´ y skript se jmenuje /etc/init.d/rcS a spouˇst´ı dalˇs´ı sluˇzby, jejichˇz inicializaˇcn´ı skripty jsou um´ıstˇeny v adres´aˇri /etc/init.d. Inicializaˇcn´ı skripty se skl´adaj´ı ze dvou ˇca´st´ı, jedn´e, kter´a je spuˇstˇena pˇri startu sluˇzby a druh´e, kter´a je spuˇstˇena pˇri ˇza´dosti o jej´ı ukonˇcen´ı. Z´akladn´ı inicializaˇcn´ı skript m´a jednoduchou strukturu. Obsahuje hlaviˇcku, spouˇstˇec´ı a zastavovac´ı funkci. Spouˇstˇec´ı program /sbin/runscript vych´az´ı z programu, kter´ y je pouˇz´ıv´an 26
1 2 3 4 5 6 7 8 9 10 11 12 13
#! / s b i n / r u n s c r i p t start () { ebegin ” Start sluzby ” s t a r t −stop −daemon −−s t a r t −−exec s l u z b a eend $ ? } stop () { e b e g i n ” Ukonceni s l u z b y ” s t a r t −stop −daemon −−s t o p −−exec s l u z b a eend $ ? }
Listing 3.10: Pˇr´ıklad jednoduch´eho inicializaˇcn´ıho skriptu
v distribuci Gentoo. Je pouˇzita podobn´a myˇslenka, ale program jsem napsal jako jednoduch´ y skript pro program sh. Tento program netestuje z´avislosti sluˇzeb, pouze zjednoduˇsuje pr´aci pˇri psan´ı inicializaˇcn´ıch skript˚ u. Napsal jsem d´ale inicializaˇcn´ı skripty pro s´ıt’ovou kartu pˇres USB, telnet, http, obsluhu GSM modulu a pro zapoˇcet´ı vzd´alen´eho sd´ılen´ı adres´aˇre.
3.4
Inicializace a start syst´ emu -./0#-/
"# ! $%'(
+% ,!
Obr´ azek 3.1: Bootovac´ı proces
3.4.1
Bootloader – zavadˇ eˇ c syst´ emu
Prvn´ı k´od, kter´ y je nutn´e spustit v zaˇr´ızen´ı je bootloader. Jeho u ´kolem je pˇripravit periferie k u ´spˇeˇsn´emu naˇcten´ı j´adra. Pro v´ yvoj je nejprve inicializov´ana s´eriov´a linka. K tomuto u ´ˇcelu je vyhrazena periferie DBGU (Debug Unit). Pomoc´ı tohoto rozhran´ı je moˇzn´e se pˇripojit napˇr´ıklad k n´astroji SAM-BA, kter´ y slouˇz´ı pro nahr´an´ı programu do pamˇet´ı pˇripojen´ ych k procesoru. Z toho d˚ uvodu je volba 27
vhodn´a i pro zobrazov´an´ı lad´ıc´ıch informac´ı, ke kter´ ym by norm´aln´ı uˇzivatel zaˇr´ızen´ı nemˇel m´ıt pˇr´ıstup. D´ale je provedena inicializace hodinov´ ych sign´alu do periferi´ı. Jsou inicializov´any nˇekter´e GPIO piny a periferie potˇrebn´e pro start syst´emu, jako napˇr´ıklad rozhran´ı MCI pro pr´aci s pamˇet’ovou kartou. -./%01'
(
!" #$%&'
)*!$* $ +,
Obr´ azek 3.2: Rozdˇelen´ı pamˇet’ov´e karty na odd´ıly
Bootloader se na lad´ıc´ım rozhran´ı ohl´as´ı a zaˇcne prov´adˇet pˇr´ıpravn´e pr´ace. Po inicializaci pin˚ u a rozhran´ı MCI n´asleduje inicializace pamˇet’ov´e karty. Pamˇet’ov´a karta je rozdˇelena na nˇekolik prim´arn´ıch odd´ıl˚ u. Kaˇzd´ y odd´ıl obsahuje ˇc´ast syst´emu. Bootloader nejprve naˇcte tabulku rozdˇelen´ı disku (partition table) a na n´ı se snaˇz´ı nal´ezt odd´ıl se souborov´ ym syst´emem s identifikaˇcn´ım ˇc´ıslem 0x8A. Pro porovn´an´ı, NTFS m´a ˇc´ıslo 0x07, souborov´e syst´emy Linuxu (Ext2, Ext3, . . . ) maj´ı ˇc´ıslo 0x83. Identifikaˇcn´ı ˇc´ıslo 0x8A bylo zvoleno tak, aby nekolidovalo s ˇza´dn´ ym zn´am´ ym souborov´ ym syst´emem pro bˇeˇzn´e operaˇcn´ı syst´emy (Linux, Windows). Takto oznaˇcen´ y odd´ıl neobsahuje souborov´ y syst´em, ale pˇr´ımo obraz j´adra. Podle informac´ı [6] je pro oznaˇcen´ı odd´ılu obsahuj´ıc´ıho pˇr´ımo obraz j´adra pouˇz´ıv´ano identifikaˇcn´ı ˇc´ıslo 0x8A programem AiR-BOOT [27]. Tato hodnota byla zachov´ana i pro vlastn´ı bootloader. Pokud je nalezen odd´ıl, kter´ y m´a nastaveno identifikaˇcn´ı ˇc´ıslo 0x8A a m´a z´aroveˇ n nastaven startovac´ı pˇr´ıznak, je z tohoto odd´ılu naˇcten obraz j´adra do pamˇeti. Nejprve je naˇcten jen prvn´ı sektor odd´ılu. Pokud sektor reprezentuji jako pole neznam´enkov´ ych celoˇc´ıseln´ ych 32bit promˇenn´ ych, je na indexu 9 magick´e ˇc´ıslo 0x016F2818, kter´e informuje bootloader, ˇze jde o obraz j´adra Linuxu ve form´atu zImage pro architekturu ARM. Na pozici 10 je adresa zaˇca´tku obrazu a na pozici 11 je adresa konce obrazu. Velikost cel´eho obrazu je rozd´ıl tˇechto dvou ˇc´ısel. T´ım jsou zjiˇstˇeny vˇsechny informace pro naˇcten´ı obrazu j´adra do pamˇeti. Pamˇet’ RAM zaˇc´ın´a na adrese 0x20000000 a obraz j´adra je naˇcten na adresu 28
0x20008000. Adresa poˇc´atku obrazu je br´ana jako adresa funkce s tˇremi parametry. Prvn´ı parametr je vˇzdy 0, druh´ y parametr je identifikaˇcn´ı ˇc´ıslo zaˇr´ızen´ı, u kamery EYE-02 jde o ˇc´ıslo 1887. Posledn´ı parametr je ukazatel na strukturu s parametry, kter´e informuj´ı j´adro napˇr´ıklad o velikosti pamˇeti RAM. 1
t h e K e r n e l ( 0 , ma chine type , parm at ) ;
Listing 3.11: K´ od pro spuˇstˇen´ı linuxov´eho j´ adra z bootloaderu
Podle identifikaˇcn´ıho ˇc´ısla zaˇr´ızen´ı se j´adro rozhodne, jestli je schopno obsluhovat dan´ y hardware. Nen´ı dobr´e pouˇz´ıvat vlastn´ı identifikaˇcn´ı ˇc´ıslo bez pˇredchoz´ı registrace [28]. V pˇr´ıpadˇe potˇreby aktualizace verze j´adra m˚ uˇze nastat kolize identifikaˇcn´ıch ˇc´ısel.
3.4.2
Start linuxov´ eho j´ adra
Pˇri konfiguraci j´adra byly zvoleny ovladaˇce, kter´e slouˇz´ı pro obsluhu r˚ uzn´ ych rozhran´ı a periferi´ı. Nˇekter´e ovladaˇce jsou potˇreba pro spr´avn´ y start syst´emu, jako napˇr´ıklad ovladaˇc pro obsluhu pamˇet’ov´e karty, ovladaˇc pro obsluhu souborov´eho syst´emu apod. Tyto ovladaˇce jsou pˇr´ımo souˇc´ast´ı bin´arn´ıho obrazu j´adra. Ovladaˇce, kter´e nejsou potˇreba pro start a nejsou dokonce vˇetˇsinu ˇcasu potˇreba pro bˇeh syst´emu jsou vytvoˇreny jako extern´ı moduly a lze je zav´adˇet za bˇehu syst´emu podle potˇreby (napˇr. ovladaˇce pro USB-device rozhran´ı). Nˇekter´e ovladaˇce ale nepˇredpokl´adaj´ı, ˇze pomoc´ı nich bude naˇcten syst´em a neinicializuj´ı se ve spr´avn´em poˇrad´ı. Poˇrad´ı ovladaˇc˚ u je rozdˇeleno do nˇekolika skupin core, postcore, arch, subsys, fs, rootfs, device, late. Do skupiny device patˇr´ı vˇetˇsina bˇeˇzn´ ych ovladaˇc˚ u. Probl´em nast´av´a, pokud je potˇreba zav´est syst´em z pamˇet’ov´e karty. Ovladaˇc pamˇet’ov´e karty je v j´adˇre zaˇrazen do skupiny device. Ovladaˇc pamˇet’ov´e karty jsem musel upravit tak, aby byl j´adrem naˇcten jeˇstˇe pˇred pokusem o pˇripojen´ı koˇrenov´eho adres´aˇre. Proto jsem ovladaˇc pˇresunul do skupiny subsys.
3.4.3
Souborov´ y syst´ em v pamˇ eti RAM
K ˇreˇsen´ı probl´em˚ u pˇri startu syst´emu slouˇz´ı ramdisk. Ten je k dispozici od poˇca´tku startu syst´emu a mohou na nˇem b´ yt nahr´any konfiguraˇcn´ı skripty pro 29
Obr´ azek 3.3: Porovn´ an´ı initrd a initramfs vzhledem k velikosti obsazen´e pamˇeti
poˇca´teˇcn´ı inicializaci syst´emu, nebo i cel´ y syst´em. Existuj´ı dva druhy ramdisku urˇcen´e pro start syst´emu – initrd a initramfs. Initrd ramdisk zab´ır´a fixn´ı velikost zvolenou pˇri kompilaci j´adra. V nov´ ych syst´emech je nahrazov´an pomoc´ı initramfs, kter´ y v pamˇeti zab´ır´a pr´avˇe tolik m´ısta, kolik zab´ıraj´ı data na nˇem. Po smaz´an´ı vˇsech dat z ramdisku je uvolnˇena i zabran´a pamˇet’. Initramfs ramdisk je obyˇcejn´ y CPIO archiv. Bootloader tento archiv zkop´ıruje na pˇredem urˇcen´e m´ısto v pamˇeti RAM, nebo je archiv pˇr´ımo souˇc´ast´ı bin´arn´ıho obrazu j´adra. Pokud je pouˇz´ıv´an ramdisk pro bˇeh cel´eho syst´emu, lze vyuˇz´ıt nˇekolika v´ yhod. Cel´ y souborov´ y syst´em je pˇr´ıstupn´ y pro ˇcten´ı i pro z´apis. Je moˇzn´e modifikovat vˇsechny soubory. Nˇekter´e aplikace potˇrebuj´ı povolen´ı z´apisu do nˇekter´ ych adres´aˇr˚ u za bˇehu. Pokud je syst´em n´asilnˇe vypnut, nehroz´ı ˇza´dn´e poˇskozen´ı dat, protoˇze po znovuspuˇstˇen´ı je nahr´an star´ y obraz ramdisku. Nev´ yhodou ramdisku je nutnost pouˇz´ıv´an´ı jin´eho zaˇr´ızen´ı pro ukl´ad´an´ı dat, kter´a maj´ı b´ yt dostupn´a i po restartu syst´emu. Ramdisk mus´ı obsahovat vˇsechny soubory nutn´e pro bˇeh syst´emu, kter´e obsazuj´ı prostor okolo 4MB aˇz 8MB, coˇz m˚ uˇze b´ yt vzhledem k velikost pamˇeti RAM mnoho. Nejˇcastˇejˇs´ı pouˇzit´ı ramdisku je tedy jen pro inicializaci syst´emu. Utility potˇrebn´e ke startu mohou zab´ırat i m´enˇe neˇz 500kB. Koˇrenov´ y adres´aˇr je po jejich spuˇstˇen´ı pˇrepnut na poˇzadovan´e zaˇr´ızen´ı, napˇr. pamˇet’ovou kartu, a ramdisk je smaz´an. Nov´ y ramdisk je vytvoˇren a pˇripojen do adres´aˇrov´e struktury na m´ısta jako /var/lock/, /tmp a podobnˇe, kter´a jsou vˇetˇsinou aplikac´ı pouˇz´ıv´ana pro z´apis stavov´ ych informaci o bˇehu programu. Ve v´ ysledn´em zaˇr´ızen´ı je cel´ y souborov´ y syst´em pˇripojen pouze pro ˇcten´ı. V syst´emu je vytvoˇren jeden ramdisk, do kter´eho jsou pˇresmˇerov´any adres´aˇre
30
pro doˇcasn´e soubory. T´ım je zajiˇstˇena spr´avn´a funkce aplikac´ı, kter´e potˇrebuj´ı zapisovat stavov´a data a z´aroveˇ n je zajiˇstˇena bezpeˇcnost souborov´eho syst´emu pˇri n´ahl´e ztr´atˇe nap´ajen´ı.
3.4.4
Program init a spuˇ stˇ en´ı sluˇ zeb
Prvn´ı proces, kter´ y j´adro spust´ı je /sbin/init. Tento program slouˇz´ı k nastaven´ı dalˇs´ıch moˇznost´ı syst´emu a ke spuˇstˇen´ı sluˇzeb, kter´e obsluhuj´ı syst´emov´a zaˇr´ızen´ı. Program init naˇcte svoji konfiguraci ze souboru /etc/inittab a podle t´eto konfigurace spust´ı inicializaˇcn´ı skript. Program pˇripoj´ı vˇsechny zb´ yvaj´ıc´ı souborov´e syst´emy, kter´e jeˇstˇe nejsou pˇripojeny, jako je napˇr´ıklad adres´aˇr /proc a /sys, kter´e slouˇz´ı pro komunikaci s j´adrem. V adres´aˇr´ıch jsou pˇr´ıstupn´e soubory pro ovl´ad´an´ı nˇekter´ ych modul˚ u, jsou v nich informace o pˇripojen´ ych zaˇr´ızen´ıch a spuˇstˇen´ ych procesech. D´ale init spust´ı program mdev, kter´ y zaregistruje jako spr´avce adres´aˇre /dev. Program mdev je souˇc´ast´ı bal´ıku program˚ u Busybox a slouˇz´ı k naplnˇen´ı adres´aˇre /dev soubory zaˇr´ızen´ı, kter´a jsou v syst´emu dostupn´a. Adres´aˇr /tmp je pˇripojen jako ramdisk. Ve chv´ıli, kdy jsou pˇripojeny vˇsechny souborov´e syst´emy m˚ uˇze proces init startovat dalˇs´ı sluˇzby. Je zaveden modul pro obsluhu USB. Modul se chov´a jako USB s´ıt’ov´a karta. Po pˇripojen´ı do portu USB poˇc´ıtaˇce je v nˇem dostupn´e ethernetov´e pˇripojen´ı. S´ıt’ov´e rozhran´ı je nastaveno a je spuˇstˇen DHCP server na stranˇe kamery pro snadn´e pˇripojen´ı do poˇc´ıtaˇce. Pro v´ yvojov´e u ´ˇcely jsou nastartov´any napˇr´ıklad sluˇzby telnet a http server.
3.5
Pˇ r´ıstup k zaˇ r´ızen´ı pro digitalizaci obrazu
V operaˇcn´ım syst´emu Linux slouˇz´ı k pˇr´ıstupu rozhran´ı V4L (Video4Linux) [39]. V tomto rozhran´ı jsou definov´any z´akladn´ı funkce pro komunikaci se senzorem. Modul, kter´ y implementuje rozhran´ı V4L, vytv´aˇr´ı soubor zaˇr´ızen´ı, kter´ y se nejˇcastˇeji jmenuje /dev/videoX, kde X je nahrazeno poˇradov´ ym ˇc´ıslem. Pˇres soubor zaˇr´ızen´ı /dev/videoX jsou modulu ovladaˇce zas´ıl´any poˇzadavky pomoc´ı funkce ioctl. Pokud to ovladaˇc dovoluje, m˚ uˇze b´ yt zaˇr´ızen´ı otevˇreno nˇekolika procesy najednou. Jeden napˇr´ıklad nastavuje jas, kontrast apod. a druh´ y vyˇc´ıt´a obrazovou informaci. 31
3.5.1
Inicializace kamery a z´ısk´ an´ı informac´ı
Rozhran´ı V4L je navrˇzeno univerz´alnˇe pro vˇsechna zaˇr´ızen´ı digitalizuj´ıc´ı obraz a zvuk. Ovladaˇce pouˇz´ıvaj´ıc´ı V4L existuj´ı pro televizn´ı a r´adiov´e karty a d´ale existuj´ı pro velk´e mnoˇzstv´ı kamer, kter´e poskytuj´ı pouze obrazovou informaci. Kaˇzd´e zaˇr´ızen´ı m´a jin´e schopnosti, kter´e lze pˇres ioctl ovl´adat. Ke zjiˇstˇen´ı, jak´ ymi vlastnostmi dan´a kamera disponuje, je provedeno nˇekolik z´akladn´ıch dotaz˚ u. Vol´an´ı ioctl VIDIOC QUERYCAP slouˇz´ı ke zjiˇstˇen´ı, zda je zaˇr´ızen´ı kompatibiln´ı s rozhran´ım V4L a d´ale poskytuje informace o dalˇs´ıch podporovan´ ych ioctl vol´an´ıch. Kaˇzd´ y V4L ovladaˇc mus´ı obsluhovat alespoˇ n VIDIOC QUERYCAP a kaˇzd´a aplikace pracuj´ıc´ı s V4L mus´ı vˇzdy na zaˇca´tku zavolat toto ioctl. Vol´an´ı VIDIOC QUERYCTRL a VIDIOC QUERYMENU slouˇz´ı k z´ısk´an´ı konkr´etn´ıch ovl´adac´ıch prvk˚ u. Vˇsechny prvky obsahuj´ı informace o mezn´ıch hodnot´ach. Uˇzivatelsk´a aplikace m˚ uˇze ovl´adat pouze parametry, z´ıskan´e pomoc´ı tˇechto vol´an´ı. Parametry lze mˇenit v pr˚ ubˇehu z´ısk´av´an´ı sn´ımk˚ u. Pˇred vyˇc´ıt´an´ım sn´ımk˚ u je pomoc´ı vol´an´ı VIDIOC ENUM FMT zjiˇstˇena mnoˇzina podporovan´ ych v´ ystupn´ıch form´at˚ u. Kaˇzd´ y form´at m´a sv˚ uj ˇctyˇrp´ısmenn´ y k´od. Pro komunikaci s bˇeˇzn´ ymi kamerami jsou nejpouˇz´ıvanˇejˇs´ı pˇr´ım´e barevn´e prostory RGB a YUV. Nˇekter´e kamery odes´ılaj´ı proud MJPEG. Kamera EYE-02 pouˇz´ıv´a data ve form´atu BA81 nebo BA82, jedn´a se o 8bit nebo 16bit reprezentaci filtru Bayer RGB. V4L ovladaˇc pˇred´av´a data z´ıskan´a z CMOS sn´ımaˇce pˇr´ımo a nech´av´a dek´odov´an´ı jednotliv´ ych obr´azk˚ u na aplikaci v uˇzivatelsk´em prostoru. Ta mus´ı obr´azek interpolovat a doplnit chybˇej´ıc´ı m´ısta.
Obr´ azek 3.4: RGB mˇr´ıˇzka CMOS sn´ımaˇce
Novˇejˇs´ı definice API rozhran´ı V4L2 povoluje pˇred´av´an´ı obrazov´ ych dat v libovoln´em form´atu. V V4L1 byly prov´adˇeny v ovladaˇci veˇsker´e konverze form´at˚ u na RGB nebo YUV. Nov´a koncepce se snaˇz´ı pˇredat vˇsechny konverzn´ı operace do uˇzivatelsk´eho prostoru. Pro pr´aci s kamerou proto vznikla knihovna libv4l, 32
kter´a podporuje vˇsechny doposud zn´am´e v´ ystupn´ı form´aty V4L2 zaˇr´ızen´ı. Pro uˇzivatelskou aplikaci je tedy velice jednoduch´e prov´est naˇc´ıt´an´ı obrazov´ ych dat.
3.5.2
Vyˇ c´ıt´ an´ı obr´ azk˚ u ze senzoru
Z´ısk´an´ı obrazov´e informace z ovladaˇce m˚ uˇze b´ yt ˇreˇseno nˇekolika zp˚ usoby. Z´aleˇz´ı na konkr´etn´ı implementaci ovladaˇce. Prvn´ı a nejjednoduˇsˇs´ı metoda je pˇr´ım´e ˇcten´ı ze souboru /dev/video0 pomoc´ı funkce read(). Tato metoda je neoptim´aln´ı, protoˇze se prov´ad´ı zbyteˇcn´e kop´ırov´an´ı pamˇeti. Pro velk´a rozliˇsen´ı sn´ımaˇc˚ u je nevhodn´a. V nˇekter´ ych pˇr´ıpadech m˚ uˇze b´ yt pro kop´ırov´an´ı pouˇzito DMA, takˇze se neoptim´alnost sniˇzuje a metoda se v´ ykonnostnˇe pˇribliˇzuje dvˇema n´asleduj´ıc´ım metod´am. Nejrozˇs´ıˇrenˇejˇs´ı metoda pˇred´av´an´ı obrazov´ ych dat prob´ıh´a pˇres sd´ılenou fyzickou pamˇet’. Uˇzivatelsk´ y proces si namapuje fyzickou pamˇet’ pomoc´ı funkce mmap(). Pokud jiˇz fyzick´a pamˇet’ nen´ı potˇreba je procesem uvolnˇena pomoc´ı funkce munpam(). Ovladaˇc kamery do pamˇeti ukl´ad´a jednotliv´e nasn´ıman´e obr´azky a uˇzivatelsk´ y proces pamˇet’ pouˇz´ıv´a pro dalˇs´ı pr´aci se sn´ımky. Nev´ yhoda t´eto metody spoˇc´ıv´a v pouˇzit´ı konkr´etn´ı fyzick´e pamˇeti, kter´a nem˚ uˇze b´ yt nijak swapov´ana. Posledn´ı moˇznost´ı pˇred´av´an´ı obrazov´ ych dat je pˇres alokovanou virtu´aln´ı pamˇet’ v uˇzivatelsk´em prostoru. D´ıky tomu, ˇze je pamˇet’ alokov´ana bˇeˇzn´ ym zp˚ usobem, m˚ uˇze b´ yt i doˇcasnˇe pˇresunuta do swapovac´ıho odd´ılu. Zaˇr´ızen´ı bez swapovac´ıho odd´ılu nejsou schopna vyuˇz´ıt rozd´ılu posledn´ıch dvou metod, vˇetˇsina ovladaˇc˚ u kamer proto pouˇz´ıv´a pouze metodu mapov´an´ı fyzick´e pamˇeti.
3.6
Testov´ an´ı n´ aroˇ cnosti detekce pohybu
Detekci pohybu v obraze je nutn´e testovat na re´aln´em zaˇr´ızen´ı. Zat´ım jeˇstˇe neexistuje ovladaˇc Image Sensor Interface (ISI) pro procesorovou ˇradu AT91SAM9. Testov´an´ı detekce prov´ad´ım pomoc´ı jin´eho zdroje obrazov´ ych dat. Pro tento u ´ˇcel jsem vytvoˇril jednoduchou s´ıt’ovou aplikaci pro pˇred´av´an´ı obr´azk˚ u.
33
Obr´ azek 3.5: Testovac´ı zdroj obrazov´ ych dat
3.6.1
Aplikace pro testov´ an´ı n´ aroˇ cnosti detekce
Z´akladem aplikace je jednoduch´ y server [19], kter´ y pomoc´ı funkc´ı socket, bind, listen, accept naslouch´a na zvolen´em portu 8083. Po pˇripojen´ı klientsk´eho programu ˇcek´a na zasl´an´ı poˇzadavku na obr´azek, na kter´ y odpov´ı nekomprimovan´ ym datov´ ym proudem, kter´ y obsahuje barevn´ y RGB obr´azek v rozliˇsen´ı 320×240px. Server na kaˇzd´ y poˇzadavek odpov´ı nov´ ym obr´azkem. Naˇc´ıt´an´ı obr´azk˚ u z kamery zprostˇredkov´av´a knihovna OpenCV, kter´a pro tuto ˇcinnost obsahuje funkce cvCaptureFromCAM pro inicializaci kamery a cvQueryFrame pro vlastn´ı z´ısk´an´ı obrazov´ ych dat. Pro testovac´ı u ´ˇcely je pouˇzita webkamera poˇc´ıtaˇce, na kter´em bˇeˇz´ı server. Obr´azek z webkamery je pˇred odesl´an´ım zmenˇsen na poˇzadovanou velikost 320×240px. Klientsk´a aplikace je spuˇstˇena pˇr´ımo v kameˇre EYE-02. Aplikace se pˇripoj´ı na port 8083 na vzd´alen´em stroji a poˇsle poˇzadavek na zasl´an´ı sn´ımku. Cel´e s´ıt’ov´e rozhran´ı je provozov´ano jako USB zaˇr´ızen´ı, protoˇze v kameˇre nen´ı k dispozici ˇza´dn´e jin´e s´ıt’ov´e rozhran´ı. Pro pˇripojen´ y poˇc´ıtaˇc se kamera jev´ı jako USB s´ıt’ov´a karta. Veˇsker´a komunikace prob´ıh´a pomoc´ı TCP protokolu. Propustnost USB portu se pˇri re´aln´em testov´an´ı pohybovala okolo 800kB/s. Velikost zas´ılan´eho obr´azku je 320×240×3 = 225kB. V ide´aln´ım pˇr´ıpadˇe lze pˇren´est 3,5 sn´ımk˚ u za vteˇrinu. Sn´ıˇzen´ı velikosti obr´azku pˇred zasl´an´ım klientsk´e aplikaci je d˚ usledek omezen´e propustnosti pˇripojen´ı. Pro pˇrenos nebyla zvolena jin´a forma obr´azku, protoˇze je poˇzadov´ano minim´aln´ı mnoˇzstv´ı ˇsumu a maxim´aln´ı rychlost zpracov´an´ı. Ztr´atov´a komprese obrazu JPEG nen´ı vhodn´a, protoˇze pˇrid´av´a do obrazu dalˇs´ı ˇsum. Bezztr´atov´a komprese je n´aroˇcn´a na v´ ypoˇcetn´ı v´ ykon a pro zjednoduˇsen´ı pˇrij´ımac´ı strany nebyla pouˇzita. Pˇred´av´an´ı
34
obr´azk˚ u z jin´eho zaˇr´ızen´ı slouˇz´ı pouze pro testovac´ı u ´ˇcely. Nen´ı proto optimalizov´ano pro maxim´aln´ı v´ ykon.
3.7 3.7.1
Komunikace s vestavn´ ym zaˇ r´ızen´ım Zp˚ usoby komunikace s kamerou
Kamera EYE-02 obsahuje pouze dvˇe komunikaˇcn´ı rozhran´ı, kter´a je moˇzn´e vyuˇz´ıt pro rychlou pr´aci. Prvn´ı z tˇechto rozhran´ı je s´eriov´ y port vyveden´ y pro ladˇen´ı a druh´e rozhran´ı je port USB. Na s´eriov´e rozhran´ı jsou pˇresmˇerov´any vˇsechny v´ ystupy pˇri startu syst´emu. Je tedy moˇzn´e sledovat zaveden´ı a start bootloaderu a samotn´e zaveden´ı a start linuxov´eho j´adra. Na tomto s´eriov´em rozhran´ı je tak´e spuˇstˇen program pro obsluhu konzole. Je tedy moˇzn´e se syst´emem pracovat pomoc´ı termin´alov´eho programu v PC. V Linuxu existuje nˇekolik hotov´ ych ovladaˇc˚ u pro USB zaˇr´ızen´ı. Existuje ovladaˇc implementuj´ıc´ı tˇr´ıdu CDC-ACM. Takov´e zaˇr´ızen´ı se jev´ı jako s´eriov´ y port. Pro komunikaci s kamerou jsem tento ovladaˇc nezvolil, protoˇze jiˇz m´am jeden s´eriov´ y port k dispozici. Ovladaˇc implementuj´ıc´ı tˇr´ıdu CDC-ECM je tak´e dostupn´ y. Tento ovladaˇc se chov´a jako s´ıt’ov´e rozhran´ı. V kameˇre i v pˇripojen´em PC se vytvoˇr´ı nov´a virtu´aln´ı s´ıt’ov´a karta. Pomoc´ı tohoto rozhran´ı lze velice jednoduˇse pˇren´aˇset libovoln´e informace pomoc´ı existuj´ıc´ıho software. Dalˇs´ı ovladaˇc, kter´ y je obsaˇzen pˇr´ımo v j´adˇre, implementuje tˇr´ıdu mass storage device. Ovladaˇc umoˇzn ˇuje export libovoln´eho blokov´eho zaˇr´ızen´ı jako z´aklad pro MSD. Pro zachov´an´ı integrity dat je k tomuto blokov´emu zaˇr´ızen´ı vˇzdy pˇripojen jen poˇc´ıtaˇc nebo kamera.
3.7.2
Spouˇ stˇ en´ı program˚ u v kameˇ re
Pro spouˇstˇen´ı programu v kameˇre je dostaˇcuj´ıc´ı s´eriov´e rozhran´ı. Toto s´eriov´e rozhran´ı je ale pro nˇekter´e programy pomal´e a neposkytuje plnˇe moˇznosti virtu´aln´ıho termin´alu. Z tohoto d˚ uvodu jsem se rozhodl o pouˇzit´ı ovladaˇce CDC-ECM. T´ım jsem v kameˇre vytvoˇril s´ıt’ov´e rozhran´ı. Na tomto s´ıt’ov´em rozhran´ı jsem spustil jednak server DHCP a jednak server pro TELNET a pro 35
HTTP. Server DHCP zaruˇc´ı automatickou konfiguraci pˇripojen´eho poˇc´ıtaˇce. Ten se pak m˚ uˇze jednoduˇse pˇripojit pomoc´ı programu telnet. Po pˇrihl´aˇsen´ı do syst´emu m˚ uˇze uˇzivatel spouˇstˇet libovoln´e pˇr´ıkazy. Pomoc´ı webov´eho prohl´ıˇzeˇce je moˇzn´e pˇristupovat k webov´ ym str´ank´am kamery a je moˇzn´e sledovat obraz a nebo nastavovat parametry kamery.
3.7.3
Sd´ılen´ı soubor˚ u
Sd´ılen´ı soubor˚ u v kameˇre je pomˇernˇe problematick´e. Nejsnazˇs´ı zp˚ usob, kter´ y se nab´ız´ı, je pomoc´ı zaˇr´ızen´ı MSD. Ovladaˇci pro MSD je nastaveno blokov´e zaˇr´ızen´ı pamˇet’ov´e karty. Z´aroveˇ n je toto blokov´e zaˇr´ızen´ı pˇripojeno v kameˇre pomoc´ı pˇr´ıkazu mount. Tento zp˚ usob komunikace je ale velice nebezpeˇcn´ y. Pokud poˇc´ıtaˇc provede z´apis dat, kamera se o tomto z´apisu nijak nedozv´ı. Oba syst´emy pouˇz´ıvaj´ı pro pˇr´ıstup k disku vyrovn´avac´ı pamˇet’. Pokud tedy pomoc´ı poˇc´ıtaˇce nebo pomoc´ı kamery vytvoˇr´ıme nov´ y soubor na pamˇet’ov´e kartˇe, bude nejprve na obou zaˇr´ızen´ıch uloˇzen jen ve vyrovn´avac´ı pamˇeti. Pˇri pokusu o zaps´an´ı vyrovn´avac´ı pamˇeti na pamˇet’ovou kartu nastane kolize, kterou ani jedna strana nem˚ uˇze detekovat, takˇze dojde ke vz´ajemn´emu pˇrepisu dat a k poˇskozen´ı souborov´eho syst´emu. Jedin´ y bezpeˇcn´ y zp˚ usob sd´ılen´ı dat pomoc´ı ovladaˇce MSD je umoˇznit obˇema stran´am pˇr´ıstup pouze pro ˇcten´ı. Tento probl´em neˇreˇs´ı ani vynucen´e odpojen´ı ze strany kamery. Pokud je kamera odpojena ve chv´ıli kdy doch´az´ı k z´apisu dat ze strany PC, je komunikace pˇreruˇsena a dojde ke ztr´atˇe dat. Nav´ıc m˚ uˇze b´ yt neust´al´e odpojov´an´ı v PC nepˇr´ıjemn´e. Pˇri pouˇzit´ı takov´eho zaˇr´ızen´ı s PC, na kter´em bˇeˇz´ı operaˇcn´ı syst´em Linux, je tento pˇr´ıstup nefunkˇcn´ı, protoˇze syst´em Linux automaticky nepˇripojuje USB disky, takˇze po n´asiln´em odpojen´ı zaˇr´ızen´ı se jiˇz samo nepˇripoj´ı. Probl´em sd´ılen´ı souborov´eho syst´emu se snaˇz´ı ˇreˇsit tˇr´ıdy Still Image Capture Device a protokol PTP. Ovladaˇce pro tyto tˇr´ıdy ale nejsou souˇca´st´ı Linux, takˇze jsem pro sd´ılen´ı souboru musel pouˇz´ıt jin´ y zp˚ usob. Sd´ılen´ı souboru prov´ad´ım pˇres vytvoˇren´e s´ıt’ov´e rozhran´ı. Pro tento u ´ˇcel existuj´ı dva obecnˇe zn´am´e protokoly: protokol NFS, kter´ y se ˇcasto pouˇz´ıv´a pro sd´ılen´ı soubor˚ u v operaˇcn´ıch syst´emech odvozen´ ych od UNIXu, a protokol SMB, kter´ y se pouˇz´ıv´a pro sd´ılen´ı soubor˚ u v syst´emech Windows. Oba protokoly jsou obsaˇzeny v linuxov´em j´adˇre a pomoc´ı nˇekolika utilit lze sd´ılen´ı lehce zprovoznit. Protoˇze pouˇz´ıv´am na PC syst´em Linux, zvolil jsem pro sd´ılen´ı soubor˚ u protokol NFS. 36
Sd´ılen´ı soubor˚ u pˇres protokol, kter´ y je k tomu urˇcen, je bezpeˇcn´e. V provozu ˇ sen´ı nem˚ uˇze doj´ıt ke kolizi ani v pˇr´ıpadˇe, ˇze m´a v´ıce zaˇr´ızen´ı povolen z´apis. Reˇ pomoc´ı sd´ılen´ı soubor˚ u pˇres s´ıt’ov´e rozhran´ı je nav´ıc pˇr´ımoˇcar´e, pr˚ uhledn´e a bˇeˇznˇe pouˇz´ıvan´e.
37
Kapitola 4 Detekce pohybu v obraze 4.1
Pˇ rehled projekt˚ u zab´ yvaj´ıc´ıch se detekc´ı pohybu v obraze
Existuje velk´e mnoˇzstv´ı projekt˚ u a jednotliv´ ych metod, kter´e se zab´ yvaj´ı detekc´ı pohybu v obraze. Nejˇcastˇeji je pro detekci pohybu vyuˇzit model pozad´ı. R˚ uzn´e techniky z´ısk´an´ı modelu pozad´ı jsou vyjmenov´any v [34]. D´ale existuj´ı techniky vyuˇz´ıvaj´ıc´ı kumulativn´ıho histogramu [38], nebo metody vyuˇz´ıvaj´ıc´ı DCT, nebo vlnkovou transformaci [7]. Detekce pohybu v obraze je pouˇz´ıv´ana napˇr´ıklad pˇri kompresi MPEG. Ve videosign´alu jsou vyhled´av´any ˇca´sti, kter´e se nemˇen´ı, pouze mˇen´ı svoji polohu v obraze. Touto technikou lze sn´ıˇzit datov´ y tok potˇrebn´ y pro pˇrenos videa. Prvn´ı sn´ımek pˇrenese pohybuj´ıc´ı se oblast a v dalˇs´ıch sn´ımc´ıch jsou jiˇz jen vektory pohybu t´eto oblasti. Program Motion [32] slouˇz´ı pro detekci pohybu v obraze. Jde o program s otevˇren´ ym zdrojov´ ym k´odem. Pro vyhodnocen´ı pouˇz´ıv´a rozd´ılov´e sn´ımky a matematickou morfologii pro filtraci. Program je urˇcen pro Linux a jako vstup videodat vyuˇz´ıv´a rozhran´ı V4L nebo stahuje data z IP kamery. Motion Detection Algorithms [29] je softwarov´ y projekt, kter´ y vytv´aˇr´ı jednoduch´ y n´astroj pro detekci pohybu v obraze. Program je naps´an v .NET. Motiontrack [36] je sada n´astroj˚ u pro detekci pohybu v obraze. Obsahuje nˇekolik program˚ u pro pˇr´ıpravu obr´azk˚ u z kamery. Pro detekci pohybu pouˇz´ıv´a nejjednoduˇsˇs´ı metodu rozd´ılov´ ych sn´ımk˚ u.
38
4.2 4.2.1
Metody detekce pohybu v obraze Definice
Pro pouˇzit´ı stejn´eho znaˇcen´ı ve vˇsech popisovan´ ych metod´ach je nadefinov´ano n´asleduj´ıc´ı z´akladn´ı znaˇcen´ı. - t ∈ Z je diskr´etn´ı ˇcas, kde t = 0 je ˇcas prvn´ıho sn´ımku - w ∈ N je ˇs´ıˇrka obrazu - h ∈ N je v´ yˇska obrazu - x ∈ 0, w) je souˇradnice bodu - y ∈ 0, h) je souˇradnice bodu - I ∈ Rh,w je obraz velikosti w × h - I(x, y) je jas obrazov´eho bodu na pozici [x, y]T - It je obraz I v ˇcase t - B ∈ Rh,w je obraz pozad´ı - θ ∈ R je symbol pro oznaˇcen´ı prahu - n ∈ N je poˇcet sn´ımk˚ u
4.2.2
Metody vyuˇ z´ıvaj´ıc´ı model pozad´ı
Pr˚ umˇ er prvn´ıch n sn´ımk˚ u Nejjednoduˇsˇs´ı metoda detekce pohybu je uloˇzen´ı prvn´ıho sn´ımku, nebo pr˚ umˇeru prvn´ıch n sn´ımk˚ u. Pro kaˇzd´ y obrazov´ y bod plat´ı 1 B(x, y) = Ii (x, y) n i=1 n
(4.1)
Detekce objekt˚ u na popˇred´ı se provede pomoc´ı prahov´an´ı rozd´ılu jas˚ u pro kaˇzdou dvojici bodu pozad´ı a bodu v nov´em sn´ımku na stejn´e pozici |B(x, y) − It (x, y)| > θ
(4.2)
Pokud pravdˇepodobnost jasu jednotliv´ ych obrazov´ ych bod˚ u modeluji jako norm´aln´ı rozdˇelen´ı, lze spoˇc´ıtat smˇerodatnou odchylku pro kaˇzd´ y obrazov´ y bod
39
jako
n 1 Ii (x, y)2 − B(x, y)2 σ(x, y) = n i=1
(4.3)
Detekci objekt˚ u na popˇred´ı pak provedu prahov´an´ım, jako v pˇredchoz´ım pˇr´ıpadˇe, pouze konstantn´ı hodnotu prahu nahrad´ım n´asobkem smˇerodatn´e odchylky θ(x, y) = c · σ(x, y), tedy |B(x, y) − It (x, y)| > c · σ(x, y)
(4.4)
Velikost konstanty c je volena s ohledem na model Gaussova rozdˇelen´ı. Pro hodnotu c = 3 pˇri pouˇzit´ı pravidla 3σ spad´a 99,7% namˇeˇren´ ych hodnot do intervalu okolo stˇredn´ı hodnoty. Je t´ım tedy dostateˇcnˇe eliminov´an faleˇsn´ y poplach.
Obr´ azek 4.1: Hustota norm´ aln´ıho rozdˇelen´ı pravdˇepodobnosti
Tato metoda funguje dobˇre pˇri pouˇzit´ı st´al´eho osvˇetlen´ı. Pouˇzit´ı v re´aln´em prostˇred´ı nen´ı moˇzn´e, protoˇze mus´ı prob´ıhat adaptace modelu pozad´ı podle zmˇen celkov´eho osvˇetlen´ı. V dobˇe uˇcen´ı (prvn´ıch n sn´ımk˚ u) nesm´ı b´ yt v obraze ˇza´dn´ y pohybuj´ıc´ı se pˇredmˇet, jinak by byl model pozad´ı zkreslen´ y. Pro obrazov´e body, kter´e jsou v saturaci, nebude detekce dobˇre fungovat, protoˇze pro takov´e body vyjde σ nulov´a a poplach zp˚ usob´ı libovolnˇe mal´a zmˇena jasu v dan´em bodˇe.
40
Klouzav´ y pr˚ umˇ er posledn´ıch n sn´ımk˚ u Zlepˇsen´ı pˇredchoz´ı metody spoˇc´ıv´a ve v´ ypoˇctu modelu pozad´ı z posledn´ıch sn´ımk˚ u n 1 Bt (x, y) = It−i (x, y) (4.5) n i=1 n 1 It−i (x, y)2 − Bt (x, y)2 σt (x, y) = n i=1
(4.6)
Detekce objekt˚ u na popˇred´ı se provede |Bt (x, y) − It (x, y)| > θ
(4.7)
kde pr´ah m˚ uˇze b´ yt opˇet konstantn´ı hodnota, nebo m˚ uˇze b´ yt vypoˇcten´ y yhoda tohoto modelu je nutnost uchov´avat v pamˇeti jako θ = c · σt (x, y). Nev´ posledn´ıch n sn´ımk˚ u. Pouˇzit´ı ve vestavn´ ych zaˇr´ızen´ıch omezuje pamˇet’ovou n´aroˇcnost. Metodu je tedy nutn´e zjednoduˇsit tak, aby udrˇzovala minim´aln´ı poˇcet obr´azk˚ u v pamˇeti. Dalˇs´ı nev´ yhoda je moˇznost pouˇzit´ı v´ ysledn´eho modelu pozad´ı aˇz po pˇr´ıchodu minim´alnˇe n sn´ımk˚ u. Exponenci´ aln´ı vyhlazov´ an´ı Minimalizaci potˇrebn´e pamˇeti pro v´ ypoˇcet modelu pozad´ı lze prov´est pouˇzit´ım rekurzivn´ıho vztahu. Klouzav´ y pr˚ umˇer lze pˇrirovnat k FIR filtru ˇr´adu n a exponenci´aln´ı vyhlazov´an´ı lze pˇrirovnat k IIR filtru ˇr´adu 1. Z´akladem exponenci´aln´ıho vyhlazov´an´ı je vztah st = αxt + (1 − α)st−1 (4.8) ysledek vyhlazov´an´ı, xt je vstupn´ı namˇeˇren´a hodnota a 0 < α < 1 kde st je v´ je koeficient, kter´ y urˇcuje rychlost reakce na nov´a namˇeˇren´a data. Pro α = 0 nedoch´az´ı k ˇza´dn´e zmˇenˇe hodnoty st = st−1 , pro α = 1 je naopak v´ ysledkem vˇzdy aktu´aln´ı namˇeˇren´a hodnota st = xt . Po aplikaci na model pozad´ı vznikne Bt (x, y) = αIt (x, y) + (1 − α)Bt−1 (x, y)
41
(4.9)
U exponenci´aln´ıho vyhlazen´ı lze pouˇz´ıt analogii smˇerodatn´e odchylky 2 σt2 = β(xt − st−1 )2 + (1 − β)σt−1
(4.10)
σt (x, y)2 = β(It (x, y) − Bt−1 (x, y))2 + (1 − β)σt−1 (x, y)2
(4.11)
tedy
a v´ ysledn´e vyhodnocen´ı objekt˚ u na popˇred´ı je provedeno jako |Bt−1 (x, y) − It (x, y)| > θ
(4.12)
kde m˚ uˇze b´ yt opˇet pouˇzito θ = c · σt Vyhlazen´ı pomoc´ı medi´ anu Z´ısk´av´an´ı modelu pozad´ı pomoc´ı medi´anu je vhodn´e proto, ˇze nen´ı vychylov´an kr´atkodob´ ymi ˇspiˇckami. Pokud je pouˇzit klouzav´ y medi´an, vyhodnocuje se posledn´ıch n vzork˚ u. Vzorky jsou seˇrazeny a je vybr´an prostˇredn´ı vzorek. [12] Pokud v´ ykyv z konstantn´ı hodnoty netrv´a d´ele neˇz n/2 vzork˚ u, neprom´ıtne se do v´ ysledn´e hodnoty a model pozad´ı z˚ ustane nezmˇenˇen. [3] Rekurzivn´ı aproximace medi´ anu Podobn´ ych vlastnost´ı jako klouzav´ y medi´an m˚ uˇze dos´ahnout rekurzivn´ı z´apis [9] ⎧ ⎪ ⎨ st + k (xt > st ) st = st − k (xt < st ) ⎪ ⎩ st (xt = st )
(4.13)
kde k je pˇredem zvolen´a konstanta. V´ ychylka xt od st , kter´a bude ˇra´dovˇe velikosti k, bude spr´avnˇe zaˇclenˇena do modelu pozad´ı. V´ ychylka, kter´a bude nˇekolikan´asobnˇe vˇetˇs´ı, ovlivn´ı model pozad´ı m´enˇe, neˇz napˇr´ıklad pˇri pouˇzit´ı exponenci´aln´ıho vyhlazen´ı. Pro pouˇzit´ı pˇri modelov´an´ı pozad´ı je pouˇzit vztah ⎧ ⎪ ⎨ Bt (x, y) + k (It (x, y) > Bt (x, y)) Bt (x, y) = Bt (x, y) − k (It (x, y) < Bt (x, y)) ⎪ ⎩ (It (x, y) = Bt (x, y)) Bt (x, y) 42
(4.14)
V ide´aln´ım pˇr´ıpadˇe je model pozad´ı odhad konstantn´ı hodnoty, kter´a je ovlivnˇena ˇsumem senzoru. D´ale je hodnota ovlivnˇena zmˇenou okoln´ıho osvˇetlen´ı, kter´e m´a velmi velkou ˇcasovou konstantu. Tento pˇredpoklad vede k pouˇzit´ı dalˇs´ı metody z´ısk´av´an´ı modelu pozad´ı. Kalmanova filtrace Na zjiˇstˇen´ı pozad´ı obr´azku lze pohl´ıˇzet jako na odhad skryt´eho vnitˇrn´ıho stavu. Pozad´ı se mˇen´ı s velkou ˇcasovou konstantou a je ovlivnˇeno ˇsumem, kter´ y pˇredstavuj´ı objekty na popˇred´ı. Takov´ yto diskr´etn´ı syst´em lze popsat maticemi A = [a], B = [1 − a], C = [1] Krok odhadu st = Ast + Bxt (4.15) Pt = AP A + Q Krok aktualizace = xt − Cst CPt−1 K = CPt−1 C + R Pt = (1 − KC)Pt st = xt + Ky y
(4.16)
kde P je kovarianˇcn´ı matice chyby odhadu st , Q je kovarianˇcn´ı matice ˇsumu syst´emu a R je kovarianˇcn´ı matice ˇsumu mˇeˇren´ı. Pro spr´avnou funkci mus´ı m´ıt ˇsum jasu obrazov´eho bodu norm´aln´ı rozdˇelen´ı. Smˇ es gausi´ an˚ u (Mixture of Gaussians – MoG, GMM) Nejjednoduˇsˇs´ı multimod´aln´ı metoda vyuˇz´ıv´a pro reprezentaci kaˇzd´eho pixelu nˇekolik gausi´an˚ u, na rozd´ıl od exponenci´aln´ıho vyhlazen´ı, kter´e vyuˇz´ıv´a pouze jeden. [30] Kaˇzd´ y obrazov´ y bod je modelov´an jako P (x) =
K
ωi η(x; μi , Σi )
(4.17)
i=1
kde P (x) je pravdˇepodobnost v´ yskytu obrazov´eho bodu s jasem x, K je poˇcet gausi´an˚ u pouˇzit´ ych pro modelov´an´ı, ω je v´aha dan´eho gausi´anu, η(x; μ, Σ) znaˇc´ı norm´aln´ı rozdˇelen´ı, μ je stˇredn´ı hodnota a Σ je kovarianˇcn´ı matice. Pokud je hodnota jasu obrazov´eho bodu sloˇzena ze tˇr´ı sloˇzek (ˇcerven´a, zelen´a, modr´a), je pro 43
zjednoduˇsen´ı v´ ypoˇctu povaˇzov´ana hodnota jasu jednotliv´ ych barev za nez´avislou 2 Σ = σ I. Toto tvrzen´ı nen´ı pravdiv´e, protoˇze jednotliv´e barevn´e sloˇzky jsou na sobˇe z´avisl´e. Pro zjednoduˇsen´ı v´ ypoˇctu je ale v´ yhodn´e toto pˇredpokl´adat. Chyba zp˚ usoben´a t´ımto zjednoduˇsen´ım nen´ı velk´a. [40] Model pozad´ı je aktualizov´an pomoc´ı modifikovan´eho E-M algoritmu podle n´asleduj´ıc´ıch pravidel: 1. Pokud x patˇr´ı komponentˇe i, tedy |x − μi | < c · σ, kde c je voleno v rozsahu 2 aˇz 2,5, pak je i-t´a komponenta aktualizov´ana ωi,t = ωi,t−1 μi,t = (1 − ρ)μi,t−1 + ρxt 2 2 σi,t = (1 − ρ)σi,t−1 + ρ(xt − μi,t )2
(4.18)
kde ˇc´ıslo ρ je u ´mˇern´e pravdˇepodobnosti, ˇze dan´e x patˇr´ı pr´avˇe do komponenty i, tedy (4.19) ρ = αη(xt |μi,t−1 , σi,t−1 ) 2. Pokud x komponentˇe i nepatˇr´ı, je komponentˇe pouze sn´ıˇzena v´aha
μi,t = (1 − alpha)μi,t−1
(4.20)
3. Pokud nen´ı nalezena ˇz´adn´a komponenta, je ta nejm´enˇe pravdˇepodobn´a nahrazena aktu´aln´ı hodnotou, kde μi,t = xt , variance je nastavena velk´a a v´aha mal´a. 4. Komponenty jsou seˇrazeny podle pomˇeru ω/σ2 . Tato hodnota se zvyˇsuje, pokud je zapoˇcteno v´ıce podobn´ ych hodnot s malou varianc´ı. Bod v n´asleduj´ıc´ım ˇcasov´em okamˇziku je tedy testov´an oproti nejpravdˇepodobnˇejˇs´ı komponentˇe. 5. prvn´ıch B komponent je br´ano jako model pozad´ı, kde
B = arg min b
b
ωk > T
(4.21)
k=1
Pokud je T mal´e, je vybr´ana pouze prvn´ı komponenta. Pokud je T vˇetˇs´ı, je vybr´ano v´ıce komponent a vyuˇzije se t´ım v´ yhod cel´eho algoritmu. 44
Neparametrick´ y odhad (Kernel Density Estimator – KDE) Mˇejme sekvenci namˇeˇren´ ych dat x1 , x2 , ..., xN . Odhad hustoty pravdˇepodobnosti pro obrazov´ y bod xt v ˇcase t m˚ uˇze b´ yt neparametricky odhadnut jako N 1 P r(xt ) = K(xt − xi ) N i=1
(4.22)
K reprezentuje zvolenou j´adrovou funkci. V tomto pˇr´ıpadˇe je zvoleno norm´aln´ı rozloˇzen´ı N (0, σ) [14].Obrazov´ y bod je oznaˇcen jako popˇred´ı, pokud P r(xt ) < θ
(4.23)
V´ yhoda tohoto algoritmu spoˇc´ıv´a v niˇzˇs´ım mnoˇzstv´ı faleˇsn´ ych detekc´ı neˇz MoG. Algoritmus je pops´an jednoduˇseji, ale pro vˇetˇs´ı mnoˇzstv´ı obr´azk˚ u v historii a pro vˇetˇs´ı rozliˇsen´ı se zvyˇsuje v´ ypoˇcetn´ı sloˇzitost. Na rozd´ıl od klouzav´eho pr˚ umˇeru vyuˇz´ıv´a mnohem l´epe velk´eho mnoˇzstv´ı uloˇzen´e informace.
4.2.3
Metody zaloˇ zen´ e na korelaci obr´ azk˚ u
Vˇsechny v´ yˇse jmenovan´e metody mˇely jednu spoleˇcnou vlastnost. Vyhodnocovaly obr´azek bez ohledu na okoln´ı obrazov´e body. Pro reprezentaci pozad´ı bylo pˇredpokl´ad´ano, ˇze jednotliv´e body jsou na sobˇe nez´avisl´e. Pro re´aln´ y obraz to ale neplat´ı a vˇsechny body obrazu jsou vz´ajemnˇe korelovan´e. Normalizovan´ a vz´ ajemn´ a korelace Normalizovan´a vz´ajemn´a korelace, nebo tak´e line´arn´ı korelaˇcn´ı koeficient, je definov´an na vektorech, u kter´ ych hled´ame vz´ajemnou podobnost x = (x1 , ..., xn ) y = (y1 , ..., yn )
(4.24)
Line´arn´ı korelaˇcn´ı koeficient r(x, y) ud´av´a, do jak´e m´ıry jsou dvojice (xi , yi ) sv´az´any line´arn´ı funkc´ı. Pokud jsou shodn´e, je v´ ysledek r(x, y) = 1. Pokud x = −y, pak r(x, y) = −1. Pro ostatn´ı pˇr´ıpady −1 < r(x, y) < 1. Postup v´ ypoˇctu je n´asleduj´ıc´ı.
45
1. Odstran´ım stˇredn´ı hodnotu vektor˚ u x a y tak, ˇze od kaˇzd´eho prvku odeˇctu pr˚ umˇernou hodnotu prvk˚ u v cel´em vektoru
xi = x i − x
(4.25)
2. Zajist´ım jednotkovou varianci ˇc´ısel vektoru xi = xi / x 2
(4.26)
r(x, y) = x y
(4.27)
3. Spoˇc´ıt´am koeficient
Line´arn´ı korelaˇcn´ı koeficient m´a nˇekolik d˚ uleˇzit´ ych vlastnost´ı. • je symetrick´ y r(x, y) = r(y, x) • invariantn´ı v˚ uˇci pˇriˇcten´ı konstanty a v˚ uˇci n´asoben´ı konstantou r(ax+b, cy+ d) = r(x, y) • v´ ysledn´ y koeficient je v omezen´em intervalu −1, 1 Porovn´ an´ı obr´ azk˚ u pomoc´ı vz´ ajemn´ e korelace
Obr´ azek 4.2: Zdrojov´e obr´ azky pro porovn´ an´ı pomoc´ı NCC
Porovn´avat cel´e obr´azky nen´ı v´ yhodn´e, protoˇze line´arn´ı korelaˇcn´ı koeficient nebude moˇzn´e pouˇz´ıt k urˇcen´ı pohybu v obraze. Vhodnˇejˇs´ı metoda je porovn´an´ı 46
obr´azku po ˇc´astech. Pomoc´ı ok´enka, kter´e se pohybuje po obou porovn´avan´ ych obrazech souˇcasnˇe. V kaˇzd´em oknˇe je spoˇctena vz´ajemn´a korelace obou obr´azk˚ u, v´ ysledek je uloˇzen a okna se posunou o dalˇs´ı obrazov´ y bod.
Obr´ azek 4.3: V´ ysledek porovn´ an´ı pomoc´ı NCC a) blok 5px b) blok 45px
Pro okno velikosti m × n a obraz velikosti M × N je matice vz´ajemn´e korelace K korelace obr´azk˚ u A a B poˇc´ıt´ana pro x = 1..M − m a y = 1..N − n. a = A(x..x + m, y..y + n) b = B(x..x + m, y..y + n) K(x, y) = r(a, b)
(4.28)
Pokud se ve v´ ysledn´e matici K vyskytuj´ı prvky bl´ızk´e 1, jsou si obr´azky podobn´e, v opaˇcn´em pˇr´ıpadˇe jsou nˇekter´e prvky menˇs´ı a na dan´e pozici je mezi obr´azky rozd´ıl. Tato metoda m´a nˇekolik z´asadn´ıch nev´ yhod. Pro zpracov´an´ı je potˇreba velk´e mnoˇzstv´ı n´asoben´ı a sˇc´ıt´an´ı. Pro zjednoduˇsen´ı v´ ypoˇctu byl pops´an algoritmus rychl´e vz´ajemn´e korelace obr´azk˚ u pomoc´ı oken [13]. Pro spr´avnou funkˇcnost je tˇreba volit dostateˇcnˇe velik´a okna. Pro mal´a okna se pˇr´ıliˇs projevuje ˇsum obr´azku, pro velk´a okna se naopak sniˇzuje rozliˇsen´ı detekce (velikost matice K). Metoda je velice n´achyln´a na ˇsum. Pokud jsou porovn´av´any velk´e plochy jedn´e barvy, je d´ıky normalizaci vyn´asoben ˇsum a v´ ysledn´a korelace vyjde, d´ıky n´ahodn´e povaze ˇsumu, n´ızk´a.
4.2.4
Detekce pohybu kamery
Z´akladn´ım c´ılem detekce pohybu v obraze je detekce pomoc´ı statick´e kamery. Pokud se zmˇen´ı vˇetˇsina obrazu mezi dvˇema sn´ımky, nelze pˇresnˇe urˇcit, co k tomu 47
vedlo. N´ahl´a zmˇena osvˇetlen´ı, prudk´ y pohyb kamerou nebo zakryt´ı objektivu vyvolaj´ı podobn´e zmˇeny, kter´e lze jen tˇeˇzko rozliˇsit. Detekci pohybu kamery proto prov´ad´ım pouze v mal´em mˇeˇr´ıtku, aby bylo moˇzn´e kompenzovat napˇr´ıklad chvˇen´ı. N´asleduj´ıc´ı metody popisuj´ı zp˚ usoby zjiˇstˇen´ı mal´eho pohybu cel´eho obrazu [3] [18] [4] [23] [1]. Srovn´ av´ an´ı blok˚ u Metoda hled´a pohyb ve dvou sousedn´ıch sn´ımc´ıch. Prvn´ı obr´azek je rozdˇelen na bloky, kter´e jsou vyhled´av´any v druh´em obr´azku. Existuje nˇekolik metod vyhled´av´an´ı bloku v n´asleduj´ıc´ım obr´azku. D´ıky zjednoduˇsuj´ıc´ımu pˇredpokladu mal´eho pohybu jsem zvolil jednoduch´ y algoritmus. Kaˇzd´ y blok se zpracov´av´a samostatnˇe. Blok prvn´ıho obr´azku je vyhled´an ve druh´em postupnˇe od pozice, ve kter´e se nach´azel v origin´aln´ım obr´azku aˇz do maxim´aln´ı povolen´e vzd´alenosti. Vyhled´avac´ı algoritmus proch´az´ı vˇsechny posunut´ı ve spir´ale od stˇredu aˇz do chv´ıle, neˇz je nalezena korespondence lepˇs´ı, neˇz pˇredem urˇcen´ y pr´ah.
Obr´ azek 4.4: Prohled´ av´ an´ı n´ asleduj´ıc´ıho sn´ımku
Takov´ ym zp˚ usobem jsou zpracov´any vˇsechny bloky p˚ uvodn´ıho obr´azku. V´ ysledkem cel´e operace jsou vektory pohybu jednotliv´ ych blok˚ u. Majorita vektor˚ u m´ıˇr´ıc´ıch stejn´ ym smˇerem je povaˇzov´ana za glob´aln´ı pohyb kamery. Porovn´an´ı shody bloku s m´ıstem ve druh´em obr´azku je prov´adˇeno pouze pomoc´ı pr˚ umˇern´e diference. Pro dva v´ yˇrezy A a B je diference spoˇc´ıt´ana jako
X Y d=
x=1
y=1
|A(x, y) − B(x, y)| X ·Y
(4.29)
Porovn´an´ı sloˇzitˇejˇs´ım algoritmem by bylo moˇzn´e, ale pˇr´ıliˇs v´ ypoˇcetnˇe n´aroˇcn´e. Normov´an´ı je moˇzn´e vypustit, protoˇze jsou porovn´av´any vˇzdy stejnˇe velk´e bloky 48
takˇze je velikost X · Y konstantn´ı, t´ım se zjednoduˇs´ı i v´ ypoˇcet, kter´ y lze cel´ y prov´adˇet v cel´ ych ˇc´ıslech. Hodnoty, z´ıskan´e pro kaˇzd´ y blok zvl´aˇst’, jsou d´ale zpracov´any a je vybr´ana nejˇcetnˇejˇs´ı hodnota smˇerov´eho vektoru pohybu. Tato hodnota je povaˇzov´ana za glob´aln´ı pohyb kamery. Pˇri pohybu kamery doch´az´ı k rozmaz´an´ı obrazu, takˇze tato metoda nen´ı pˇr´ıliˇs spolehliv´a. Nejvˇetˇs´ı nedostatek metody spoˇc´ıv´a v pˇredpokladu, ˇze se cel´ y obraz pohybuje najednou, pokud se pohybuje kamera. Senzor je ale vyˇc´ıt´an po ˇr´adc´ıch, takˇze pohyb, kter´ y zaˇcal pˇri vyˇc´ıt´an´ı prvn´ıho ˇr´adku, nemus´ı trvat pˇri vyˇc´ıt´an´ı posledn´ıho ˇr´adku. Doch´az´ı k deformaci obrazu a ˇza´dn´a hodnota pohybov´eho vektoru neodpov´ıd´a optim´alnˇe pro vˇsechny ˇr´adky. Probl´em s deformac´ı obrazu lze ˇreˇsit pouˇzit´ım blok˚ u pro vyhled´av´an´ı pohybu, kter´e jsou jen nˇekolik obrazov´ ych bod˚ u vysok´e, ale jsou ˇsirok´e jako polovina obrazu. D´ale by se pro kaˇzdou n-tici ˇra´dk˚ u uchov´avala hodnota pohybov´eho vektoru, kter´a by byla d´ale pouˇzita pro stabilizaci obrazu. Kompenzace pohybu by byla prov´adˇena v´ yhradnˇe v pr´avˇe nasn´ıman´em obr´azku. D´ale by byl poˇc´ıt´an trend celkov´eho pohybu a pomoc´ı nˇeho by byla prov´adˇena kompenzace pohybu v modelu pozad´ı. Kompenzace po ˇra´dc´ıch je komplikovan´a a vyˇzaduje velk´e mnoˇzstv´ı pˇresun˚ u dat pˇri skl´ad´an´ı stabilizovan´eho obrazu. Kompenzace pohybu z cel´eho obrazu je jednoduˇsˇs´ı, ale nedok´aˇze spr´avnˇe detekovat vˇsechny rychlosti pohybu kamery.
4.3
Nastaven´ı parametr˚ u detekce
4.3.1
Volba prahu rozd´ılov´ eho obr´ azku
Vˇetˇsina popisovan´ ych metod vyuˇz´ıv´a absolutn´ı hodnotu rozd´ılu modelovan´eho pozad´ı a aktu´aln´ıho sn´ımku. V´ ysledn´a hodnota rozd´ılu je prahov´ana. U jednoduch´ ych metod je pr´ah volen zkusmo. Hodnota prahu je urˇcena v z´avislosti na amplitudˇe ˇsumu v obraze a v z´avislosti na poˇzadovan´e citlivosti. U metod, kter´e vyuˇz´ıvaj´ı statistick´eho zpracov´an´ı vstupn´ıch obr´azk˚ u, je vˇetˇsinou pr´ah urˇcen jako n´asobek smˇerodatn´e odchylky jednotliv´ ych obrazov´ ych bod˚ u. Pro body, kter´e se v ˇcase pˇr´ıliˇs nemˇen´ı, vych´az´ı takov´ y pr´ah velice mal´ y a je zachycen i nepatrn´ y rozd´ıl v obraze. Vzhledem k velk´emu ˇsumu jsem v takov´ ych
49
pˇr´ıpadech pˇriˇc´ıtal konstantn´ı hodnotu k velikosti smˇerodatn´e odchylky k omezen´ı faleˇsn´ ych poplach˚ u. Sloˇzitˇejˇs´ı metody jako smˇes gausi´an˚ u a neparametrick´ y odhad zjiˇst’uj´ı pˇr´ımo pravdˇepodobnost s jakou namˇeˇren´ y bod patˇr´ı do popˇred´ı nebo do pozad´ı vzhledem k historii sn´ımk˚ u.
4.4
Poˇ zadavky na detekci pohybu v obraze
Detekce pohybu mus´ı b´ yt odoln´a proti okoln´ım vliv˚ um, kter´e nemaj´ı b´ yt povaˇzov´any za pohyb. Hlavn´ım c´ılem detekce je lidsk´a postava, kter´a m´a vzhledem k obrazu v kameˇre rozmˇery v urˇcit´ ych mez´ıch. Pokud jsou tyto meze pˇrekroˇceny, nejde pravdˇepodobnˇe o vyhled´avan´ y pohyb a detekce pokraˇcuje bez poplachu.
4.4.1
Detekce pohybu ve venkovn´ım prostˇ red´ı
Venkovn´ı prostˇred´ı je pro detekci pohybu komplikovan´e. Nast´avaj´ı zde velk´e zmˇeny osvˇetlen´ı a velk´e pohyby prostˇred´ı, kter´e nemaj´ı b´ yt povaˇzov´any za pohyb. Nejvhodnˇejˇs´ı pro detekci pozad´ı jsou multimod´aln´ı modely pozad´ı. Pomoc´ı neparametrick´eho odhadu je moˇzn´e vytvoˇrit model pohybuj´ıc´ıho se list´ı ve vˇetru, kter´e d´ale nebude vyvol´avat poplach, protoˇze jsou v modelu zahrnuty vˇsechny polohy l´ıstk˚ u. Pouˇzit´ı unimod´aln´ıch model˚ u pozad´ı, jako je napˇr´ıklad exponenci´aln´ı vyhlazen´ı, je nutn´e sn´ıˇzit citlivost detekce pomoc´ı zv´ yˇsen´ı prahu pro maxim´aln´ı rozd´ıl aktu´aln´ıho sn´ımku od modelu pozad´ı. T´ımto zv´ yˇsen´ım se ale z´asadnˇe sniˇzuje schopnost detekovat pohyby, kter´e jsou na nekontrastn´ım podkladˇe. Napˇr´ıklad pohyb ˇclovˇeka obleˇcen´eho v hnˇedozelen´e barvˇe pohybuj´ıc´ıho se pˇred kˇrov´ım nebude spr´avnˇe detekov´an.
4.4.2
Adaptace na zmˇ eny pozad´ı
Zvolen´a metoda detekce pozad´ı mus´ı b´ yt schopn´a adaptace na zmˇeny sc´eny, aniˇz by vyvolala poplach. Pˇri zmˇenˇe osvˇetlen´ı sc´eny (v´ ychod slunce, z´apad slunce, mrak) je nutn´e aktualizovat model dostateˇcnˇe rychle. Model pozad´ı mus´ı naopak
50
reagovat dostateˇcnˇe pomalu na to, aby pˇr´ıpadn´ y pohyb v obraze nebyl okamˇzitˇe pˇrevzat do modelu pozad´ı. Pˇr´ıklad metody, kter´a si velice dobˇre porad´ı se zmˇenou osvˇetlen´ı sc´eny je porovn´av´an´ı aktu´aln´ıho a pˇredchoz´ıho sn´ımku. Bohuˇzel tato metoda je i pˇr´ıkladem velice rychle reaguj´ıc´ı metody, takˇze pˇri pomal´ ych pohybech pohybuj´ıc´ıch se pˇredmˇet˚ u budou pˇredmˇety adaptov´any do pozad´ı a nebude vyvol´an poplach.
4.4.3
Necitlivost na zmˇ eny celkov´ eho osvˇ etlen´ı sc´ eny
Metoda by mˇela b´ yt co nejm´enˇe citliv´a na prudk´e zmˇeny jasu v cel´em obr´azku. Takov´e zmˇeny mohou zp˚ usobit napˇr´ıklad svˇetla automobilu, kter´ y v noci projede okolo okna sledovan´e m´ıstnosti. Prudk´e zmˇeny osvˇetlen´ı ve vˇetˇs´ı ˇc´asti obrazu jsou proto ignorov´any, pokud nen´ı moˇzn´e je kompenzovat.
4.4.4
Potlaˇ cen´ı faleˇ sn´ ych poplach˚ u
Citlivost detekce pohybu mus´ı b´ yt nastavena tak, aby vyvolala minim´aln´ı mnoˇzstv´ı faleˇsn´ ych poplach˚ u. Proto m˚ uˇze b´ yt detekce poplachu v´ıcef´azov´a. Pokud je detekov´an pohyb, kter´ y nen´ı jednoznaˇcn´ y, je tato informace uloˇzena a pokud do urˇcit´eho ˇcasu nastane pohyb znovu, je vyvol´an poplach.
4.4.5
V´ ypoˇ cet v re´ aln´ em ˇ case
V´ ypoˇcet detekce pohybu v obraze mus´ı b´ yt prov´adˇen v re´aln´em ˇcase. Optimalizace pro minimum v´ ypoˇct˚ u je v´ yhodn´a i z hlediska u ´spory energie pˇri bateriov´em provozu kamery. Pro detekci pohybu dostaˇcuje sn´ımkov´a frekvence okolo 2 aˇz 3 sn´ımk˚ u za vteˇrinu. Pˇr´ıpravn´a f´aze uˇcen´ı modelu pozad´ı m˚ uˇze trvat d´ele, ale samotn´a detekce mus´ı trvat m´enˇe neˇz 300ms.
4.4.6
Filtrace ˇ sumu
Pouˇzit´a metoda detekce mus´ı b´ yt velmi odoln´a proti ˇsumu v obraze. Detekce pohybu v obraze je d˚ uleˇzit´a i v noci pˇri velmi slab´em osvˇetlen´ı. Kamera sice obsahuje reflektor s IR diodami, ale i pˇres to mus´ı m´ıt nastaven velk´ y zisk. Filtraci
51
ˇsumu lze prov´adˇet pomoc´ı matematick´e morfologie, nebo pomoc´ı pr˚ umˇerov´an´ı obrazu. Noˇcn´ı vidˇen´ı nav´ıc neobsahuje velk´e mnoˇzstv´ı relevantn´ı barevn´e informace, je proto v´ yhodnˇejˇs´ı pouˇz´ıvat metody detekce, kter´e pracuj´ı s ˇsedot´onov´ ym obr´azkem. Metody pracuj´ıc´ı s barevn´ ym obr´azkem mohou pouˇz´ıt barevn´e informace k potlaˇcen´ı st´ın˚ u od objekt˚ u v obraze.
4.5 4.5.1
Implementace detekce pohybu v obraze Implementace metod v programu Matlab
Vˇsechny popisovan´e algoritmy jsem implementoval pomoc´ı Image Processing Toolbox v programu Matlab. V´ ysledky testov´an´ı unimod´aln´ıch metod modelov´an´ı pozad´ı vych´azely podobnˇe pro kalmanovu filtraci a pro exponenci´aln´ı vyhlazen´ı. Rozd´ıl tˇechto dvou metod bylo pouze rychlejˇs´ı ust´alen´ı hodnoty pˇri spuˇstˇen´ı detekce v pˇr´ıpadˇe kalmanova filtru. Aproximace medi´anu se na sc´en´ach, ve kter´ ych nebyl pohyb, chovala podobnˇe jako exponenci´aln´ı vyhlazen´ı. U sc´en s pohybem byly v´ ysledky aproximace medi´anu v´ yhodnˇejˇs´ı, protoˇze se model pozad´ı nezaˇcal tak rychle pˇribliˇzovat rychl´ ym v´ ykyv˚ um, ale drobn´e v´ ykyvy v jasu sledoval dostateˇcnˇe rychle. Nev´ yhoda aproximace medi´anu spoˇc´ıvala v neust´al´em kmit´an´ı hodnoty modelu v okol´ı stˇredn´ı hodnoty jasu obrazov´eho bodu. Kmit´an´ı bylo odstranˇeno modifikac´ı algoritmu pomoc´ı pˇrid´an´ı p´asma necitlivosti.
4.5.2
Implementace metod s pouˇ zit´ım knihovny OpenCV
Dalˇs´ım krokem byla implementace algoritm˚ u pomoc´ı knihovny OpenCV. [5] [24] Tato knihovna pro jazyk C++ je volnˇe dostupn´a a obsahuje funkce pro pr´aci s obr´azky. Implementace algoritm˚ u pro Optical Flow jsou souˇca´st´ı OpenCV. D´ale jsou pˇripraveny optimalizovan´e funkce, kter´e lze pouˇz´ıt pro v´ ypoˇcet exponenci´aln´ıho vyhlazen´ı. Bohuˇzel nˇekter´e d˚ uleˇzit´e funkce obsahuj´ı v´ ypoˇcty v plovouc´ı ˇra´dov´e ˇca´rce a proto nejsou vhodn´e pˇr´ımo pro v´ ysledn´ y syst´em. Pro v´ yvoj programu pro detekci pohybu na PC jsou dobˇre pouˇziteln´e. V knihovnˇe OpenCV jsou d´ale implementov´any statistick´e metody extrakce
52
pozad´ı. Prvn´ı metoda [33] vyuˇz´ıv´a algoritmu extrakce objekt˚ u na popˇred´ı v komplexn´ım pozad´ı. Druh´a metoda vyuˇz´ıv´a smˇesi gausi´an˚ u [26]. V extern´ı knihovnˇe cvBlobLib je implementov´an algoritmus [8] pro detekci a pojmenov´an´ı souvisl´ ych komponent, kter´ y pracuje s line´arn´ı sloˇzitost´ı. Pˇr´ımo v knihovnˇe OpenCV jsou implementov´any algoritmy zaloˇzen´e na z´aplavov´em vyplˇ nov´an´ı (flood fill), kter´e jsou ale pomalejˇs´ı a n´aroˇcnˇejˇs´ı na spotˇrebovanou pamˇet’.
4.5.3
Vlastn´ı ˇ reˇ sen´ı implementace detekce pohybu
Vlastn´ı ˇreˇsen´ı detekce pohybu vych´az´ı z knihovny OpenCV. Z t´eto knihovny jsou pouˇzity z´akladn´ı funkce pro zpracov´an´ı obrazu z V4L zaˇr´ızen´ı a funkce pro konverzi a zmˇeny velikosti obrazu. Implementace modelu pozad´ı je naps´ana vlastn´ı. Vˇsechny existuj´ıc´ı metody z t´eto knihovny jsou pˇr´ıliˇs n´aroˇcn´e na v´ ypoˇcetn´ı v´ ykon. Pro rozdˇelen´ı obr´azku popˇred´ı na souvisl´e komponenty je pouˇzita knihovna cvBlobLib.
53
Kapitola 5 Vlastn´ı ˇ reˇ sen´ı detekce pohybu Vlastn´ı ˇreˇsen´ı detekce pohybu je ˇreˇseno v jazyce C++. Nejprve je popisov´an zp˚ usob zrychlen´ı v´ ypoˇctu funkc´ı, kter´e zpracov´avaj´ı obrazov´a data. D´ale je pops´an cel´ y postup algoritmu detekce objekt˚ u na popˇred´ı a jejich vyhodnocen´ı.
5.1
Optimalizace v´ ypoˇ ctu
Rychlost v´ ypoˇctu vˇsech funkc´ı byla testov´ana pomoc´ı programu GNU Profiler. Ten umoˇzn ˇuje sb´ırat data za bˇehu aplikace. Po jej´ım ukonˇcen´ı je vyps´an seznam volan´ ych funkc´ı a kolik procent ˇcasu aplikace zab´ıraly.
5.1.1
Pˇ r´ıstup k prvk˚ um pole
Metoda, kter´a se ˇcasto pouˇz´ıv´a pro zrychlen´ı pˇr´ıstupu k prvk˚ um pole, je pouˇzit´ı ukazatelov´e aritmetiky. Ukazatel na prvek se postupnˇe inkrementuje, aˇz je zpracov´ano cel´e pole. Tento zp˚ usob pˇr´ıstupu je ale velice nepˇrehledn´ y a ze zdrojov´eho k´odu nen´ı u ´plnˇe zˇrejm´e, co program vykon´av´a. Oproti tomu indexov´ y pˇr´ıstup je mnohem pˇrehlednˇejˇs´ı, ale v nˇekter´ ych pˇr´ıpadech je povaˇzov´an za pomalejˇs´ı. Vyzkouˇsel jsem obˇe metody v jednoduch´em pˇr´ıkladu. Pˇr´ıklad je koncipov´an tak, aby chytr´e vyhodnocen´ı kompil´atoru nesmazalo tˇelo funkce z d˚ uvodu nepouˇzit´ı v´ ysledku v´ ypoˇctu. Z tohoto d˚ uvodu je vracen prvn´ı prvek pole. Pro vytv´aˇren´ı bin´arn´ıch aplikac´ı vyuˇz´ıv´am GNU C Compiler. Jeden z jeho parametr˚ u je poˇzadovan´a optimalizace k´odu. Optimalizace -O0 je zak´az´an´ı vˇsech optimalizac´ı, -O1 jsou vˇsechny optimalizace, kter´e nezp˚ usob´ı zneˇcitelnˇen´ı
54
1 2 3 4 5 6 7
i n t v y p o c e t I n d e x ( char a ) { char p o l e [ 6 4 ] ; f o r ( i n t i =0; i <64; i ++) { pole [ i ] = a ; } return p o l e [ 0 ] ; }
Listing 5.1: K´ od s pouˇzit´ım indexov´ an´ı 1 2 3 4 5 6 7 8
i n t v y p o c e t P o i n t e r ( char a ) { char p o l e [ 6 4 ] ; char ∗ pend = p o l e + 6 4 ; f o r ( char ∗ p i = p o l e ; pi
Listing 5.2: K´ od s pouˇzit´ım ukazatelov´e aritmetiky
v´ ysledn´eho assembleru pˇri ladˇen´ı, -O2 jsou pokroˇcilejˇs´ı optimalizace, kter´e ˇcasto zmˇen´ı poˇrad´ı instrukc´ı pro zv´ yˇsen´ı rychlosti, -Os je stejn´a jako -O2 a nav´ıc pˇrid´av´a optimalizace k´odu, kter´a nezvyˇsuj´ı velikost v´ ysledn´e aplikace, -O3 optimalizuje pomoc´ı rozbalen´ı cykl˚ u, pˇredpoˇc´ıt´an´ım hodnot, inline vkl´ad´an´ı funkc´ı, kter´e nebyly takto oznaˇceny, apod. Optimalizace -O3 nejv´ıce zvˇetˇsuje bin´arn´ı aplikace, ale v´ ysledn´e v´ ypoˇcty by mˇely b´ yt nejrychlejˇs´ı. Pro vytv´aˇren´ı aplikac´ı pouˇz´ıv´am optimalizaci -Os, kter´a se nejv´ıce hod´ı pro vestavn´a zaˇr´ızen´ı. V´ ysledek kompilace obou pˇr´ıklad˚ u vyˇsel rozd´ılnˇe pouze s optimalizac´ı -O0 a -O1. V tˇechto pˇr´ıpadech dokonce vych´azel pˇr´ıstup pomoc´ı ukazatelov´e aritmetiky pomalejˇs´ı, protoˇze kompil´ator prov´adˇel vˇetˇs´ı poˇcet instrukc´ı pro pˇr´ıpravu FOR cyklu. Pˇri zapnut´ı optimalizac´ı -O2 vyˇsel v´ ysledn´ y k´od stejnˇe. Zde je uk´azka v´ ysledn´eho assembleru s popisem v jazyce C. Z uk´azky je vidˇet, ˇze byl k´od pˇreloˇzen jako pˇr´ıstup pomoc´ı index˚ u i pro zdrojov´ y k´od pouˇz´ıvaj´ıc´ı ukazatelovou aritmetiku. Z toho vypl´ yv´a, ˇze pro jednoduch´ y pˇr´ıstup k prvk˚ um pole nen´ı ukazatelov´a aritmetika vhodn´a, protoˇze je nepˇrehledn´a a nav´ıc je pˇrekl´ad´ana stejnˇe jako pˇr´ıstup pomoc´ı index˚ u. Zrychlen´ı v´ ypoˇctu je moˇzn´e s pouˇzit´ım rozbalen´ı tˇela cyklu. Tˇelo cyklu je t´ımto zopakov´ano nˇekolikr´at za sebou a promˇenn´a cyklu je inkrementov´ana o v´ıce neˇz 1. Zdrojov´ y k´od, kter´ y vyuˇz´ıv´a t´eto techniky pro zrychlen´ı pˇredchoz´ıch pˇr´ıklad˚ u, vypad´a n´asledovnˇe. Tento k´od je s pouˇzit´ım optimalizace -Os pˇreloˇzen jako 55
1 2 3 4 5 6 7 8 9 10 11 12
i n t v y p o c e t ( char r 0 ) { a l l o c ( pole , 64) ; i n t r 3 =0; char ∗ r 2 = p o l e ; for { r 2 [ r 3 ]= r 0 ; r 3 ++; r3 <64; } return p o l e [ 0 ] ; f r e e ( pole ) ; }
// // //
<000>: <004>: <008>:
sub mov mov
sp , sp , #64 r3 , #0 r2 , sp
// // // // // // //
<012>: <016>: <020>: <024>: <028>: <032>: <036>:
strb add cmp bne ldrb add bx
r0 , [ r2 , r3 ] r3 , r3 , #1 r3 , #64 <012> r0 , [ sp ] sp , sp , #64 lr
Listing 5.3: Vytvoˇren´ y strojov´ y k´ od pro indexov´ an´ı i ukazatelovou aritmetiku
1 2 3 4 5 6 7 8 9 10
i n t v y p o c e t R o z b a l e n i ( char a ) { char p o l e [ 6 4 ] ; f o r ( i n t i =0; i <64; i +=4) { p o l e [ i +0]=a ; p o l e [ i +1]=a ; p o l e [ i +2]=a ; p o l e [ i +3]=a ; } return p o l e [ 0 ] ; }
Listing 5.4: K´ od s pouˇzit´ım indexov´ an´ı a rozbalen´ım cyklu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
i n t v y p o c e t ( char r 0 ) { a l l o c ( pole , 64) ; char ∗ r 3 = p o l e ; for { r3 [0]= r0 ; r3 [1]= r0 ; r3 [2]= r0 ; r3 [3]= r0 ; r2 = pole + 64; r 3 +=4; r3
// //
<000>: <004>:
sub mov
sp , sp , #64 r3 , sp
// // // // // // // // // // //
<008>: <012>: <016>: <020>: <024>: <028>: <032>: <036>: <040>: <044>: <048>:
strb strb strb strb add add cmp bne ldrb add bx
r0 , [ r3 ] r0 , [ r3 , #1] r0 , [ r3 , #2] r0 , [ r3 , #3] r2 , sp , #64 r3 , r3 , #4 r3 , r2 <008> r0 , [ sp ] sp , sp , #64 lr
Listing 5.5: V´ ysledn´ y strojov´ y k´ od pˇri rozbalen´ı cyklu
56
Z v´ ysledku je zˇrejm´e, ˇze byl cel´ y pˇr´ıstup pˇreloˇzen automaticky jako pˇr´ıstup pomoc´ı ukazatelov´e aritmetiky. Na ˇra´dku <024> je ale vidˇet, ˇze pˇreklad bez explicitn´ıho pouˇzit´ı ukazatelov´e aritmetiky nen´ı optim´aln´ı. V kaˇzd´em cyklu je totiˇz znovu poˇc´ıt´ana koncov´a mez, kter´a je ale st´ale stejn´a. V´ ysledek registru r2 by bylo vhodnˇejˇs´ı pˇresunout pˇred cel´ y cyklus. Upravil jsem tento k´od pro pouˇzit´ı ukazatelov´e aritmetiky, kter´a d´ale zrychluje vykon´av´an´ı cyklu. 1 2 3 4 5 6 7 8 9 10 11
i n t v y p o c e t R o z b a l e n i P o i n t e r ( char a ) { char p o l e [ 6 4 ] ; char ∗ pend = p o l e + 6 4 ; f o r ( char ∗ p i = p o l e ; pi
Listing 5.6: K´ od s pouˇzit´ım ukazatelov´e aritmetiky a s rozbalen´ım cyklu
Tato funkce je skuteˇcnˇe pˇreloˇzena podle pˇredpoklad˚ u. optimalizace A -O0 13 -O1 4 -Os 4
B 10 4 4
C D 9,25 5,5 2 1,75 2 1,75
Tabulka 5.1: Porovn´ an´ı poˇctu instrukc´ı pro naplnˇen´ı jednoho prvku pole v z´ avislosti na optimalizaci k´ odu. A) pomoc´ı indexov´ an´ı B) pomoc´ı ukazatelov´e aritmetiky C) pomoc´ı indexov´ an´ı pˇri pouˇzit´ı ˇctyˇr pˇriˇrazen´ı v jednom cyklu D) pomoc´ı ukazatelov´e aritmetiky a ˇctyˇr pˇriˇrazen´ı v jednom cyklu
ˇ ım v´ıce operac´ı se provede v jednom cyklu, t´ım m´enˇe bude potˇreba pr˚ C´ uchod˚ u t´ımto cyklem a t´ım menˇs´ı bude reˇzie na pˇriˇc´ıt´an´ı indexovac´ı promˇenn´e. Jiˇz pˇri ˇctyˇrn´asobn´em zkop´ırov´an´ı ˇra´dku s pˇriˇrazen´ım do tˇela cyklu lze dos´ahnout v´ıce neˇz dvojn´asobn´eho zv´ yˇsen´ı rychlosti naplnˇen´ı pole. V t´eto situaci se tak´e vyplat´ı pouˇz´ıvat ukazatelovou aritmetiku, d´ıky kter´e lze uˇsetˇrit nˇekter´e v´ ypoˇcty. Samotn´a optimalizace k´odu m´a tak´e velk´ y vliv. Zapnut´ı prvn´ı u ´rovnˇe optimalizace zjednoduˇsilo cyklus natolik, ˇze ve vˇsech funkc´ıch doˇslo k v´ıce neˇz trojn´asobn´emu zv´ yˇsen´ı rychlosti. Pˇri pouˇzit´ı techniky rozbalen´ı cyklu a pˇri spr´avn´em pouˇzit´ı ukazatelov´e aritmetiky doˇslo oproti prvn´ımu naivn´ımu pˇr´ıstupu ke zrychlen´ı v´ıce neˇz sedmin´asobn´emu. Pˇri zapnut´ı optimalizace -Os 57
! " # %&$$
$$ %&'#
Obr´ azek 5.1: Poˇcet instrukc´ı potˇrebn´ ych pro naplnˇen´ı jednoho prvku pole v z´ avislosti na rozbalen´ı cyklu.
doˇslo pouze ke zjednoduˇsen´ı tˇel funkc´ı. T´ım se zmenˇsil celkov´ y poˇcet instrukc´ı ve funkci, ale rychlost v´ ypoˇctu cyklu se nezmˇenila. Nev´ yhoda t´eto techniky optimalizace pro rychlost spoˇc´ıv´a v pˇredpokladu, ˇze poˇcet prvk˚ u je dˇeliteln´ y poˇctem pˇr´ıkaz˚ u v jednom cyklu (v tomto pˇr´ıpade ˇc´ıslem 4). Tento nedostatek lze jednoduˇse ˇreˇsit doplnˇen´ım cyklu, kter´ y projde zbytek pole po jednom prvku. Tyto techniky zrychlen´ı jsou bˇeˇznˇe pouˇz´ıv´any v knihovn´ach jako je glibc a OpenCV.
5.1.2
Rychl´ y v´ ypoˇ cet odmocniny
Pˇri detekci pohybu je vyhodnocov´ana smˇerodatn´a odchylka. Pro v´ ypoˇcet je potˇreba rychlou implementaci odmocniny. Zvolen´ y zp˚ usob vyuˇz´ıv´a Newtonovu metodu. Pro v´ ypoˇcet odmocniny v rozsahu od 0 do 65535 plnˇe dostaˇcuje. Funkce nav´ıc nemus´ı b´ yt pˇr´ıliˇs pˇresn´a. D˚ uraz je kladen hlavnˇe na rychlost. Newtonova metoda je numerick´a metoda pro nalezen´ı koˇren˚ u funkce. Pro v´ ypoˇcet odmocniny ˇc´ısla b se metoda snaˇz´ı minimalizovat funkci f (x) = x2 − b
(5.1)
f (x) = 2x
(5.2)
pomoc´ı jej´ı derivace
58
V´ ypoˇcet hodnoty x spoˇc´ıv´a v opakov´an´ı v´ ypoˇctu xn+1 = xn −
xn + f (xn ) = f (xn ) 2
b xn
(5.3)
Tento krok se opakuje do doby, neˇz je dosaˇzeno rozd´ılu |xn+1 − xn | < . Pro v´ ypoˇcet odmocniny v rozsahu 16bit ˇc´ısla staˇc´ı zhruba tˇri aˇz ˇctyˇri iterace. Pro takto mal´ y poˇcet iterac´ı z´avis´ı pˇresnost v´ ypoˇctu na zvolen´e poˇca´teˇcn´ı hodnotˇe x0 , kterou jsem numericky stanovil na x0 = 68 pro tˇri iterace a na x0 = 46 pro ˇctyˇri iterace. S tˇemito poˇca´teˇcn´ımi hodnotami vznik´a nejmenˇs´ı chyba v cel´em rozsahu. Cel´ y v´ ypoˇcet odmocniny byl ale st´ale pˇr´ıliˇs n´aroˇcn´ y, takˇze jsem zvolil pro v´ ypoˇcet odmocniny v rozsahu 0 aˇz 255 pˇredpoˇc´ıtanou tabulku. Z testov´an´ı n´aroˇcnosti totiˇz vyplynulo, ˇze vˇetˇsina v´ ypoˇct˚ u odmocniny prob´ıh´a pr´avˇe v tomto intervalu. V´ ypoˇcet odmocniny je v tabulce u ´myslnˇe vypoˇc´ıt´an s chybou. Odmocnina se v t´eto u ´loze nepouˇz´ıv´a na jin´e u ´ˇcely neˇz na v´ ypoˇcet smˇerodatn´e odchylky. K t´e by bylo nutn´e pˇriˇc´ıtat pro pˇr´ıliˇs mal´e hodnoty mal´e ˇc´ıslo, aby se eliminoval vliv ˇsumu v obraze. Toto mal´e ˇc´ıslo je tedy jiˇz souˇca´st´ı pˇredpoˇc´ıtan´e tabulky.
5.1.3
Dˇ elen´ı cel´ ych ˇ c´ısel
Dˇelen´ı cel´ ych ˇc´ısel je v jazyce C implementov´ano jako vol´an´ı funkce. Je proto pomalejˇs´ı, neˇz by se dalo oˇcek´avat. Jedinou v´ yjimkou je dˇelen´ı ˇc´ısly, kter´a jsou mocninou ˇc´ısla 2, nebo jsou t´eto mocninˇe bl´ızko. Pokud je ve zdrojov´em k´odu dˇelen´ı takovou konstantou, je automaticky pˇrevedeno na operace posunu. Napˇr´ıklad pro pˇredchoz´ı popis v´ ypoˇctu odmocniny je pouˇzito dˇelen´ı dvˇema, kter´e je kompil´atorem automaticky pˇreloˇzeno jako posun vpravo o jeden bit. Z pˇredpokladu, ˇze dˇelen´ı a n´asoben´ı konstantou, kter´a je bl´ızk´a mocninˇe dvou, je rychl´e, vych´az´ı i zp˚ usob v´ ypoˇct˚ u v pevn´e ˇr´adov´e ˇca´rce. Pro v´ ypoˇcty byl zvolen z´aklad 0x100, kter´ y odpov´ıd´a ˇc´ıslu 1,0. Vˇsechny operace sˇc´ıt´an´ı, n´asoben´ı a dˇelen´ı jsou n´aslednˇe vˇzdy pˇred v´ ypoˇctem a po v´ ypoˇctu upraveny touto konstantou.
59
5.2
Poˇ zadavky na prostˇ red´ı pro detekci pohybu
Jedn´ım z c´ıl˚ u pr´ace bylo vytvoˇren´ı detektoru pohybu v obraze, kter´ y bude v´ ypoˇcetnˇe nen´aroˇcn´ y a z´aroveˇ n robustn´ı. Nejjednoduˇsˇs´ı techniky vyuˇz´ıvaj´ı model pozad´ı, kter´ y je vypoˇc´ıt´av´an pro kaˇzd´ y obrazov´ y bod zvl´aˇst’ bez znalosti hodnot ostatn´ıch okoln´ıch bod˚ u. Pro takov´ yto zp˚ usob detekce je zapotˇreb´ı velk´ y odstup jasu popˇred´ı a pozad´ı (ˇra´dovˇe des´ıtky ze stupnice 0 aˇz 255). K zaruˇcen´ı spr´avn´e detekce pohybuj´ıc´ıho se pˇredmˇetu je proto vhodn´e vyuˇz´ıvat kontrastn´ı pozad´ı s obsahem svˇetl´ ych i tmav´ ych t´on˚ u. Pˇredpokladem pro spr´avnou ˇcinnost detekce je i n´ızk´a rychlost zmˇen pozad´ı. ˇ Casov´e konstanty zmˇen delˇs´ı neˇz ˇcasov´a konstanta detektoru nezp˚ usob´ı poplach. Pomal´e zmˇeny jsou adaptov´any do modelu pozad´ı. V tomto ohledu tvoˇr´ı nejvˇetˇs´ı probl´em rychle se pohybuj´ıc´ı svˇeteln´e zdroje. Pˇr´ıklad pro problematickou detekci je napˇr´ıklad pokoj s oknem smˇeˇruj´ıc´ım do silnice. V noci tvoˇr´ı svˇetla proj´ıˇzdˇej´ıc´ıch automobil˚ u ostr´e zmˇeny osvˇetlen´ı lok´aln´ıho charakteru, kter´e lze jen tˇeˇzko odhalit a odstranit. Zmˇeny osvˇetlen´ı jsou ve velk´em rozsahu, takˇze mohou zp˚ usobit faleˇsn´ y poplach. Existuje moˇznost kompenzace osvˇetlen´ı s pomoc´ı barevn´ ych kan´al˚ u. Tuto kompenzaci nelze ve tmˇe vyuˇz´ıt, protoˇze se informace o barv´ach ztr´ac´ı. Sn´ımaˇc kamery dosahuje mal´eho dynamick´eho rozsahu. Pokud je tedy sn´ım´ana sc´ena, ve kter´e se vyskytuj´ı zdroje svˇetla a velice tmav´e ˇcast´ı, dostanou se pˇr´ımo osvˇetlen´a m´ısta do saturace. V neosvˇetlen´ ych m´ıstech nen´ı moˇzn´e prov´est spr´avnou detekci pohybu, protoˇze pohybuj´ıc´ı se pˇredmˇety jsou pod prahem ˇsumu. Detekce pohybu v noˇcn´ıch sc´en´ach klade vˇetˇs´ı n´aroky na odstranˇen´ı ˇsumu ˇ z namˇeˇren´ ych obr´azk˚ u. Sum lze ˇca´steˇcnˇe odstranit rozmaz´an´ım a n´aslednou decimac´ı obr´azku. Noˇcn´ı sc´eny jsou nejˇcastˇeji pˇrisvˇetleny infraˇcerven´ ymi diodami okolo objektivu. Pˇri pˇrisvˇetlov´an´ı infraˇcerven´ ym svˇetlem se jeˇstˇe d´ale ztr´ac´ı barevn´a informace z obrazu.
5.3
Pouˇ zit´ a metoda pro detekci pohybu
Cel´ y postup detekce pohybu v obraze je rozdˇelen do nˇekolika f´az´ı. V prvn´ı f´azi jsem prov´adˇel experimenty se stabilizac´ı obrazu, ty ale nejsou ve v´ ysledn´em programu pouˇzity. Ve druh´e f´azi je zjiˇstˇena celkov´a zmˇena jasu obrazu. Z t´eto zmˇeny 60
ˇ ım vˇetˇs´ı celkov´a je vypoˇcten koeficient rychlosti adaptace modelu na pozad´ı. C´ zmˇena, t´ım rychlejˇs´ı adaptace. Model pozad´ı je vytvoˇren pomoc´ı aproximace medi´anu. Pr´ah pro zjiˇstˇen´ı objekt˚ u na popˇred´ı je urˇcov´an pomoc´ı aproximace smˇerodatn´e odchylky. V´ ysledkem t´eto ˇca´sti je naprahovan´ y obr´azek, kter´ y obsahuje ˇcern´e body, znaˇc´ıc´ı pozad´ı a b´ıl´e body, znaˇc´ıc´ı pohybuj´ıc´ı se objekty.
! "!
#!! ""$!
# % "
"
&'( ""
Obr´ azek 5.2: Postup detekce pohybu v obraze
ˇ Cernob´ ıl´ y obr´azek je rozdˇelen na souvisl´e komponenty. Komponenty jsou d´ale filtrov´any a bl´ızk´e komponenty jsou slouˇceny. Podle vˇsech namˇeˇren´ ych faktor˚ u je stanoveno, jestli se jedn´a o poplach. Mˇeˇren´e faktory jsou glob´aln´ı zmˇena jasu, poˇcet komponent, velikost komponent a stav v pˇredchoz´ım obr´azku. Poplach je vyvol´an pouze za pˇredpokladu, ˇze je potvrzen v´ıce sn´ımky v podobn´em rozsahu.
61
5.3.1
Zmenˇ sen´ı nasn´ıman´ eho obrazu pro potˇ reby detekce
Zmenˇsen´ı obrazu jsem prov´adˇel dvˇema zp˚ usoby. Oba zp˚ usoby jsou v knihovnˇe OpenCV implementov´any. Prvn´ı zp˚ usob vyuˇz´ıv´a klasick´e interpolace. Pro zmenˇsen´ı je pouˇzita jedna z metod od nejbliˇzˇs´ıho souseda po kubickou interpolaci. Tyto metody interpolace nezmenˇsuj´ı m´ıru ˇsumu v obraze. Pro detekci pohybuj´ıc´ıch se objekt˚ u jsou proto m´enˇe vhodn´e protoˇze zp˚ usobuj´ı v dalˇs´ıch kroc´ıch faleˇsn´e detekce. Tato metoda zmˇeny velikosti obr´azku je implementov´ana ve funkci cvResize. Druh´a metoda, kter´a se pro n´asledn´e zpracov´an´ı jev´ı jako v´ yhodnˇejˇs´ı vyuˇz´ıv´a techniky gaussovsk´ ych pyramid [2]. Tato funkce je implementov´ana v knihovnˇe OpenCV pod n´azvem cvPyrDown. Funkce zmenˇs´ı obr´azek na polovinu t´ım zp˚ usobem, ˇze jej nejprve rozmaˇze pomoc´ı gausi´anu a pot´e vypust´ı kaˇzd´ y druh´ y ˇra´dek a sloupec.
5.3.2
Stabilizace obrazu kamery
Stabilizace obrazu slouˇz´ı ke kompenzaci vibrac´ı kamery. Pˇredpoklad pro spr´avnou funkˇcnost je pevnˇe ukotven´a kamera, kter´a m´a st´alou polohu, kolem kter´e kmit´a. Algoritmus nem˚ uˇze kompenzovat pohyb kamery, kter´a se pohybuje ve vˇetˇs´ı m´ıˇre. Detekce pohybu kamery je prov´adˇena porovn´av´an´ım aktu´aln´ıho sn´ımku s modelem pozad´ı. Oba sn´ımky jsou rozdˇeleny na stejnˇe velk´e obd´eln´ıky. Pro kaˇzd´ y obd´eln´ık z aktu´aln´ıho obr´azku je vyhled´an nejl´epe odpov´ıdaj´ıc´ı obd´eln´ık z modelu pozad´ı. Zaˇca´tek vyhled´av´an´ı je na p˚ uvodn´ıch souˇradnic´ıch obd´eln´ıku v aktu´aln´ım sn´ımku. Pro kaˇzd´ y obd´eln´ık je uloˇzen lok´aln´ı vektor jeho posunut´ı. Tyto vektory jsou seˇrazeny a je vybr´an nejˇcetnˇejˇs´ı z nich. V´ ysledn´ y vektor pohybu je pouˇzit pro pˇrepoˇc´ıt´an´ı aktu´aln´ıho sn´ımku. Aktu´aln´ı sn´ımek je sloˇzen z modelu pozad´ı a z posunut´eho aktu´aln´ıho sn´ımku. Pˇrepoˇc´ıt´an´ı aktu´aln´ıho sn´ımku spoˇc´ıv´a v mozaikov´em sloˇzen´ı celkov´eho obr´azku. Na m´ıstech, kde informace chyb´ı je doplnˇena hodnota jasu z modelu pozad´ı. Pokud je v obraze v´ yrazn´ y pohyb jedn´ım smˇerem, kter´ y zakr´ yv´a v´ıce neˇz polovinu plochy obrazu, zp˚ usob´ı faleˇsnou detekci pohybu kamery. Detekce glob´aln´ıho pohybu kamery m˚ uˇze b´ yt z u ´sporn´ ych d˚ uvod˚ u vyˇrazena. Pokud nedoch´az´ı k otˇres˚ um kamery, prov´ad´ı zbyteˇcn´e v´ ypoˇcty. Pˇri menˇs´ıch po-
62
Obr´ azek 5.3: Sloˇzen´ı stabilizovan´eho obrazu A) aktu´ aln´ı sn´ımek P) model pozad´ı, vyˇsrafovan´ a ˇc´ast je v´ ysledn´ y sloˇzen´ y sn´ımek.
hybech, kter´e se projev´ı posunut´ım o jeden obrazov´ y bod, nen´ı tˇreba kompenzaci prov´adˇet, protoˇze po zmenˇsen´ı obrazu na polovinu nebo na ˇctvrtinu se rozd´ıly ztrat´ı. Pˇri realizaci stabilizace obrazu doch´azelo ˇcasto k faleˇsn´ ym detekc´ım pohybu a nebo ke ˇspatn´e detekci skuteˇcn´eho pohybu. Z tohoto d˚ uvodu nen´ı tento modul pouˇz´ıv´an, zbyteˇcnˇe zp˚ usobuje stav bl´ızk´ y vyhl´aˇsen´ı poplachu.
5.3.3
Celkov´ a zmˇ ena jasu v obraze
Obr´ azek 5.4: Mˇeˇr´ıc´ı body zmˇeny jasu v obraze
Celkov´a zmˇena jasu je mˇeˇrena jen ve vybran´ ych bodech v obraze. Zmˇena je mˇeˇrena oproti modelu pozad´ı. Vzhledem ke kmit´an´ı hodnoty modelu obrazu je 63
br´ana glob´aln´ı zmˇena jasu vˇetˇs´ı neˇz dvˇe u ´rovnˇe jasu. Ve vˇsech mˇeˇren´ ych bodech je spoˇc´ıt´ana zmˇena jasu se zachov´an´ım znam´enka. Z v´ ysledn´ ych hodnot je vybr´an medi´an, kter´ y reprezentuje hodnotu jasu nejl´epe a nen´ı vych´ ylen ojedinˇel´ ymi ˇspiˇckami.
5.3.4
Modelov´ an´ı odhadu pozad´ı sc´ eny
Metodu pro modelov´an´ı pozad´ı jsem vyb´ıral s ohledem na jednoduchost implementace a na schopnosti oddˇelen´ı modelu pozad´ı. Nejl´epe vˇsem poˇzadavk˚ um vyhovovala metoda aproximace klouzav´eho medi´anu. U nˇekter´ ych model˚ u pozad´ı bylo vhodn´e mˇenit rychlost adaptace obrazov´eho bodu v z´avislosti na tom, jestli je v masce pohybu nebo ne. U aproximace medi´anu je tato zmˇena prov´adˇena automaticky jiˇz z principu zpracov´an´ı. D´ıky konstantn´ımu kroku, se kter´ ym se m˚ uˇze hodnota pozad´ı sniˇzovat nebo zvyˇsovat, je zajiˇstˇena poˇzadovan´a sn´ıˇzen´a citlivost na pˇr´ıliˇs velk´e zmˇeny jasu. !#
#%&'%
$
Obr´ azek 5.5: Rychlost adaptace na celkovou zmˇenu jasu
Za norm´aln´ıch okolnost´ı je volen krok jako jedna u ´roveˇ n jasu. Pokud doch´az´ı ke glob´aln´ı zmˇenˇe jasu, je tato zmˇena detekov´ana a v z´avislosti na n´ı je zvˇetˇsen krok. T´ım doch´az´ı k rychlejˇs´ı adaptaci na prudk´e zmˇeny celkov´eho jasu. Pˇri kroku 1 by adaptace z ˇcern´eho obrazov´eho bodu na b´ıl´ y trvala zhruba 256 sn´ımk˚ u (kv˚ uli 256 odst´ın˚ um ˇsed´e). Pokud je krok ovlivnˇen glob´aln´ı zmˇenou jasu, m˚ uˇze prudk´a zmˇena cel´eho obrazu z ˇcern´eho na b´ıl´ y trvat zhruba 9 sn´ımk˚ u.
64
"#"
#%&'(%"
$"
Obr´ azek 5.6: Rychlost adaptace na lok´ aln´ı zmˇenu jasu
5.3.5
Detekce objekt˚ u na popˇ red´ı
Detekce objekt˚ u je prov´adˇena pomoc´ı prahov´an´ı rozd´ılov´eho sn´ımku, kter´ y vznikne odeˇcten´ım aktu´aln´ıho sn´ımku a modelu pozad´ı. Pr´ah jednotliv´ ych obrazov´ ych bod˚ u nen´ı stanoven pevnˇe, ale je pro kaˇzd´ y bod samostatnˇe poˇc´ıt´an. V´ ypoˇcet prob´ıh´a pomoc´ı rekurzivn´ıho odhadu smˇerodatn´e odchylky. Smˇerodatn´a odchylka je poˇc´ıt´ana jako exponenci´aln´ı vyhlazen´ı hodnot druh´e mocniny rozd´ılu sn´ımk˚ u. Smˇerodatn´a odchylka je uchov´av´ana ve sv´e druh´e mocninˇe, protoˇze je to vhodnˇejˇs´ı pro z´ısk´an´ı vˇetˇs´ı pˇresnosti pˇri aktualizaci nov´ ym sn´ımkem a nav´ıc je uˇsetˇreno nˇekolik v´ ypoˇct˚ u druh´e mocniny. s = s · (1 − α) + (b − x)2 · α
(5.4)
kde s je druh´a mocnina odhadnut´e smˇerodatn´e odchylky pro aktu´aln´ı obrazov´ y bod, b je hodnota jasu obrazov´eho bodu modelu pozad´ı, x je hodnota jasu obrazov´eho bodu aktu´aln´ıho sn´ımku a α je koeficient, kter´ y ˇr´ıd´ı rychlost aktualizace smˇerodatn´e odchylky. Hodnota smˇerodatn´e odchylky je pouˇzita k prahov´an´ı rozd´ılov´eho sn´ımku. Pokud je splnˇena podm´ınka |b − k| > k ·
√
s
(5.5)
kde k je konstanta, je bod detekov´an jako popˇred´ı. Hodnotu konstanty k jsem urˇcil na velikost 2. Podle vlastnost´ı norm´aln´ıho rozdˇelen´ı a smˇerodatn´e odchylky by do takov´eho intervalu mˇelo spadat 68% vˇsech namˇeˇren´ ych hodnot. 65
Tato hodnota je dostateˇcn´a a osamocen´e body, kter´e jsou faleˇsnˇe detekov´any jsou v n´asleduj´ıc´ıch kroc´ıch filtrov´any.
5.3.6
Zpracov´ an´ı detekovan´ ych bod˚ u popˇ red´ı
Cel´ y obr´azek je pˇred´an algoritmu pro hled´an´ı souvisl´ ych komponent. Tento algoritmus nalezne vˇsechny souvisl´e celky a oznaˇckuje je. Mnoˇzinu vˇsech souvisl´ ych celk˚ u d´ale zpracov´av´am. Na mnoˇzinu je aplikov´an filtr, kter´ y odstran´ı pˇr´ıliˇs mal´e objekty s obsahem menˇs´ım neˇz napˇr. 3px. Pouˇzit´ y algoritmus pro hled´an´ı souvisl´ ych komponent je pops´an v [8]. Popisovan´ y algoritmus pouˇz´ıv´a techniky sledov´an´ı kontur. Algoritmus proch´az´ı obr´azek postupnˇe po ˇra´dc´ıch. Pokud je nalezena kontura, proch´az´ı algoritmus celou konturu neˇz nalezne bod, ze kter´eho vyˇsel. Nalezen´a kontura je oznaˇcena. Algoritmus pokraˇcuje v proch´azen´ı ˇr´adku a oznaˇc´ı vˇsechny body v tomto ˇra´dku, kter´e jsou uvnitˇr kontury. Jakmile algoritmus dojde na konec posledn´ıho ˇr´adku, jsou oznaˇceny vˇsechny komponenty. Algoritmus pracuje v line´arn´ım ˇcase a kromˇe bod˚ u kontury projde kaˇzd´ y obrazov´ y bod pouze jednou. V´ ysledn´e pojmenovan´e komponenty jsou d´ale pˇred´any filtru, kter´ y odebere komponenty menˇs´ı neˇz definovan´a mez. Dalˇs´ı filtr komponent proch´az´ı postupnˇe vˇsechny komponenty, vypoˇc´ıt´av´a polohu a velikost obd´eln´ıku, kter´ y cel´ y obklop´ı danou komponentu. Vˇsechny takto vytvoˇren´e obd´eln´ıky jsou porovn´any a ty, kter´e se vz´ajemnˇe pˇrekr´ yvaj´ı, nebo jsou od sebe vzd´aleny m´enˇe neˇz dan´a mez, jsou slouˇceny do jedn´e komponenty.
5.3.7
Zpracov´ an´ı detekovan´ ych souvisl´ ych komponent
V´ ysledn´e komponenty jsou pˇred´any jednoduch´emu rozhodovac´ımu algoritmu. Pokud je komponent velk´ y poˇcet, znaˇc´ı to zmˇenu jasu obrazu. V takov´em pˇr´ıpadˇe nen´ı vyvol´an poplach. Pokud je komponent m´enˇe a jejich velikost je vˇetˇs´ı neˇz zadan´ y pr´ah je uloˇzen stav pˇred poplachem. Pokud je v n´asleduj´ıc´ım sn´ımku nalezen podobn´ y poˇcet podobnˇe velk´ ych komponent, je vyhl´aˇsen poplach. Poˇcet sn´ımk˚ u, kter´e se pod´ılej´ı na vyhl´aˇsen´ı poplachu m˚ uˇze b´ yt r˚ uzn´ y. Obrana proti faleˇsn´ ym poplach˚ um od zv´ıˇrat m˚ uˇze b´ yt zajiˇstˇena potlaˇcen´ım detekce objekt˚ u, kter´e jsou delˇs´ı neˇz vyˇsˇs´ı. Detekce pohybu oˇcek´av´a sp´ıˇse lidsk´e
66
Obr´ azek 5.7: Porovn´ an´ı rozmˇer˚ u ˇclovˇeka a zv´ıˇrete
postavy, kter´e jsou sp´ıˇse vyˇsˇs´ı neˇz ˇsirˇs´ı. [10] Hodnota pomˇeru stran zjiˇstˇen´e komponenty tedy m˚ uˇze b´ yt jako jeden ze vstup˚ u do rozhodovac´ıho algoritmu.
5.3.8
Namˇ eˇ ren´ e v´ ysledky v r˚ uzn´ ych prostˇ red´ıch
V´ ysledn´ y algoritmus jsem vyzkouˇsel na nˇekolika sekvenc´ıch z re´aln´eho prostˇred´ı. Prvn´ı sekvence sleduje vzd´alenou cestu. Pohybuj´ıc´ı se objekty jsou vysok´e jen nˇekolik obrazov´ ych bod˚ u. Sn´ıman´a oblast je dobˇre osvˇetlena, takˇze obsahuje minim´aln´ı mnoˇzstv´ı ˇsumu. V obraze jsou ale stromy, kter´e se za siln´eho vˇetru pohybuj´ı a zp˚ usobuj´ı faleˇsn´e detekce. Druh´a sekvence sleduje venkovn´ı sc´enu mezi budovami. Detekovan´e objekty v podobˇe lid´ı a aut jsou tak´e o rozmˇerech jen nˇekolik obrazov´ ych bod˚ u. Pˇri sn´ım´an´ı sekvence doch´azelo k velk´ ym zmˇen´am osvˇetlen´ı sc´eny. Tyto zmˇeny zp˚ usobovaly mraky a prudk´e slunce. Nev´ yhoda pohybuj´ıc´ıch se mrak˚ u byla nerovnomˇern´a zmˇena jasu cel´e sc´eny a z tohoto d˚ uvodu ˇc´asteˇcnˇe selh´aval algoritmus na detekci glob´aln´ı zmˇeny jasu v obraze. Tˇret´ı sekvence sleduje vnitˇrn´ı prostor pokoje. Detekovan´a osoba zab´ır´a velkou ˇca´st zorn´eho pole kamery. Nav´ıc byla pouˇzita jin´a metoda zmenˇsen´ı obr´azku a t´ım vzniklo velk´e mnoˇzstv´ı ˇsumu.
5.4 5.4.1
Detekce pohybu pomoc´ı senzoru PIR Pasivn´ı infraˇ cerven´ y senzor
Pasivn´ı infraˇcerven´ y senzor (d´ale jen PIR) je elektronick´a souˇca´stka, kter´a mˇeˇr´ı infraˇcerven´e z´aˇren´ı z objekt˚ u v zorn´em poli. Senzor je vyroben z pyroelektrick´eho materi´alu, kter´ y je citliv´ y na infraˇcerven´e z´aˇren´ı. Pro u ´ˇcely detekce pohybu je na 67
Maska popˇ red´ı
Detekovan´ e objekty
Sn´ımek ˇ c.: 861 Objekty v z´ abˇ eru: ˇclovˇek se psem, pohybuj´ıc´ı se stromy
Sn´ımek ˇ c.: 1020 Objekty v z´ abˇ eru: dva psi, pohyb strom˚ u nedetekov´an
Sn´ımek ˇ c.: 1083 Objekty v z´ abˇ eru: dva lid´e a pes, jeden pes nedetekov´an Tabulka 5.2: Video sekvence: venkovn´ı cesta Pohybuj´ıc´ı se objekty: lid´e a zv´ıˇrata Vlivy: list´ı strom˚ u pohybuj´ıc´ı se ve vˇetru
68
Maska popˇ red´ı
Detekovan´ e objekty
Sn´ımek ˇ c.: 220 Objekty v z´ abˇ eru: ˇclovˇek a automobil
Sn´ımek ˇ c.: 683 Objekty v z´ abˇ eru: jeden ˇclovˇek
Sn´ımek ˇ c.: 1182 Objekty v z´ abˇ eru: skupinka dvou lid´ı a faleˇsn´a detekce zmˇeny jasu stˇrechy budovy
Sn´ımek ˇ c.: 1727 Objekty v z´ abˇ eru: faleˇsn´a detekce zmˇeny jasu budovy pˇri pr˚ uchodu mraku Tabulka 5.3: Video sekvence: cesta mezi budovami Pohybuj´ıc´ı se objekty: lid´e a vozidla Vlivy: prudk´e zmˇeny osvˇetlen´ı
69
Maska popˇ red´ı
Detekovan´ e objekty
Sn´ımek ˇ c.: 1128 Objekty v z´ abˇ eru: ˇclovˇek
Sn´ımek ˇ c.: 1132 Objekty v z´ abˇ eru: ˇclovˇek
Tabulka 5.4: Video sekvence: pr˚ uchod pokojem Pohybuj´ıc´ı se objekty: ˇclovˇek Vlivy: objekt zab´ır´ a velkou ˇc´ast obrazu
Maska popˇ red´ı
Detekovan´ e objekty
Sn´ımek ˇ c.: 984 Objekty v z´ abˇ eru: ˇclovˇek
Tabulka 5.5: Video sekvence: pr˚ uchod pokojem Pohybuj´ıc´ı se objekty: ˇclovˇek Vlivy: ˇsum v obraze
70
Maska popˇ red´ı
Detekovan´ e objekty
Sn´ımek ˇ c.: 271 Objekty v z´ abˇ eru: kontrastn´ı objekty, klika, hlava, ruce Tabulka 5.6: Video sekvence: pr˚ uchod tmavou chodbou Pohybuj´ıc´ı se objekty: ˇclovˇek Vlivy: nekontrastn´ı prostˇred´ı – ˇclovˇek v tmav´em obleˇcen´ı ve zhasnut´e chodbˇe
ˇcipu um´ıstˇeno v´ıce senzor˚ u, kter´e jsou zapojeny do diferenci´aln´ıho zesilovaˇce. V takov´em zapojen´ı se v´ ystupn´ı sign´aly jednotliv´ ych ˇca´st´ı senzoru odeˇc´ıtaj´ı a je t´ım dosaˇzeno odstranˇen´ı pr˚ umˇern´e teploty pozad´ı. Pˇri pohybu chladnˇejˇs´ıho nebo teplejˇs´ıho objektu pˇred senzorem dojde k v´ ykyvu v´ ystupn´ı hodnoty. Pro u ´ˇcely detekce pohybu je samotn´ y senzor spojov´an s Fresnelovou ˇcoˇckou, kter´a vymezuje zorn´e pole senzoru a aktivn´ı z´ony. Pˇr´ıklad takov´ ych z´on je na obr´azku 5.8 a 5.9. Pˇri pˇrechodu objektu do aktivn´ı z´ony je infraˇcerven´e z´aˇren´ı vych´azej´ıc´ı z teplejˇs´ıho pˇredmˇetu soustˇredˇeno na ploˇse senzoru.
5.4.2
Typick´ e v´ ystupn´ı pr˚ ubˇ ehy sign´ al˚ u
Sign´al z ˇcidla je ust´alen na nulov´e hodnotˇe, kolem kter´e kmit´a. Pˇri pohybu objektu z´onou se objev´ı pulz, kter´ y m´a z´apornou i kladnou polaritu. Pokud je ˇcidlo zahˇr´ıv´ano nebo ochlazov´ano, vytvoˇr´ı se pulz pouze jedn´e polarity.
5.4.3
Zpracov´ an´ı sign´ alu z ˇ cidla
Hodnotu napˇet´ı na v´ ystupu ˇcidla vzorkuji kaˇzd´ ych 100ms. Namˇeˇren´a hodnota je zpracov´ana jednoduch´ ym IIR filtrem, kter´ y vytv´aˇr´ı exponenci´aln´ı vyhlazen´ı sign´alu s dlouhou ˇcasovou konstantou. V´ ystup filtru je odhadnut´a nulov´a hodnota napˇet´ı ˇcidla. Rozd´ıl aktu´aln´ı hodnoty a odhadnut´e nulov´e hodnoty je prahov´an. Pokud jedna p˚ ulvlna pulzu pˇrekroˇc´ı pr´ah, je tento stav zaznamen´an. Pokud se do urˇcen´eho ˇcasu objev´ı i p˚ ulvlna s obr´acenou polaritou, je vyhl´aˇsen poplach. Jinak se po urˇcit´e dobˇe neˇcinnosti vr´at´ı syst´em do stavu pˇred upozornˇen´ım na poplach. 71
10m
5m
88.2o
0
5m
10m
Obr´ azek 5.8: Pˇr´ıklad pohledu zhora na z´ ony vytvoˇren´e pomoc´ı fresnelov´ ych ˇcoˇcek [15]
2.1m
1.7m 3.7m
7m
15.6m
18m
Obr´ azek 5.9: Pˇr´ıklad pohledu ze strany na z´ ony vytvoˇren´e pomoc´ı fresnelov´ ych ˇcoˇcek [15]
!"#%&!(%)*+,
/- .
-.
Obr´ azek 5.10: Pr˚ ubˇeh sign´ alu pˇri pr˚ uchodu pˇred ˇcidlem
72
5.4.4
Ruˇ siv´ e vlivy senzoru PIR
PIR senzor je citliv´ y na vˇsechny zdroje tepla. Senzor je ovlivˇ nov´an zmˇenami teplot v kameˇre. Rozsv´ıcen´ı a zhasnut´ı infraˇcerven´eho reflektoru obsaˇzen´eho v kameˇre zp˚ usob´ı takov´e zmˇeny, ˇze senzor PIR zp˚ usob´ı poplach. Za senzorem PIR je pˇripojen citliv´ y zesilovaˇc. V´ ystup senzoru je tedy velice citliv´ y na vysokofrekvenˇcn´ı ruˇsen´ı napˇr´ıklad od GSM ant´eny. V pˇr´ıpadˇe vys´ıl´an´ı je tedy nutn´e potlaˇcit poplach zp˚ usoben´ y senzorem. Senzor nedetekuje objekty za sklem. Bˇeˇzn´e sklo m´a v oblasti infraˇcerven´eho svˇetla velk´ y u ´tlum. Senzor jsem um´ıstil na jednu stranu sklenˇen´e desky do vzd´alenosti 5cm od desky. Na druh´e stranˇe sklenˇen´e desky jsem pohyboval objektem s jinou teplotou neˇz pozad´ı (rukou) tak´e ve vzd´alenosti zhruba 5cm od sklenˇen´e desky. Na v´ ystupu senzoru nebyl znateln´ y v´ ykyv. Pˇri odstranˇen´ı sklenˇen´e desky a opakov´an´ı pohybu se dostal v´ ystup senzoru okamˇzitˇe do kladn´e a n´aslednˇe z´aporn´e saturace.
5.4.5
Porovn´ an´ı detekce pohybu v obraze se senzorem PIR
Detekce pohybu v interi´ eru Detekce pohybu pomoc´ı senzoru PIR je velmi snadn´a. Pˇri spr´avn´e volbˇe Fresnelov´ ych ˇcoˇcek, kter´e ovlivˇ nuj´ı polohy detekˇcn´ıch z´on, je detekce v interi´eru velmi dobr´a. Senzor reaguje na pohyb objekt˚ u bez ohledu na okoln´ı osvˇetlen´ı. V interi´eru nen´ı tolik ruˇsiv´ ych vliv˚ u, kter´e by senzor ovlivˇ novaly a vyvol´avaly by faleˇsn´e poplachy. Detekce pohybu v obraze je pomˇernˇe jednoduch´a. Pro detekci staˇc´ı jednoduch´e algoritmy. Podle velikosti sledovan´e m´ıstnosti a podle zvolen´eho objektivu lze velice snadno nastavit velikost objekt˚ u, kter´e mohou vyvolat poplach. Detekce pohybu v exteri´ eru Detekce pohybu pomoc´ı senzoru PIR je velmi nepˇresn´a. V exteri´eru je tepeln´e pozad´ı velice nestabiln´ı a v´ ystup senzoru vykazuje neoˇcek´avan´e v´ ykyvy. Ve venkovn´ım prostˇred´ı m˚ uˇze velice snadno doj´ıt k faleˇsn´ ym poplach˚ um. Detekce pohybu v obraze pˇrin´aˇs´ı v´ yhody oproti senzoru PIR. Pˇri detekci
73
pohybu v obraze je moˇzn´e zvolit regiony v obraze, kter´e maj´ı b´ yt sledov´any. Lze tak jednoduˇse zamezit faleˇsn´ ym poplach˚ um napˇr´ıklad od strom˚ u ve vˇetru, kter´e lze v uˇzivatelsk´em nastaven´ı maskovat. Pokud je potˇreba pouˇz´ıt detekci pohybu pˇred pozad´ım, kter´e se samo pohybuje, je nutn´e pouˇz´ıt sloˇzitˇejˇs´ı metody, kter´e jsou ale v´ ypoˇcetnˇe n´aroˇcn´e a kter´e nejsou pro vestavn´a zaˇr´ızen´ı vhodn´e. Mezi takov´e metody patˇr´ı napˇr´ıklad neparametrick´ y odhad, kter´ y umoˇzn ˇuje vytvoˇren´ı modelu nestacion´arn´ıho pozad´ı. Detekce pohybu v noci Detekce pohybu pomoc´ı senzoru PIR je moˇzn´a. Senzor detekuje infraˇcerven´e z´aˇren´ı vych´azej´ıc´ı z objekt˚ u. Pro svoji ˇcinnost nepotˇrebuje extern´ı osvˇetlen´ı. Detekce pohybu v obraze je oproti tomu velice problematick´a. Pokud nen´ı pouˇzito pˇrisvˇetlen´ı, mus´ı b´ yt nastaven velk´ y zisk zesilovaˇce obrazov´eho senzoru a nebo mus´ı b´ yt zvolen delˇs´ı expoziˇcn´ı ˇcas. Pˇri delˇs´ım ˇcase doch´az´ı k rozmaz´an´ı sc´eny a pˇri vysok´em zes´ılen´ı doch´az´ı i k velk´emu zes´ılen´ı ˇsumu, kter´ y m˚ uˇze zp˚ usobovat faleˇsn´e detekce. Pˇri osvˇetlen´ı vestavˇen´ ym infraˇcerven´ ym osvˇetlovaˇcem naproti tomu doch´az´ı k faleˇsn´ ym poplach˚ um vlivem prachov´ ych ˇca´stic. Pokud prachov´a ˇca´stice prol´etne tˇesnˇe pˇred objektivem, odraz´ı velk´e mnoˇzstv´ı dopadaj´ıc´ıho svˇetla z reflektoru a ve sn´ıman´em obraze se jev´ı jako velice z´aˇriv´ y pohybuj´ıc´ı se objekt.
74
Kapitola 6 Uˇ zivatelsk´ e rozhran´ı a vizualizace detekce pohybu 6.1
Poˇ c´ıtaˇ cov´ y program pro demonstraci detekce pohybu v obraze
$&'
! "#
) (
Obr´ azek 6.1: Navrˇzen´e uˇzivatelsk´e rozhran´ı pro demonstraci detekce pohybu v obraze.
Pro demonstrace detekce pohybu v obraze jsem vytvoˇril jednoduch´ y program. Tento program ukazuje veˇsker´e ˇca´sti detekˇcn´ıho procesu. Skl´ad´a se z nˇekolika zobrazovac´ıch ˇca´st´ı. Ve stˇredov´e ˇc´asti je um´ıstˇen prvek, na kter´ y je prom´ıt´an ˇziv´ y obraz. Do obrazu jsou vykreslov´any detekovan´e objekty, kter´e vyvol´avaj´ı poplach. 75
Na krajn´ı ˇc´asti okna jsou um´ıstˇeny prvky, na kter´e jsou prom´ıt´any informace, z nichˇz se pozice pohybuj´ıc´ıch ˇca´st´ı urˇcuje. Prvn´ı je prahovan´ y rozd´ılov´ y sn´ımek. B´ıl´a m´ısta znaˇc´ı detekovan´ y objekt na popˇred´ı. Druh´ y je vytvoˇren´ y model pozad´ı. Ten obsahuje objekty, kter´e jsou ve sc´enˇe dlouho na stejn´em m´ıstˇe. Tˇret´ı je obr´azek modelu smˇerodatn´e odchylky ukazuj´ıc´ı pamˇet’ pohybuj´ıc´ıch se objekt˚ u.
Obr´ azek 6.2: Pohled na kyvadlo, kter´e je detekov´ano jako velk´ y pohyb.
Obr´ azek 6.3: Pohled na ruku drˇz´ıc´ı tuˇzku. Ruka byla dlouho na stejn´em m´ıstˇe, proto se prom´ıtla do nauˇcen´eho pozad´ı. Mal´ y pohyb tuˇzky nevyvolal maxim´ aln´ı v´ ychylku ukazatele.
Program vyuˇz´ıv´a metody automatick´e detekce prahu pomoc´ı modelov´an´ı smˇerodatn´e odchylky, takˇze nem´a ˇza´dn´e ovl´adac´ı prvky. Jako zdroj obrazov´ ych dat byla pouˇzita bˇeˇzn´a webkamera. V´ ysledn´a informace o poplachu m˚ uˇze b´ yt 76
br´ana z ukazatele m´ıry pohybu. Tento ukazatel je pˇr´ımo u ´mˇern´ y velikosti nejvˇetˇs´ı souvisl´e komponenty a je nepˇr´ımo u ´mˇern´ y jej´ımu obvodu. D´ale je ukazatel nepˇr´ımo u ´mˇern´ y celkov´e zmˇenˇe jasu obr´azku. Pˇri velk´em poˇctu detekovan´ ych souvisl´ ych komponent se v´ ysledn´a hodnota ukazatele sniˇzuje.
6.2
Demonstrace detekce pohybu pˇ r´ımo v kameˇ re EYE-02
Stejn´ y program, kter´ y byl pouˇzit pro demonstraci detekce na poˇc´ıtaˇci je pouˇzit i v kameˇre. Pouze pˇri pˇrekladu bylo zak´az´ano grafick´e uˇzivatelsk´e rozhran´ı. Program vypisuje detekovan´ y pohyb do konzole. Vzhledem k tomu, ˇze zat´ım nen´ı dostupn´ y ovladaˇc obrazov´eho senzoru, je demonstrace provedena pomoc´ı souboru s nahran´ ym videoz´aznamem. Tento z´aznam je uloˇzen ve form´atu MJPEG, kter´ y je v kameˇre dek´odov´an pomoc´ı knihovny FFMPEG. Pˇri testech v´ ykonnosti byl program schopn´ y takov´ ym zp˚ usobem zpracovat zhruba jeden sn´ımek za vteˇrinu v rozliˇsen´ı 640×480. Testovan´e video bylo uloˇzeno na s´ıt’ov´em disku a bylo sd´ıleno pomoc´ı NFS. Na rychlosti zpracov´an´ı se tedy projevila i omezen´a rychlost portu USB. Maxim´aln´ı namˇeˇren´a pˇrenosov´a rychlost portu USB byla v tˇechto testech 840kB/s.
6.3
Ovl´ ad´ an´ı kamery z osobn´ıho poˇ c´ıtaˇ ce
Nejjednoduˇsˇs´ı zp˚ usob ovl´ad´an´ı kamery je pˇres webov´e rozhran´ı. V bal´ıku busybox je obsaˇzen webov´ y server. Tento server obsahuje i podporu pro vykon´av´an´ı skript˚ u. Vˇsechny skripty jsou um´ıstˇeny v adres´aˇri cgi-bin. V tomto adres´aˇri je um´ıstˇen hlavn´ı skript, kter´ y pˇred´av´a parametry pro detektor pohybu. D´ale je zde skript vypisuj´ıc´ı proud dat. Proud je typu multipart/x-mixed-replace. Tento zp˚ usob pˇrenosu slouˇz´ı ke kontinu´aln´ı aktualizaci pˇred´avan´eho obr´azku bez odpojen´ı od serveru. Bohuˇzel je takov´ y zp˚ usob pˇrenosu podporov´an pouze webov´ ym prohl´ıˇzeˇcem Mozilla Firefox, takˇze pro ostatn´ı prohl´ıˇzeˇce je potˇreba vyuˇz´ıt vloˇzen´ y objekt Flash nebo Java applet. Skript, kter´ y pˇred´av´a proud obr´azk˚ u, zamkne soubor videozaˇr´ızen´ı, takˇze je moˇzn´e pˇristupovat k obr´azk˚ um kamery pouze z jednoho otevˇren´eho webov´eho prohl´ıˇzeˇce. 77
Webov´ y server dostane poˇzadavek od prohl´ıˇzeˇce v podobˇe dotazu GET. 1
GET / c g i −b i n /cam . j p g HTTP/ 1 . 1
Listing 6.1: Dotaz prohl´ıˇzeˇce
Na tento poˇzadavek webov´ y server spust´ı obsluˇzn´ y skript, kter´ y odeˇsle standardn´ı HTTP hlaviˇcku. 1 2 3 4 5
HTTP/ 1 . 0 200 OK S e r v e r : EYE−02 camera Expires : 0 Pragma : no−c a c h e Content−Type : m u l t i p a r t /x−mixed−r e p l a c e ; boundary=O d d e l o v a c i R e t e z e c
Listing 6.2: Hlaviˇcka odpovˇedi HTTP serveru
Po t´eto hlaviˇcce n´asleduje proud JPEG obr´azk˚ u, kter´ y se skl´ad´a z hlaviˇcky pro kaˇzd´ y obr´azek v proudu a vlastn´ıch dat obr´azku. 1 2 3
OddelovaciRetezec Content−Type : image / j p e g Content−Length : 6280
4 5 6
. . . . . . JFIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....................................................
Listing 6.3: D´ılˇc´ı hlaviˇcka jednotliv´ ych obr´ azk˚ u v proudu
Text OddelovaciRetezec slouˇz´ı k oddˇelen´ı jednotliv´ ych obr´azk˚ u. Content-Length ud´av´a d´elku n´asleduj´ıc´ıho obr´azku. Tato poloˇzka nen´ı povinn´a, ale zrychluje n´asledn´e zpracov´an´ı v prohl´ıˇzeˇci, kter´ y nemus´ı v objemn´em proudu dat vyhled´avat oddˇelovac´ı ˇretˇezec a JPEG hlaviˇcku.
6.4
Ovl´ ad´ an´ı kamery pˇ res mobiln´ı telefon
Po vloˇzen´ı SIM karty a po softwarov´em zapnut´ı GSM modulu m˚ uˇze kamera s okol´ım komunikovat pomoc´ı GPRS a SMS. GSM modem je pˇripojen na s´eriov´em rozhran´ı. Na tomto rozhran´ı je spuˇstˇena sluˇzba, kter´a zapne na s´eriov´em portu GSM multiplex. Tato sluˇzba vytvoˇr´ı dva soubory zaˇr´ızen´ı v adres´aˇri /dev/pts. Jeden soubor slouˇz´ı pro pˇripojen´ı sluˇzby, kter´a se star´a o GSM sluˇzby jako pˇrij´ım´an´ı a odes´ıl´an´ı SMS. Pro takov´e u ´ˇcely je pouˇzit program gammu. Vytvoˇren´ı s´ıt’ov´eho 78
rozhran´ı pˇres GPRS je dosaˇzeno pomoc´ı programu pppd. Tento program se pˇripoj´ı na GSM modul pomoc´ı druh´eho souboru vytvoˇren´eho sluˇzbou multiplexu a inicializuje PPP komunikaci. Takto vytvoˇren´ y komunikaˇcn´ı kan´al pˇresmˇeruje na s´ıt’ov´e rozhran´ı ppp0.
79
Kapitola 7 Z´ avˇ er Prvn´ım u ´kolem cel´e pr´ace bylo portov´an´ı operaˇcn´ıho syst´emu Linux na bezpeˇcnostn´ı kameru EYE-02 (viz kapitola 3). Tato ˇc´ast ˇcinila z poˇc´atku znaˇcn´e probl´emy, protoˇze v kameˇre nen´ı dostateˇcnˇe velk´a pamˇet’ FLASH pro uloˇzen´ı j´adra Linuxu a souborov´eho syst´emu. V kameˇre je ale microSD karta, kter´a byla pro tyto u ´ˇcely pouˇzita. Pˇr´ıstup k pamˇet’ov´e kartˇe pˇres rozhran´ı MCI procesor˚ u AT91 ale nepoˇc´ıt´a s vyuˇzit´ım pro start syst´emu, takˇze jsem ovladaˇc pro tuto funkci opravil. Bylo nutn´e zmˇenit poˇrad´ı naˇc´ıt´an´ı tohoto modulu a pˇresunout ho mezi moduly, kter´e jsou zavedeny dˇr´ıve neˇz vlastn´ı ovladaˇc souborov´eho syst´emu. D´ale byly provedeny z´akladn´ı u ´pravy j´adra Linuxu tak, aby spr´avnˇe obsluhovalo pˇripojen´e periferie (viz sekce 3.3). Napsal jsem vlastn´ı soubor definice hardware, kter´ y z vˇetˇs´ı ˇca´sti vych´azel ze souboru pro v´ yvojov´ y kit AT91SAM9260-EK. Pro kompilaci j´adra a ostatn´ıch aplikac´ı jsem vytvoˇril bin´arn´ı podobu n´astroj˚ u z projektu GNU C Compiler pomoc´ı skriptu crossdev. J´adro mus´ı b´ yt naˇcteno do pamˇeti. O tento u ´kol se star´a bootloader, kter´ y jsem vytvoˇril (viz sekce 3.4.1). Navrhl jsem rozdˇelen´ı pamˇet’ov´e karty na ˇc´ast pro obraz j´adra a na ˇca´st pro souborov´ y syst´em. Bootloader nalezne spr´avn´ y odd´ıl, na kter´em je uloˇzeno j´adro, a zavede jej do pamˇeti. Cel´ y bootloader je uloˇzen v extern´ı pamˇeti FLASH, kterou procesor um´ı obsluhovat s´am. Pomoc´ı programu busybox jsem vytvoˇril z´akladn´ı strukturu souborov´eho syst´emu. Vytvoˇril jsem inicializaˇcn´ı skripty pro start sluˇzeb a nakonfiguroval jsem syst´em tak, aby po zapnut´ı byly pˇr´ısluˇsn´e sluˇzby puˇstˇeny. Cel´ y souborov´ y syst´em je u ´myslnˇe pˇripojen pouze pro ˇcten´ı. Z tohoto d˚ uvodu jsou vˇsechny 80
adres´aˇre, ve kter´ ych je poˇzadov´an z´apis, pˇresmˇerov´any na vytvoˇren´ y ramdisk (viz sekce 3.4.3). Po proveden´ı vˇsech tˇechto krok˚ u byla prvn´ı ˇc´ast hotova a vznikl plnˇe funkˇcn´ı syst´em. D´ale jsem zprovoznil doplˇ nkov´e sluˇzby pro komunikaci s GSM modulem a pro inicializaci komunikace pˇres GPRS. Obsluha senzoru PIR je ˇreˇsena pomoc´ı pˇr´ıdavn´eho modulu, kter´ y lze zav´est za bˇehu syst´emu (viz sekce 5.4). Tento modul jsem vytvoˇril tak, aby se choval jako jednoduch´e znakov´e zaˇr´ızen´ı. D´ale jsem vytvoˇril sluˇzbu, kter´a toto zaˇr´ızen´ı vyˇc´ıt´a a podle naˇcten´e hodnoty se rozhoduje o vyvol´an´ı poplachu. Poplach je indikov´an ˇcervenou LED, kter´a je um´ıstˇena na ˇceln´ım panelu kamery. V´ ysledn´ y syst´em je pouˇziteln´ y a stabiln´ı. Experimentoval jsem s pouˇzit´ım r˚ uzn´ ych konfigurac´ı j´adra, abych dos´ahl nejlepˇs´ıch v´ ysledk˚ u. Je pouˇzita volba beztikov´eho j´adra. V tomto reˇzimu j´adro negeneruje pˇreruˇsen´ı pro pˇrep´ın´an´ı proces˚ u a vyvol´av´an´ı syst´emov´ ych ud´alost´ı pravidelnˇe, ale generuje ho podle aktu´aln´ı potˇreby syst´emu. T´ımto zp˚ usobem lze dos´ahnout energetick´e u ´spory, protoˇze procesor m˚ uˇze b´ yt usp´an na delˇs´ı ˇcasov´e okamˇziky a m˚ uˇze se probouzet m´enˇe ˇcasto. V druh´e ˇca´sti t´eto pr´ace jsem nastudoval moˇznosti detekce pohybu v obraze (viz kapitola 4). U nalezen´ ych technik jsem otestoval jejich v´ ypoˇcetn´ı n´aroˇcnost pomoc´ı implementace algoritm˚ u v Matlabu. Podle n´aroˇcnosti jsem se nakonec rozhodl pro techniku extrakce pozad´ı, kter´a vyuˇz´ıv´a aproximace medi´anu. Zvolenou metodu jsem modifikoval pro u ´ˇcely zabezpeˇcovac´ı kamery a implementoval jsem ji v jazyce C++ pomoc´ı knihovny OpenCV (viz kapitola 5). Tato knihovna umoˇzn ˇuje rychlou pr´aci s obrazov´ ymi daty. Obsahuje optimalizovan´e funkce pro strojov´e uˇcen´ı, poˇc´ıtaˇcov´e vidˇen´ı a zpracov´an´ı obrazu. Vytvoˇril jsem jednoduchou grafickou aplikaci pro operaˇcn´ı syst´em Linux s vyuˇzit´ım knihovny GTK+ (viz kapitola 6). Tato aplikace vyuˇz´ıv´a stejn´e detekˇcn´ı j´adro, kter´e jsem d´ale pouˇzil pro detekci pohybu v obraze pˇr´ımo v kameˇre. Pouˇzit´ı je moˇzn´e d´ıky stejn´emu operaˇcn´ımu syst´emu a abstrakci hardware. V kameˇre jsou vˇsechna zaˇr´ızen´ı reprezentov´ana stejnˇe jako v PC, takˇze jsem mohl prov´adˇet v´ yvoj na osobn´ım poˇc´ıtaˇci. Z´asadn´ı rozd´ıl je pouze u zpracov´an´ı dat v plovouc´ı ˇra´dov´e ˇca´rce. Vzhledem k absenci takov´ ych v´ ypoˇct˚ u ve zvolen´em procesoru byly vˇsechny funkce naps´any tak, aby vyuˇz´ıvaly pouze celoˇc´ıselnou aritmetiku. Metoda detekce zaloˇzen´a na aproximaci medi´anu funguje dobˇre v prostˇred´ı se st´al´ ym osvˇetlen´ım. Pro prostˇred´ı ve kter´ ych doch´az´ı ke svˇeteln´ ym zmˇen´am
81
jsem vytvoˇril algoritmus pro detekci tˇechto zmˇen (viz sekce 5.3.3). Pˇri n´ahl´em osvˇetlen´ı sc´eny je tak model pozad´ı aktualizov´an nˇekolikan´asobnˇe rychleji neˇz pˇri bˇeˇzn´em provozu. Zvolen´a metoda detekce mˇela velk´e probl´emy se zmˇenou jasu, kter´a nebyla rovnomˇern´a v cel´em obraze. Pokud napˇr´ıklad kamera zab´ır´a velk´e prostranstv´ı, na kter´e sv´ıt´ı slunce a pˇres slunce pˇrejde mrak, je vyvol´an poplach. Takov´e chov´an´ı je moˇzn´e minimalizovat t´ım, ˇze kamera bude zab´ırat menˇs´ı prostor a nebo ˇze bude implementov´ana technika detekce st´ın˚ u z barevn´e informace v obr´azku, kterou tento algoritmus nevyuˇz´ıv´a. D´ale jsem vytvoˇril algoritmus pro detekci otˇres˚ u kamery (viz sekce 5.3.2). Pˇri pouˇzit´ı tohoto algoritmu je moˇzn´e stabilizovat obraz a pˇr´ıpadn´ y otˇres nevyvol´a poplach. Tento algoritmus byl velice v´ ypoˇcetnˇe n´aroˇcn´ y i pro mal´e pohyby, takˇze ve v´ ysledn´e aplikaci pro kameru nen´ı pouˇzit. Pˇri pˇredpokladu vˇetˇs´ıch pohyb˚ u kamery je nutn´e prohled´avat vˇetˇs´ı prostor a sloˇzitost algoritmu roste. Implementoval jsem pouze jednoduch´ y syst´em detekce pohybu, kter´ y detekuje posunut´ı v ose x a v ose y. Pokud je kamera otoˇcena, nen´ı toto otoˇcen´ı detekov´ano spr´avnˇe. Pro detekci otoˇcen´ı kamerou by bylo nutn´e implementovat algoritmus, kter´ y vyhled´av´a kl´ıˇcov´e body ve sc´enˇe a nalezne pˇr´ısluˇsnou transformaci dvou n´asleduj´ıc´ıch obr´azk˚ u. Algoritmus detekce velk´ ych zmˇen polohy v obraze nen´ı vhodn´ y pro zabezpeˇcovac´ı kamery. Algoritmus m˚ uˇze velice snadno udˇelat chybu, pokud se mezi dvˇema sn´ımky zmˇen´ı v´ıce jak polovina plochy obrazu. Pokud napˇr´ıklad pˇrejde osoba pˇr´ımo pˇred kamerou, m˚ uˇze b´ yt detekov´ano faleˇsn´e posunut´ı kamery m´ısto pohybu objektu pˇred kamerou. Vˇetˇs´ı pohyb kamery neˇz pouh´ y otˇres je velice komplikovan´e detekovat. V takov´em pˇr´ıpadˇe je obraz z kamery vˇetˇsinou rozmazan´ y pohybem a nelze v nˇem vyhledat ˇza´dn´e korespondence. Na velk´ y pohyb kamery zareaguje pouze detekce zmˇeny jasu cel´eho sn´ımku. Model pozad´ı, vytvoˇren´ y pomoc´ı aproximace medi´anu, je pouˇzit pro vlastn´ı detekci pohybu. Je vytvoˇren rozd´ılov´ y sn´ımek, kter´ y je prahov´an odhadnutou smˇerodatnou odchylkou pro kaˇzd´ y obrazov´ y bod. Ve v´ ysledn´em naprahovan´em sn´ımku jsou nalezeny souvisl´e komponenty. Tyto komponenty jsou d´ale spojeny ve vˇetˇs´ı celky, kter´e jsou k sobˇe dostateˇcnˇe bl´ızko. Mal´e komponenty jsou filtrov´any a odstranˇeny. Podle poˇctu, velikosti a podle tvaru komponent je detekov´an pohyb v obraze (viz sekce 5.3.7).
82
Metodu jsem vyzkouˇsel na sc´en´ach se zmˇenou osvˇetlen´ı, s pohybuj´ıc´ım se pozad´ım, s velk´ ym ˇsumem v obraze a s nekontrastn´ım pozad´ım a popˇred´ım (viz sekce 5.3.8). Popsan´a metoda detekce funguje spr´avnˇe v dobˇre osvˇetlen´ ych vnitˇrn´ıch prostor´ach. D´ale se hod´ı pro nˇekter´e speci´aln´ı vnˇejˇs´ı prostory, pokud je v z´abˇeru jen omezen´ y prostor. Metoda selh´av´a pˇri prudk´ ych nerovnomˇern´ ych zmˇen´ach osvˇetlen´ı sc´eny, kter´e nast´avaj´ı v pˇr´ıpadech, kdy je v z´abˇeru velk´ y prostor (ˇra´dovˇe stovky metr˚ u).
83
Obsah CD DP-Jan-Breuer Adres´aˇr DP-Jan-Breuer obsahuje tuto diplomovou pr´aci ve form´atu PDF.
motion-detection-matlab Adres´aˇr motion-detection-matlab obsahuje zdrojov´e k´ody metod detekce pohybu v Matlabu
motion-detection-opencv Adres´aˇr motion-detection-opencv obsahuje zdrojov´e k´ody v´ ysledn´eho programu pro detekci pohybu
linux-build Adres´aˇr linux-build obsahuje skripty a nastaven´ı potˇrebn´a k sestaven´ı j´adra a aplikac´ı
linux-pkg Adres´aˇr linux-pkg obsahuje pˇripraven´e bin´arn´ı bal´ıˇcky jednotliv´ ych aplikac´ı
linux-kernel Adres´aˇr linux-kernel obsahuje patch pro j´adro a potˇrebn´a nastaven´ı
84
linux-img Adres´aˇr linux-img obsahuje obrazy souborov´eho syst´emu a obraz j´adra
linux-bootloader Adres´aˇr linux-bootloader obsahuje zdrojov´e k´ody bootloaderu
85
Literatura [1] Adda, O., Cottineau, N., a Kadoura, M. A Tool for Global Motion Estimation and Compensation for Video Processing. Tech. rep., 2003. [2] Adelson, E. H., Anderson, C. H., Bergen, J. R., Burt, P. J., a Ogden, J. M. Pyramid methods in image processing. RCA Engineer 29, 6 (1984), 33–41. [3] Anandan, P. A Computational Framework and an Algorithm for the Measurement of Visual. Tech. rep., Amherst, MA, USA, 1987. [4] Bouguet, J. Y. Pyramidal Implementation of the Lucas Kanade Feature Tracker: Description of the algorithm, 2002. [5] Bradski, G., a Kaehler, A. Learning OpenCV. O’Reilly Media, Inc., 2008. ISBN 978-0-596-51613-0. [6] Brouwer, A. Partition types. partitions/partition_types-1.html.
http://www.win.tue.nl/~aeb/
[7] Cevher, V., Sankaranarayanan, A., Duarte, M. F., Reddy, D., Baraniuk, R. G., a Chellappa, R. Compressive Sensing for Background Subtraction. In ECCV ’08: Proceedings of the 10th European Conference on Computer Vision (Berlin, Heidelberg, 2008), Springer-Verlag, pp. 155–168. [8] Chang, F., Chen, C.-J., a Lu, C.-J. A linear-time component-labeling algorithm using contour tracing technique. Comput. Vis. Image Underst. 93, 2 (2004), 206–220. [9] Cheung, S.-c. S., a Kamath, C. Robust techniques for background subtraction in urban traffic video. In Society of Photo-Optical Instrumentation Engineers (SPIE) Conference Series (Jan. 2004), S. Panchanathan and 86
B. Vasudev, Eds., vol. 5308 of Society of Photo-Optical Instrumentation Engineers (SPIE) Conference Series, pp. 881–892. [10] Cirino, G. A., Barcellos, R., Neto, L. G., Mansano, R. D., Bereczki, A., a Morato, S. P. Fresnel lens array with spatial filtering for passive infrared motion sensor applications, 2006. [11] Corbet, J., Rubini, A., a Kroah-Hartman, G. Linux Device Drivers, Third Edition. O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, 2005. ISBN 0-596-00590-3. [12] Devillard, N. Fast median search: an ANSI C implementation. [13] Du-Ming Tsai, a Chien-Ta Lin. Fast normalized cross correlation for defect detection. Pattern Recogn. Lett. 24, 15 (2003), 2625–2631. [14] Elgammal, A. M., Harwood, D., a Davis, L. S. Non-parametric Model for Background Subtraction. In ECCV ’00: Proceedings of the 6th European Conference on Computer Vision-Part II (London, UK, 2000), SpringerVerlag, pp. 751–767. [15] Fresnel Technologies Inc. PIR lens arrays, 2003. fresneltech.com/pdf/XX1.2GI12VX.pdf.
http://www.
[16] Gao, Q., Parslow, A., a Tan, M. Object motion detection based on perceptual edge tracking. Digital and Computational Video, 2001. Proceedings. Second International Workshop on (2001), 78–85. [17] Gilmore, J., Solutions, C., Shebs, S., a Solutions, C. GDB Internals, A guide to the internals of the GNU debugger. 2004. [18] Guerreiro1, R. F., a Aguiar, P. M. Global Motion Estimation: FeatureBased, Featureless, or Both ?! Tech. rep., 2006. [19] Hall, B. Beej’s Guide to Network Programming Using Internet Sockets. 2009. ˇ ´c ˇ, V., a Sedla ´c ˇek, M. Zpracov´ [20] Hlava an´ı sign´ al˚ u a obraz˚ u. CVUT, Praha, 2005. ISBN 978-80-01-03110-0.
87
ˇ ´c ˇ, V., a Sonka, [21] Hlava M. Poˇc´ıtaˇcov´e vidˇen´ı. Grada, Praha, 1992. ISBN 80-85424-67-3. [22] Huimin, W., Xiaoshi, Z., Yanling, Z., a Na, L. A New Thresholding Method Applied to Motion Detection. Computational Intelligence and Industrial Application, 2008. PACIIA ’08. Pacific-Asia Workshop on 1 (Dec. 2008), 119–122. [23] Hyun-Ho Jeon, A. B., a Driessen, P. F. Camera Motion Detection in Video Sequences Using Motion Cooccurrences, 2005. [24] Intel Corporation. Open Source Computer Vision Library Reference Manual. 2001. [25] JABLOCOM s.r.o. GSM Camera EYE-02, 2009. http://www.jablocom. com/products-eye-02.php. [26] KaewTraKulPong, P., a Bowden, R. An Improved Adaptive Background Mixture Model for Realtime Tracking with Shadow Detection. In In Proc. 2nd European Workshop on Advanced Video Based Surveillance Systems, AVBS01, VIDEO BASED SURVEILLANCE SYSTEMS: Computer Vision and Distributed Processing (September 2001), Kluwer Academic Publishers. [27] Kiewitz, M. AiR-BOOT, 2004. http://en.ecomstation.ru/personal/ kiewitzsoft/air-boot.php. [28] King, R. Linux ARM kernel - Machine Registry, 2009. http://www.arm. linux.org.uk/developer/machines/. [29] Kirillov, A. Motion Detection Algorithms. http://www.codeproject. com/KB/audio-video/Motion_Detection.aspx. [30] Ko, T., Soatto, S., a Estrin, D. Background Subtraction on Distributions. In ECCV ’08: Proceedings of the 10th European Conference on Computer Vision (Berlin, Heidelberg, 2008), Springer-Verlag, pp. 276–289. [31] Lara, A., a Hirata, R. Motion Segmentation using Mathematical Morphology. Computer Graphics and Image Processing, 2006. SIBGRAPI ’06. 19th Brazilian Symposium on (Oct. 2006), 315–322. 88
[32] Lavrsen, K. Motion, a software motion detector. http://www.lavrsen. dk/foswiki/bin/view/Motion/SupportRequests. [33] Li, L., Huang, W., Gu, I. Y. H., a Tian, Q. Foreground object detection from videos containing complex background. In MULTIMEDIA ’03: Proceedings of the eleventh ACM international conference on Multimedia (New York, NY, USA, 2003), ACM, pp. 2–10. [34] Mcivor, A. M. Background Subtraction Techniques. In Proc. of Image and Vision Computing, Auckland, New Zealand, 2000. (2000). http: //citeseer.ist.psu.edu/old/455262.html. [35] Monari, E., a Pasqual, C. Fusion of background estimation approaches for motion detection in non-static backgrounds. Advanced Video and Signal Based Surveillance, 2007. AVSS 2007. IEEE Conference on (Sept. 2007), 347–352. [36] Noack, E. Visual Motion Detection. http://motiontrack.sourceforge. net/. [37] Noriega, P., a Bernier, O. Real Time Illumination Invariant Background Subtraction Using Local Kernel Histograms. Tech. rep., 2006. [38] Quen-Zong Wu, Hsu-Yung Cheng, a Kuo-Chin Fan. Motion detection based on two-piece linear approximation for cumulative histograms of ratio images in intelligent transportation systems. Networking, Sensing and Control, 2004 IEEE International Conference on 1 (March 2004), 309–314 Vol.1. [39] Schimek, M. H., Dirks, B., Verkuil, H., a Rubli, M. Video for Linux Two API Specification. http://www.linuxtv.org/downloads/ video4linux/API/V4L2_API/v4l2spec/v4l2.pdf. [40] Shimada, A., Arita, D., a Taniguchi, R.-i. Dynamic Control of Adaptive Mixture-of-Gaussians Background Model. In AVSS ’06: Proceedings of the IEEE International Conference on Video and Signal Based Surveillance (Washington, DC, USA, 2006), IEEE Computer Society, p. 5.
89
[41] Stallman, R., Pesch, R., a Shebs, S. Debugging with gdb. Free Software Foundation, 2004. ISBN 1-882114-77-9. [42] Su, S.-T., a Chen, Y.-Y. Moving Object Segmentation Using Improved Running Gaussian Average Background Model. Computing: Techniques and Applications, 2008. DICTA ’08.Digital Image (Dec. 2008), 24–31. [43] Takala, V., a Pietikainen, M. Multi-Object Tracking Using Color, Texture and Motion. Computer Vision and Pattern Recognition, 2007. CVPR ’07. IEEE Conference on (June 2007), 1–7. [44] Toyama, K., Krumm, J., Brumitt, B., a Meyers, B. Wallflower: principles and practice of background maintenance. Computer Vision, 1999. The Proceedings of the Seventh IEEE International Conference on 1 (1999), 255–261 vol.1. [45] Yoon, K. Background Subtraction Enhancement using Segmentation. Software Engineering, Artificial Intelligence, Networking, and Parallel/Distributed Computing, 2008. SNPD ’08. Ninth ACIS International Conference on (Aug. 2008), 535–540.
90