54
Jernej Rezec ZAZNAVANJE NENAVADNIH DOGODKOV S POMOČJO KAMERE IN USMERJEVALNIKA Diplomsko delo Maribor, maj 2013

Zaznavanje nenavadnih dogodkov s pomočjo kamere in ... · somentorju doc. dr. Borisu Cigaletu. Še ... 2.3 Programski sistem Surveillance.NET ... Postavljamo si vprašanja, ali ni

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Jernej Rezec

ZAZNAVANJE NENAVADNIH DOGODKOV S POMOČJO KAMERE IN USMERJEVALNIKA

Diplomsko delo

Maribor, maj 2013

ZAZNAVANJE NENAVADNIH DOGODKOV S POMOČJO

KAMERE IN USMERJEVALNIKA

Diplomsko delo

Študent: Jernej Rezec

Študijski program: VS ŠP Računalništvo in informacijske tehnologije

Mentor: izr. prof. dr. Potočnik Božidar, univ. dipl. inž. rač. in inf.

Somentor: doc. dr. Cigale Boris, univ. dipl. inž. rač. in inf.

Lektorica: Helenca Korez

i

ii

ZAHVALA

Za mentorstvo in strokovno pomoč pri

izdelavi diplomske naloge bi se rad zahvalil

mentorju izr. prof. dr. Božidarju Potočniku in

somentorju doc. dr. Borisu Cigaletu. Še

posebej se zahvaljujem svoji družini in

sorodnikom za vso podporo v času študija.

iii

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

Ključne besede: usmerjevalnik, kamera, OpenWrt, programski jezik C, računalniki vid,

zaznavanje gibanja, obdelava digitalnih slik

UDK: 004.43:004.92(043.2)

Povzetek V diplomskem delu smo se ukvarjali z razvojem preprostega programskega sistema za

zaznavo gibanja na osnovi računalniškega vida, ki se izvaja na usmerjevalniku. Sistem

sestoji iz usmerjevalnika, na katerem je naložen operacijski sistem OpenWrt, spletne

kamere in treh različnih računalniških algoritmov. Za zaznavanje gibanja smo

implementirali naslednje tri algoritme, in sicer algoritem slika razlik, algoritem modeliranje

ozadja in algoritem akumulirana slika razlik. Razvite algoritme smo pod istimi pogoji (tj. ob

istem številu zajetih slik in isti sceni) preizkusili tako na osebnem računalniku, kakor tudi

na usmerjevalniku. Rezultati so pokazali, da se zaradi svoje preprostosti najhitreje izvede

algoritem slika razlik. Ugotovili pa smo tudi, da zaznavanje gibanja s tem algoritmom ni

tako zanesljivo kot pri ostalih dveh algoritmih, ki sicer obdelata manjše število slik na

sekundo. S pomočjo algoritma slika razlik lahko v povprečju obdelamo 34 slik na sekundo,

z najpočasnejšim algoritmom, tj. algoritem modeliranje ozadja, pa obdelamo 9 slik na

sekundo, pri čemer smo uporabili usmerjevalnik ASUS WL-500G V1.

iv

Detection of extraordinary events using webcam connected to a router

Key words: router, webcam, OpenWRT, programming language C, computer vision,

motion detection, digital image processing

UDK: 004.43:004.92(043.2)

Abstract

In this diploma thesis we were focused on a development of a simple program system.

This system, running on a router, is designed to detect motion based on the computer

vision. It consists of a router supported by OpenWrt operating system, webcam and of

three different motion detection algorithms, which are: frame difference algorithm,

background modeling algorithm and accumulative frame difference algorithm. We tested

these algorithms under the same conditions (i.e., the same scene and frames captured)

on a personal computer and also on router. We found out, that the simplest frame

distance algorithm was the fastest, but not as reliable at motion detection as the other two

algorithms, that process less frames per second. Frame difference algorithm has the

average of processing 34 frames per second, while the slowest background modeling

algorithm has the average of 9 frames per second. All algorithms were tested and

compared running on ASUS WL-500G V1 router.

v

KAZALO

KAZALO ................................................................................................................................................ v

KAZALO SLIK ....................................................................................................................................... vi

KAZALO TABEL .................................................................................................................................... vi

UPORABLJENE KRATICE ..................................................................................................................... vii

1 UVOD .......................................................................................................................................... 1

2 PREGLED OBSTOJEČIH REŠITEV .................................................................................................. 3

2.1 Programski sistem Motion ....................................................................................................... 3

2.2 Programski sistem ZoneMinder ................................................................................................ 4

2.3 Programski sistem Surveillance.NET ........................................................................................ 5

3 STROJNA OPREMA ...................................................................................................................... 7

3.1 Spletna kamera ........................................................................................................................ 7

3.2 Usmerjevalnik ........................................................................................................................... 8

4 PROGRAMSKA OPREMA ............................................................................................................. 9

4.1 Operacijski sistem OpenWRT ................................................................................................... 9

4.2 Namestitev namenske programske opreme .......................................................................... 10

4.3 Prevajanje izvorne kode v pakete za usmerjevalnik .............................................................. 12

4.4 Program in Makefile ............................................................................................................... 14

4.4.1 Prevajalnik GCC ............................................................................................................... 17

4.5 Gonilniki kamere .................................................................................................................... 19

4.6 Programska koda za zajem slike ............................................................................................. 19

4.7 Protokol SSH ........................................................................................................................... 19

5 ALGORITEM ZA ZAZNAVANJE NENAVADNIH DOGODKOV ....................................................... 21

5.1 Slika razlik ............................................................................................................................... 21

5.2 Modeliranje ozadja ................................................................................................................. 22

5.3 Akumulirana slika razlik .......................................................................................................... 24

6 REZULTATI ................................................................................................................................ 29

6.1 Primerjava s programskim sistemom Motion ........................................................................ 35

7 SKLEP ............................................................................................................................................. 37

8 VIRI ................................................................................................................................................ 40

vi

KAZALO SLIK

Slika 2.1: Nadzorna plošča naprednih kamer v programske sistemu ZoneMinder. ............ 5

Slika 4.1: Grafični vmesnik operacijskega sistema OpenWrt. ............................................ 9

Slika 4.2: Ukazna vrstica operacijskega sistema OpenWrt. ..............................................11

Slika 4.3: Menuconfig okolje za konfiguracijo razvojnega okolja SDK. ............................13

Slika 4.4: Instalacija in zagon programa na usmerjevalniku. ............................................17

Slika 6.1: Scena, ki se je uporabljala za preizkus algoritmov. ...........................................29

Slika 6.2: Grafični prikaz časovne zahtevnosti za posamezne korake optimizacije

algoritma modeliranja ozadja. ..........................................................................................35

Slika 6.3: Grafični prikaz časovne zahtevnosti za končno različico algoritma modeliranja

ozadja in preostalih dveh testiranih algoritmov. ................................................................35

KAZALO TABEL

Tabela 3.1: Specifikacije kamere Logitech WebCam C300. .............................................. 8

Tabela 3.2: Specifikacije usmerjevalnika ASUS WL-500G V1. .......................................... 8

Tabela 6.1: Podatki o izvajanju algoritma razlika dveh slik. ..............................................29

Tabela 6.2: Podatki o izvajanju neoptimiziranega algoritma modeliranje ozadja. .............30

Tabela 6.3: Podatki o izvajanju algoritma modeliranje ozadja s kazalci in funkcijo POW. .30

Tabela 6.4: Podatki o izvajanju popolnoma optimiziranega algoritma modeliranje ozadja.

........................................................................................................................................31

Tabela 6.5: Podatki o izvajanju algoritma akumulacija slike razlik. ...................................34

vii

UPORABLJENE KRATICE

- CCD – Naprave s sklopljenim nabojem (angl. Charge-coupled device)

- CMD – Ukazna vrstica (angl. Comand Prompt)

- CMOS – Komplementarni metal-oksidni polprevodnik (angl. Complementary metal-

- DV – Digitalni video (angl. Digital video)

- FPS – Slik na sekundo (angl. Frames per second)

- GCC – GNU Compiler Collection

- GSPCA - Generic Software Package for Camera Adapters

- IP – Internetni protokol (angl. Internet Protocol)

- MHz – Megaherc (angl. Mega Hertz)

- MP – Megapiksel (angl. Megapixel)

- MS – Microsoft

- NFA – Število akumuliranih slik (angl. Number of frames to accumulate)

- OS – Operacijski sistem

- RAM – Bralno-pisalni pomnilnik (angl. Random-access memory)

- SDK – Razvojni komplet (angl. Software development kit)

- SFTP – SSH File Transfer Protocol

- SMS – Kratka sporočila (angl. Short Message Service)

- SSH - Varna lupina (angl. Secure shell)

- SVN – Verzioniranje (angl. Subversion)

- TFTP - Trivial File Transfer Protocol

- USB – Univerzalno serijsko vodilo (angl. Universal Serial Bus)

- UVC – Video razred USB (angl. USB video class)

- V4L – Video for Linux

- VGA – Video grafično polje (angl. Video Graphics Array)

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

1

1 UVOD

Skoraj vsak se je v življenju srečal z občutkom negotovosti, ko se je spraševal, kaj se ob

njegovi odsotnosti, pa naj bodo to službene obveznosti, dopust ali samo skok v trgovino,

dogaja v njegovem domu. Postavljamo si vprašanja, ali ni morda kak nepridiprav izkoristil

priložnosti in si malce pogledal naše stanovanje in ali ni česa odtujil. Da bi omilili ta

občutek, si stanovanje opremimo z raznoraznimi dragimi varnostnimi napravami, kot so

alarmne naprave na vhodih in oknih, senzorji gibanja in raznorazni video nadzorni sistemi.

Vendar skoraj nihče ne pomisli na dejstvo, da ima doma računalnik s spletno kamero, ki

lahko ob uporabi primerne programske opreme ravno tako (ali še boljše) služi kot vsa

komercialna varnostna oprema. Prav tako imamo na spletu vse polno programov, katere

lahko uporabimo v ta namen. Nekateri izmed njih so tudi plačljivi, a že brezplačni ponujajo

več kot zadovoljiv nadzorni sistem za povprečnega uporabnika. Programi so kompatibilni

z vsemi vrstami operacijskih sistemov; tako Linux, MS (Microsoft) Windows idr. Med

programi se najdejo tudi taki, ki jih je možno namestiti na usmerjevalnik, o čemer bo

govora tudi v nadaljevanju diplomskega dela.

Namen pričujočega diplomskega dela je izdelati enostaven, neodvisen video nadzorni

sistem, ki bo tekel na usmerjevalniku in bo sposoben zaznavati nenavadne dogodke. Za

realizacijo tega cilja je potrebno preučiti možnosti zagona lastnih programov na

usmerjevalniku. Najprej je bilo potrebno pregledati usmerjevalnike, ki so trenutno na trgu,

in izmed množice usmerjevalnikov poiskati take, ki omogočajo priklop naprav USB (angl.

Universal Serial Bus) in zagon lastnih programov. Kaj kmalu je postalo jasno, da noben

izmed komercialnih produktov v osnovi ne podpira zagona lastnih programov, ampak je za

to potrebno izbrati tak usmerjevalnik, ki nam bo omogočal nadgradnjo oziroma menjavo

operacijskega sistema in s tem zagon lastnih programov. Ko imamo vso potrebno

opremo, tj. usmerjevalnik in kamero, in posodobljen operacijski sistem, ki nam omogoča

zagon lastnih aplikacij, je potrebno izbrati primeren algoritem za zaznavo nenavadnih

dogodkov. Mi smo se odločili, da bomo implementirali in preizkusili tri različne algoritme,

in sicer algoritem razlike dveh slik, algoritem modeliranja ozadja in algoritem akumulirana

slika razlik.

Na koncu podajmo še strukturo diplomskega dela. V naslednjem poglavju si bomo

pogledali že obstoječe aplikacije za reševanje našega problema. Nadaljevali bomo s

poglavjem, v katerem bomo predstavili strojno opremo uporabljeno v tem delu, sledilo pa

mu bo poglavje z opisom uporabljene programske opreme. Tu si bomo pogledali

predstavitev in namestitev operacijskega sistema na naš usmerjevalnik, namestitev

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

2

potrebnih gonilnikov in pripravo ter izdelavo programa in kasneje še paketa za zagon na

usmerjevalniku. V petem poglavju so predstavljeni algoritmi, ki smo jih izdelali in

preizkusili v diplomskem delu. V zaključnih poglavjih pa lahko preberete še, kako in zakaj

smo algoritem modeliranja ozadja spremenili ter smernice za nadaljnji razvoj aplikacije.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

3

2 PREGLED OBSTOJEČIH REŠITEV

Ob hitrem pregledu ponudb na spletu lahko opazimo veliko število ponudnikov, ki nam ob

plačilu mesečne naročnine ponujajo različne variacije video nadzornih sistemov, katerih

sliko lahko spremljamo preko spleta. Med ponudniki teh storitev prepoznamo tako

varnostna podjetja (npr. Sintal in Varnost), kot tudi ponudnike internetnih storitev (npr.

SiOL in Amis). Obenem na spletu najdemo veliko količino plačljivih in brezplačnih

programov za videonadzor, ki ob pomoči računalnika in enostavne spletne kamere (na

primer priključene na vodilo USB) ali pa s pomočjo TV oziroma video kartice in priklopa

več kamer ponujajo čisto zadovoljiv nadzorni sistem za domačo uporabo. Večina teh

programov omogoča poleg zajema slike tudi oddaljen nadzor slike preko spleta. Prav tako

ima večina vgrajen senzor gibanja, ki posname video ali zajame posnetek samo v

primeru, ko je zaznano gibanje in s tem prihrani na prostoru za shranjevanje. Ti posnetki

se lahko hranijo lokalno ali pa globalno na strežniku. Prednost sistemov z vgrajeno

detekcijo gibanja je poleg izkoriščenosti prostora za shranjevanje tudi v tem, da

omogočajo neposredno obveščanje uporabnika nadzornega sistema v primeru

zaznavanja gibanja, kar lahko storijo preko sporočila SMS (angl. Short Message Service)

ali preko elektronske pošte. Nekateri programi dodatno omogočajo povezavo z alarmnim

sistemom in njegovo proženje v primeru zaznane neželene spremembe. Ti vsebujejo

časovno stikalo, ki določi od kaj do kdaj naj kamera snema in shranjuje posnetke.

2.1 Programski sistem Motion

Med brskanjem po spletu in pregledovanjem že obstoječih paketov oziroma programov, ki

jih je možno poganjati na usmerjevalniku, smo naleteli na paket Motion [8]. Gre za

program napisan v programskem jeziku C, ki je v osnovi namenjen vsem napravam z

nameščenim operacijskim sistemom Linux. Vendar pa zaradi svoje nezahtevnosti in

majhne porabe pomnilnika in procesorske moči deluje tudi na napravah z nameščenim

operacijskim sistemom OpenWrt. Komunikacija med uporabnikom in programom poteka v

celoti preko ukazne vrstice oziroma konfiguracijskih datotek. Preko spletnega brskalnika je

omogočen le vpogled v video. Program Motion omogoča zajem slike iz ene ali več kamer,

obenem pa zaznava večje spremembe na sliki (zaznavanje gibanja).

Lastnosti programa Motion:

- hkratno zajemanje in spremljanje več video kanalov,

- zajemanje slike v naprej nastavljenih intervalih,

- zajemanje slike v naključnih intervalih,

- zajemanje slike ob zaznanem gibanju,

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

4

- možnost pošiljanja sporočil SMS in e-pošte ob zaznanem gibanju,

- sledenje gibanju s primerno strojno opremo,

- možnost uporabe na manj zmogljivih sistemih in

- možnost samostojne razširitve programa.

2.2 Programski sistem ZoneMinder

Drug tak program je program ZoneMinder [11], ki je podprt v vseh Linux distribucijah. Žal

pa med pregledom spleta nismo zasledili delujočega primera v teh distribucijah za

vgrajene sisteme. Program je napisan v programskih jezikih C++, Pearl in PHP.

Uporabniku omogoča priključitev več kamer in za razliko od programa Motion, lahko do

njega dostopamo preko brskalnika, kjer je na voljo grafični vmesnik. Prav tako omogoča

popoln nadzor kamer (slika 2.1), ki imajo dodatne funkcije (npr. obračanje kamer po

različnih oseh, ostrenje, približevanje). Tako kot večina tovrstnih programov nam ob

zaznanem gibanju na našo zahtevo (predhodna konfiguracija) posreduje fotografijo

oziroma sporočilo po elektronski pošti ali sporočilu SMS. Poleg vseh zgoraj naštetih

lastnosti nudi tudi podporo standardu X10. Standard X10 je standard oziroma protokol, ki

skrbi za komunikacijo različnih naprav med sabo. Z njim lahko povežemo stikala za luči,

ali pa različne alarmne naprave.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

5

Slika 2.1: Nadzorna plošča naprednih kamer v programske sistemu ZoneMinder.

Lastnosti programa ZoneMinder:

- podpira IP in spletne kamere,

- podpira vrtljive kamere,

- spletni grafični vmesnik za popoln nadzor nad sistemom in kamerami ter za ogled

slike v živo,

- obveščanje preko SMS sporočil in elektronske pošte,

- shranjevanje slike in videa,

- zaznavanje gibanja ter

- določitev več uporabnikov in dodeljevanje različnih uporabniških pravic.

2.3 Programski sistem Surveillance.NET

Če sta zgoraj opisana programa zasnovana za okolje Linux, je program Surveillance.NET

[13] namenjen Windows okolju, natančneje za okolje XP ali novejše. Napisan je v

programskem jeziku C#. Prav tako kot njegova predhodnika omogoča zajem slike z več

integriranih ali na vodilo USB priklopljenih kamer. Njegova posebnost je, da lahko

nastavitve spreminjamo z oddaljenega računalnika oziroma naprave; z ukazi preko

elektronske pošte (trenutno je podprt samo program Gmail) in se tako izognemo posegom

v nastavitve usmerjevalnika oziroma požarnega zidu.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

6

Lastnosti programa Surveillance.NET:

- obveščanje po elektronski pošti ob zaznanem gibanju,

- zajem in shranjevanje trenutne slike ali videa (glede na zaznano gibanje ali

časovni interval) in

- alarm ob zaznanem gibanju.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

7

3 STROJNA OPREMA

V tem poglavju bomo spoznali dve ključni komponenti našega sistema računalniškega

vida, in sicer spletno kamero in usmerjevalnik. Obe komponenti sta skozi naslednja

poglavja sestavljeni kot zaključena celota, ki predstavlja video nadzorni sistem.

3.1 Spletna kamera

Zaradi nizkih stroškov izdelave in visoke prodaje gre za zelo dostopen produkt, ki je svojo

uporabnost našel predvsem pri uporabnikih, kateri za namen komunikacije s svojci,

prijatelji ali znanci uporabljajo programe za neposredno sporočanje (npr. Skype, MSN

Messenger, GTalk idr.) [18]. Kamere so zelo uporabne tudi za potrebe domačega video

nadzora in na splošno v računalništvu, kjer je potreben računalniški vid.

Začetki spletnih kamer segajo v leto 1991, na Univerzo v Cambridgeu, kjer je bila prva

spletna kamera priklopljena na lokalno omrežje. Prva komercialna spletna kamera

proizvajalca Connectix model QuickCam je na tržišče prišla leta 1994 in je bila sprva

namenjena samo uporabnikom Applovega Macintosha, leto kasneje pa še uporabnikom

MS Windows [24].

Glavni gradniki spletne kamere so:

- leča – v večini primerov gre za plastično,

- tipalo oziroma senzor CMOS (angl. complementary metal-oxide-semiconductor) ali

CCD (angl. charge-coupled device), ki odbito svetlobo predmeta spremeni v

računalniku razumljivo digitalno obliko,

- elektronika, ki skrbi da sliko s tipala preko vodila USB vidimo na računalniškem

zaslonu in

- mikrofon, ki je v zadnjem času prisoten v večini kamer.

Običajna ločljivost starejših kamer je 640 x 480 pikslov, tj. pri standardu VGA (angl. video

graphics array), sodobnejše kamere pa imajo ločljivost 1 MP (megapiksel) ali več, hitrost

zajemanja slike pa je običajno 30 FPS (angl. frames per second).

Na področju gonilnikov pri novejših kamerah ni bistvenih razlik, saj vse sodobne kamere

podpirajo gonilnike UVC (angl. USB video class) [16], ki so podprti tudi v okolju Linux.

UVC gonilniki podpirajo vhodne in izhodne naprave za zajem dinamične in statične slike

priključene na USB pri MS Windows, Apple Mac OS in Linux operacijskih sistemih. Pri

UVC razredu so za zajem slike podprti barvni modeli YUV (nekompresiran format), DV

(angl. digital video), MPEG-4, MPEG-2 ter MJPEG [17]. V tem diplomskem delu smo

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

8

uporabili kamero Logitech WebCam C300, z ločljivostjo optičnega tipala 1,3 MP in

podporo gonilnikov UVC (tabela 3.1).

Tabela 3.1: Specifikacije kamere Logitech WebCam C300.

Ločljivost 1,3MP

Max ločljivost (programsko) 5 MP

Število slik na sekundo 30 FPS

Ostrenje Ročno

Priključek USB 2.0

Gonilniki UVC

3.2 Usmerjevalnik

Usmerjevalnik je naprava, ki povezuje dve ali več omrežij (običajno lokalno omrežje in

internet), skrbi pa tudi za prenos paketov (podatkov). Usmerjevalnik za pravilno

naslavljanje paketov uporablja IP (internetni protokol) naslove, ki nam omogočajo uporabo

vzporednih poti in s tem pospešitev prenosa v primeru preobremenjenosti omrežja [25].

V okviru diplomskega dela smo morali izbrati usmerjevalnik, ki podpira namestitev

operacijskega sistema OpenWrt in omogoča priključitev naprav USB. Za primernega se je

izkazal Asusov model WL-500g (tabela 3.2) [2], ki ima že v osnovi dva vhoda USB

(nekateri usmerjevalniki USB sicer podpirajo, vendar pa je vhode potrebno fizično dodati)

in je tudi sicer zelo priljubljen model za nadgradnje, saj ponuja veliko pomnilnika RAM in

trajnega pomnilnika "flash", ima pa tudi hiter procesor.

Tabela 3.2: Specifikacije usmerjevalnika ASUS WL-500G V1.

Procesor Broadcom BCM4704 264 MHz

Pomnilnik RAM 32 MB

Pomnilnik Flash 8 MB

USB 2 x 2.0

Mreža 4 x ethernet + WiFi

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

9

4 PROGRAMSKA OPREMA

Programsko opremo, s katero smo eksperimentirali v okviru našega diplomskega dela,

smo razdelili v tri sklope. V prvem sklopu je programska oprema, ki nam omogoča

nameščanje in zaganjanje lastnih programov na usmerjevalniku. Dejansko gre za neke

vrste operacijski sistem za vgrajene naprave. V drugem sklopu je programska oprema, ki

je nameščena na računalniku in omogoča prevajanje izvorne kode in s tem ustvarjanje

paketov, ki se bodo izvajali na usmerjevalniku. Tretji sklop pa vsebuje gonilnike za

podporo spletne kamere na usmerjevalniku.

4.1 Operacijski sistem OpenWRT

Na spletu smo lahko našli več različnih nadgradenj za usmerjevalnike. Od takih, ki nudijo

samo osnovne funkcije, do takih, ki poleg osnovnih nudijo še dodatne funkcije in

omogočajo izdelavo lastnih paketov (programov). Med bolj poznanimi so: Tomato, DD-

Wrt, DebWrt in OpenWrt.

Slika 4.1: Grafični vmesnik operacijskega sistema OpenWrt.

OpenWRT [1] je odprtokodni operacijski sistem, ki temelji na Linuxu in je namenjen

usmerjevalnikom in drugim vgrajenim napravam (npr. žepnim računalnikom, pametnim

telefonom), saj je optimiziran za naprave z majhno procesorsko močjo in omejenim

pomnilnikom. OpenWrt projekt se je pojavil z objavo javno dostopne kode, katero je

Linksys objavil s prihodom še vedno zelo priljubljenega usmerjevalnika WRT54G. Najprej

je bil podprt le slednji, s časom pa je podporo dobivalo vse več usmerjevalnikov različnih

proizvajalcev. Enako kot pri namiznih različicah Linuxa, tudi pri različici za vgrajene

naprave poznamo več distribucij. Zadnji izmed teh, ki sta tudi najbolj razširjeni, sta

Kamikaze in Backfire. Za naš usmerjevalnik smo izbrali najnovejšo zanj podprto različico

Backfire 10.03, brcm47xx, z jedrom 2.6, s podporo brezžični komunikaciji [2]. Hkrati pa

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

10

omogoča hitro delovanje. Z namestitvijo operacijskega sistema OpenWrt smo dobili preko

2000 različnih paketov, ki jih lahko po potrebi spreminjamo in prilagajamo. Sistem

OpenWrt nam omogoča tudi izdelavo in zagon lastnih paketov, podporo različnih naprav

USB (npr. diski, kamere, 3G modem in tiskalniki). Z njim lahko upravljamo preko ukazne

vrstice ali grafičnega vmesnika LuCI (slika 4.1).

4.2 Namestitev namenske programske opreme

Za nameščanje in zagon lastnih paketov (programov) na usmerjevalniku je bilo potrebno

zamenjati obstoječ operacijski sistem z eno od prej omenjenih različic operacijskega

sistema OpenWrt, ki omogoča namestitev in zagon lastnih paketov. Za naš usmerjevalnik

Asus smo torej izbrali različico Backfire 10.03, brcm47xx. Vsak usmerjevalnik z določeno

verzijo nadgradnje ima različen postopek za namestitev. V nadaljevanju predstavljamo

postopek namestitve na naš usmerjevalnik [2] z uporabo protokola TFTP (angl. Trivial File

Transfer Protocol) in operacijskim sistemom MS Windows 7, kjer je bilo predhodno

potrebno vključiti še funkcijo telneta in TFTP-ja na nadzorni plošči.

Pred postopkom namestitve je potrebno na računalnik prenesti sliko primerne različice

operacijskega sistema OpenWrt in usmerjevalnik preklopiti v diagnostični način. To

storimo na naslednji način [2]:

1. najprej preverimo, ali imamo na računalniku nastavljen statičen IP naslov med

192.168.1.0 in 192.168.1.24 (z izjemo naslova 192.168.1.1, saj je tega uporabljal

usmerjevalnik, če tega nismo kako drugače določili),

2. nato odklopimo usmerjevalnik iz napajanja,

3. sledi priklop računalnik na usmerjevalnik s kablom (LAN1),

4. na zadnji strani usmerjevalnika pritisnemo gumb RESTORE in ga držimo nekaj

sekund,

5. še vedno držimo gumb RESTORE in istočasno priključimo napajanje.

Ko vse to storimo pravilno in lučka za napajanje utripa počasi, smo prešli v diagnostičen

način. S tem smo pripravljeni, da na usmerjevalnik s pomočjo protokola TFTP pošljemo

sliko, ki smo jo predhodno prenesli s spleta. Zaženemo ukazno vrstico CMD (angl.

Command Prompt) in se postavimo v imenik, kjer imamo sliko operacijskega sistema

OpenWrt. Nato izvedemo naslednji ukaz:

tftp -1 192.168.1.1 PUT openwrt-brcm47xx-squashfs.trx.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

11

Počakamo približno šest minut. V tem času se slika iz pomnilnika RAM naloži v "flash"

pomnilnik in usmerjevalnik se samodejno ponovno zažene. V kolikor ne pride do

samodejnega ponovnega zagona, to naredimo ročno (odklop in priklop napajanja), vendar

ne prej kot v šestih minutah po končanem prenosu. Potem lahko na nadzorni plošči

preklopimo iz statičnega načina dodeljevanja naslovov IP nazaj v dinamični način. Nato

povežemo še preostale naprave. Brezžično omrežje Wi-Fi na omenjenem usmerjevalniku

s tem operacijskim sistemom deluje, a ga je potrebno vklopiti v nastavitvah

usmerjevalnika. Preden priklopimo vse ostale naprave je priporočljivo, da s pomočjo

ukaza:

telnet 192.168.1.1

in nato še z ukazom:

passwd

določimo geslo za usmerjevalnik in ga ponovno zaženemo z ukazom:

reboot.

Po tem postopku je usmerjevalnik pripravljen za uporabo. Dostop do usmerjevalnika ni

več možen s pomočjo telnet protokola, ampak moramo uporabiti protokol SSH (angl.

Secure shell), za kar se priporoča uporaba programa PuTTY (slika 4.2).

Slika 4.2: Ukazna vrstica operacijskega sistema OpenWrt.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

12

4.3 Prevajanje izvorne kode v pakete za usmerjevalnik

Ko na usmerjevalnik naložimo operacijski sistem, je potrebno na namizni različici Linuxa

(uporabili smo 32-bitno različico Ubuntu 10.10) pripraviti vse potrebno za izdelavo

paketov, primernih za zagon na usmerjevalniku. Postopek prevajanja izvorne kode smo si

ogledali na klasičnem primeru HelloWorld programa [6]. Preden začnemo z izdelavo

programa in vseh potrebnih datotek (npr. Makefile), moramo na računalnik namestiti še

ustrezno razvojno okolje SDK (angl. Software development kit) za izbrano distribucijo

operacijskega sistema OpenWrt. Na uradni strani produkta OpenWrt najdemo že v naprej

pripravljena okolja SDK za različne distribucije. Žal pa nam jih, z izjemo enega, ni uspelo

prevesti v izvedljiv paket, oziroma so se pri programu HelloWorld pojavljale napake med

prevajanjem. To je bil razlog, da smo izbrali daljšo pot (tj. generiranje, ki sploh na

starejšem računalniku vzame precej časa) in okolje SDK zgenerirali z vnaprej

pripravljenim generatorjem. Najprej smo morali namestiti program SVN (tj. program za

verzioniranje, ki omogoča sledenje spremembam v datotekah in omogoča vpogled v

zgodovino le-teh). To storimo z ukazom:

sudo apt-get install subversion get-essential.

Ko je namestitev zaključena v domačem imeniku, nadaljujemo z ukazom:

mkdir ~/openwrt,

s čimer ustvarimo imenik openwrt. Nato se vanj premaknemo in z ukazom:

svn co svn://svn.openwrt.org/openwrt/branches/backfire

prenesemo izvorno kodo OpenWrt. Po končanem prenosu poženemo ukaz:

svn update

in vse ostale vire paketov z:

./scripts/feeds update –a

ter jih namestimo z ukazom:

./scripts/feeds install –a .

Po teh korakih z ukazom:

make menuconfig

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

13

poženemo konfigurator (slika 4.3), s katerim določimo vrsto usmerjevalnika (Target

Profile) in njegovo programsko opremo (Target System), ter katere pakete želimo vključiti.

V našem primeru smo označili opcijo Build the OpenWrt SDK (NEW), kar pove da želimo

zgenerirati okolje SDK.

Slika 4.3: Menuconfig okolje za konfiguracijo razvojnega okolja SDK.

Po končani konfiguraciji shranimo spremembe v .config in poženemo ukaz make. V

kolikor nismo storili napak, dobimo po kar precejšnjem času (odvisno od zmogljivosti

računalnika) v imeniku …/openwrt/backfire/bin/brcm47xx datoteko OpenWrt-SDK-

brcm47xx-for-Linux-i686-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2, ki je v bistvu naše okolje

SDK, s katerim v naslednjih korakih prevajamo izvorno kodo in ustvarjamo pakete, ki jih je

moč izvajati na usmerjevalniku. Datoteko OpenWrt-SDK-brcm47xx-for-Linux-i686-gcc-

4.3.3+cs_uClibc-0.9.30.1.tar.bz2 razširimo kar v obstoječem imeniku. To lahko storimo na

dva načina, in sicer bodisi preko grafičnega vmesnika ali pa preko terminala z ukazom

tar xfj ime_datoteke ,

pri čemer se seveda moramo nahajati v imeniku s to datoteko. Po končanem razširjanju

se v terminalnem oknu prestavimo v imenik, ki se je ustvaril. S tem smo pripravljeni, da

prevedemo izvorno kodo in ustvarimo paket, ki ga bomo izvajali na usmerjevalniku [6].

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

14

4.4 Program in Makefile

Nato smo napisali preprost program Helloworld v programskem jeziku C (koda 4.1), zatem

pa še Makefile za ta program (koda 4.2) in Makefile s pravili za ustvarjanje paketa za

usmerjevalnik (koda 4.3). V imeniku …/OpenWrt-SDK-brcm47xx-for-Linux-i686-gcc-

4.3.3+cs_uClibc-0.9.30.1/packages ustvarimo imenik helloworld, v njem pa imenik src, v

katerega nato shranimo izvorno kodo helloworld.c in pripadajoči Makefile [7]. Pri izdelavi

Makefile-a moramo biti pozorni, da na koncu datoteke ni presledka ali celo nove vrstice.

Prav tako je pomembno, da za zamikanje teksta uporabljamo tabulator in ne presledkov.

Ko to uredimo, preverimo delovanje programa. To storimo tako, da v imeniku …/OpenWrt-

SDK-brcm47xx-for-Linux-i686-gcc-4.3.3+cs_uClibc-0.9.30.1/packages/helloworld/src

poženemo ukaz

make V=99 .

Opcija V=99 vrne razširjen izpis, kar pride prav v primeru napak v programu ali v

Makefile-u. Če ne dobimo posebnih obvestil, je prevajanje uspešno in lahko z ukazom

./helloworld program poženemo. Ko program deluje pravilno, poženemo še ukaz make

clean. S tem počistimo vse ustvarjene datoteke, da ne bi kasneje povzročale problemov.

//HelloWorld program

#include <stdio.h>

int main()

{

printf("Hello world!\n");

return 0;

}

Koda 4.1: Izvorna koda programa HelloWorld.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

15

Zatem se pomaknemo imenik više, kamor shranimo glavni Makefile, ki vsebuje pravila za

pravilno izdelavo paketa.

#Makefile za prevajanje programa

helloworld: helloworld.o

$(CC) $(LDFLAGS) helloworld.o -o helloworld

helloworld.o: helloworld.c

$(CC) $(CFLAGS) -c helloworld.c

# počisti .o in .exe ob zagonu "make clean"

clean:

rm *.o helloworld

Koda 4.2: Pravila Makefile-a za prevajanje programa Helloworld.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

16

#Makefile s pravili za izdelavo paketa

Include $(TOPDIR)/rules.mk

PKG_NAME:=preizkus

PKG_RELEASE:=1

PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

Include $(INCLUDE_DIR)/package.mk

Define Package/helloworld

SECTION:=utils

CATEGORY:=Utilities

TITLE:=Helloworld

Endef

Define Package/helloworld/description

Pozdravni program za preizkus.

Endef

Define Build/Prepare

mkdir -p $(PKG_BUILD_DIR)

$(CP) ./src/* $(PKG_BUILD_DIR)/

Endef

Define Package/helloworld/install

$(INSTALL_DIR) $(1)/bin

$(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/bin/

Endef

$(eval $(call BuildPackage,helloworld))

Koda 4.3: Makefile s pravili za izdelavo paketa za usmerjevalnik.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

17

Ko zaključimo izdelavo Makefile-a, se prestavimo na začetek imenika OpenWrt-SDK-

brcm47xx-for-Linux-i686-gcc-4.3.3+cs_uClibc-0.9.30.1 ter poženemo ukaz make. V

kolikor smo storili vse pravilno, se v imeniku OpenWrt-SDK-brcm47xx-for-Linux-i686-gcc-

4.3.3+cs_uClibc-0.9.30.1/bin/brcm47xx/packages/ nahaja datoteka

helloworld_1_brcm47xx.ipk. To datoteko moramo nato prenesti na usmerjevalnik z

ukazom

scp helloworld_1_brcm47xx.ipk [email protected]: ,

vpisati geslo in se preko protokola SSH (bodisi terminala ali programa PuTTY) prijaviti v

usmerjevalnik ter z ukazom

opkg install helloworld_1_mipsel.ipk

namestiti paket. Če smo izbrali pravilno različico okolja SDK za operacijski sistem

OpenWrt ter če so vsi predhodni koraki potekali nemoteno, potem naš preizkusni program

poženemo z ukazom helloworld (slika 4.4).

Slika 4.4: Instalacija in zagon programa na usmerjevalniku.

4.4.1 Prevajalnik GCC

Prevajalnik GCC (angl. GNU Compiler Collection) [23] je sklop prevajalnikov za različne

programske jezike (C, C++, podpira objektno programiranje, Java, Fortran). Je del

projekta GNU, katerega namen je zagotoviti sklop brezplačne programske opreme.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

18

Prevajalnik GCC je standard, ki je vključen v večino operacijskih sistemov, ki temeljijo na

operacijskem sistemu UNIX. Čeprav je bil ta prevajalnik razvit v sklopu projekta GNU, je

na voljo za različne arhitekture in operacijske sisteme (tudi MS Windows). Uporablja pa se

tako za prevajanje komercialnih kot tudi nekomercialnih aplikacij. Zaradi širokega kroga

podprtih arhitektur in operacijskih sistemov po njem posegajo razvijalci, ki razvijajo

programsko opremo za različne sisteme (različni OS in strojna oprema). Njegovi začetki

segajo v leto 1987. Prva različica je bila omejena zgolj na programski jezik C, obenem je

bila podpora za različne arhitekture slaba. Trenutna stabilna različica prevajalnika GCC je

različica 4.7.2. Ena od prednosti prevajalnika GCC je ta, da nam ponuja različne stopnje

optimizacije programske kode.

Optimizacija [20] je proces, ki omogoča učinkovitejše oziroma hitrejše izvajanje ter v veliki

večini pripomore k manjši porabi pomnilnika. Vendar je to odvisno od izbire opcij in vrste

optimizacije, saj lahko včasih v želji po pridobitvi na hitrosti izgubimo več pomnilniškega

prostora. Naš GCC prevajalnik ponuja tri stopnje optimizacije, ki jih določimo z –Ox, pri

čemer x predstavlja stopnjo optimizacije 1, 2 ali 3 [20].

Prva stopnja (O1)

Ta nivo poskrbi za manjše pomanjšanje kode in pohitritev delovanja, a ne vključuje

nobenih posebnih metod optimizacije, ki bi samo optimizacijo bistveno podaljšale, v

nekaterih primerih je bila celo hitrejša kot normalna.

Druga stopnja (O2)

Ta stopnja je nekako optimalna, saj ponuja v primerjavi s prvo stopnjo pohitritev izvajanja,

hkrati pa ne poveča velikosti izvedljivega progama. Edina slabost v primerjavi s prvo

stopnjo je, da za prevajanje porabi več časa in pomnilnika.

Os je vmesna stopnja, ki spada med drugo in tretjo stopnjo. Njen namen je optimizirati

velikost, če je potrebno tudi na račun hitrosti delovanja končne aplikacije. Zato vsebuje

vse optimizacijske postopke druge stopnje, razne tistih, ki na račun optimizacije povečajo

porabo prostora.

Tretja stopnja (O3)

Ta stopnja, v primerjavi s predhodno, ponuja še večjo optimizacijo, a na račun hitrejšega

delovanja programa. Na koncu porabi celo več pomnilnika, kar pa lahko v primerih, ko

smo prostorsko omejeni, pomeni počasnejše delovanje. Zaradi tega se tam, kjer je prostor

omejen, priporoča uporaba optimizacijske stopnje dve.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

19

4.5 Gonilniki kamere

Ključna komponenta praktičnega dela te diplomske naloge je tudi spletna kamera. Le-ta

seveda brez ustreznih gonilnikov ne more opravljati svojega dela. Najprej moramo zato

namestiti gonilnike za podporo vodilu USB [4]. To lahko storimo na dva načina: preko

grafičnega vmesnika, kjer je potrebno vsak gonilnik dodati posebej, ali pa preko konzole

(ali programa PuTTY) [4], kjer lahko istočasno namestimo več gonilnikov z ukazom

opkg install kmod-usb-core kmod-usb2 usbutils .

Za pravilno delovanje kamere pa potrebujemo paket posebnih gonilnikov, ki jih namestimo

z ukazom

opkg install kmod-video-uvc kmod-video-core kmod-i2c-core .

Po namestitvi vseh gonilnikov namestimo še program mjpg-streamer z ukazom

opkg install mjpg-streamer ,

ki omogoča zajem oziroma prikaz slike v brskalniku (ali v drugem programu), hkrati pa

omogoča še ogled posnetkov s spleta (npr. predvajalnik VLC), s čimer preverimo pravilno

delovanje gonilnikov oziroma kamere.

4.6 Programska koda za zajem slike

Poleg gonilnikov za kamero, ki zagotavljajo pravilno delovanje kamere, je za zajem in

nadaljnjo uporabo (obdelavo) slike potrebno poskrbeti, da se digitalna slika prenese iz

kamere v pomnilnik računalnika oziroma usmerjevalnika. Po hitrem pregledu spleta

ugotovimo, da za to nalogo obstajata dve knjižnici, namenjeni za operacijske sisteme

Linux. To sta knjižnica V4L (angl. Video for Linux) [9] oziroma njena novejša različica

V4L2 (Video for Linux 2), ki poleg zajemanja in shranjevanja slike ponujata še rutine za

obdelavo slike (več o tem bomo zapisali v naslednjem poglavju). V tem diplomskem delu

smo izbrali knjižnico V4L2, saj je novejša in na voljo v obliki paketa za naš usmerjevalnik

oziroma za distribucijo Backfire operacijskega sistema Linux.

4.7 Protokol SSH

Protokol SSH (Secure shell) [22] je kriptiran protokol, ki se uporablja za oddaljeno

komunikacijo z drugimi računalniki oziroma napravami v omrežju. Z njim lahko na

oddaljeni napravi izvajamo ukaze, prenašamo datoteke s protokolom SFTP (SSH File

Transfer Protocol), ki deluje po načelu strežnik − odjemalec. Pri tem je odjemalec

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

20

naprava, s katere se povezujemo, strežnik pa ciljna naprava. Za avtentikacijo se uporablja

javni oziroma privatni ključ (geslo). Odjemalec strežniku pošlje kriptiran ključ z geslom, če

vpisano geslo strežnik po dekripciji prepozna kot pravilno, se med njima vzpostavi

povezava in uporabniku omogoči delo na oddaljeni napravi. Protokol SSH se pojavlja v

dveh različicah, in sicer kot protokol SSH 1 in protokol SSH 2. Za komunikacijo s SSH

protokolom v MS Windows okolju najpogosteje uporabljamo program PUTTY, v Linux

okolju pa je SSH podprt, ukaze pa lahko izvajamo kar iz terminala. Začetek protokola SSH

sega v leto 1995, ko se je avtor finskega rodu, Tatu Ylönen lotil razvoja tega protokola po

tem, ko so bila ukradena gesla na univerzi, s ciljem, da se zamenjajo stari protokoli (npr.

TELNET in rsh), s čimer se poveča varnost. Izvirnik je kasneje dobil ime SSH 1, deležen

pa je bil še nekaj popravkov varnostnih lukenj. Z letom 2006 je nastopila verzija SSH 2, ki

je z vidika varnosti še boljša, hkrati pa nudi kar nekaj izboljšav, žal pa ni kompatibilna s

starejšimi različicami protokolov.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

21

5 ALGORITEM ZA ZAZNAVANJE NENAVADNIH

DOGODKOV

Program za zajemanje in zaznavo nenavadnih dogodkov smo napisali v programskem

jeziku C z uporabo knjižnice V4L2 [9]. Knjižnica V4L2 je izboljšana različica knjižnice V4L,

ima več podprte strojne opreme ter množico odpravljenih hroščev. Ta knjižnica omogoča

zajem slike oziroma video posnetkov iz različnih virov (npr. spletne kamere, TV-kartice

idr.). V naslednjih podpoglavjih si bomo pogledali algoritme, ki smo jih implementirali in

preizkusili v tem diplomskem delu. Izbrali smo tri preproste algoritme, ki pa vsak na svoj

način pristopajo k reševanju problema. Kot prvi algoritem smo izbrali najpreprostejši in

zato tudi najhitrejši, tj. algoritem slika razlik. V nadaljevanju smo spoznali in preizkusili

statistični pristop oziroma algoritem modeliranja ozadja, na koncu pa še algoritem

akumulirane slike razlik, ki na podlagi več različnih območji na sliki določi, ali gre za

premik ali ne.

5.1 Slika razlik

Pri tem algoritmu (koda 5.1) gre za primerjavo dveh zaporednih slik. Najprej je potrebno

trenutno in predhodno sliko zapisati v ločeni dvodimenzionalni polji. Ko imamo sliki

zapisani v poljih, v zanki nato izračunamo absolutno razliko med dvema istoležnima

piksloma in to razliko prištejemo k skupni vsoti. Če je končna vsota absolutnih razlik

enaka nič, potem sta sliki identični, v nasprotnem primeru pa je prišlo na sliki do

spremembe. Le-te niso nujno nastale zaradi dejanskih premikov objektov v prostoru,

temveč lahko gre le za premike senc, šum na senzorju ipd. Da se znebimo teh motenj,

moramo določiti neko mejo oziroma prag, ki ga dobimo z opazovanjem okolja in

spremljanjem rezultatov. S tem te nepravilnosti izničimo oziroma zmanjšamo.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

22

5.2 Modeliranje ozadja

Algoritem modeliranja ozadja (angl. Averaging Background Method) [15] (koda 5.2) je

algoritem, ki deluje po principu učenja s pomočjo statističnih metod. Od zgoraj opisanega

algoritma se razlikuje po tem, da namesto dveh sosednjih slik uporablja zaporedje N slik

(npr. med 30 do 100 slikami). Iz zaporedja slik izdelamo statistiko, ki posamezno sliko

razdeli na ozadje (angl. background) in ospredje (angl. foreground). Pri tem ozadje

predstavlja statični del scene (npr. stena, drevesa ipd.), ospredje pa dinamični del scene,

ki je bil zanimiv za naš projekt. Delitev na ospredje in ozadje je dobro predvsem zato, ker

s tem odpravimo težave, ki se pojavljajo pri algoritmu na osnovi slike razlik. Zaradi

zahtevnejših matematičnih izračunov pa je ta algoritem nekoliko počasnejši. Rezultate

dobimo tako, da za posamezne piksle iz zaporedja N slik (v našem primeru 32)

izračunamo povprečje in standardni odklon. Ospredje pa od ozadja na sliki N+1 ločimo

tako, da izračunamo absolutno razliko med posameznim pikslom in isto ležečo povprečno

vrednostjo piksla. Če je ta razlika manjša od trikratne vrednosti standardnega odklona,

potem točko obravnavamo kot ozadje, drugače pa kot ospredje (enačba (5.1)).

0],[

1],[

3|)][(|

yxospredje

ELSE

yxospredje

povpPixislikaIF

(5.1)

//Algoritem slika razlik

slika1[320][240]

slika2[320][240]

razlika=0

FOR i=0; i<320

FOR j=0; j<240

razlika+=ABS(slika1[i][j]- slika2[i][j])

IF razlika>prag

premik

Koda 5.1: Princip delovanja algoritma slika razlik.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

23

//Neoptimizirana različica Algoritma modeliranja ozadja

//Vhod: zaporedje 32 slik, ki ga pretvorimo v 2D polje

//Izhod: izpis »Premik« na zaslonu, v primeru zaznanega nenavadnega dogodka

pSlik[30][76800] //za vsako sliko 320*240 vrednosti

povpPix[76800] //polje shrani povprečne vrednosti posameznih pikslov

stOdkPix[76800]// polje shrani standardni odklon posameznih pikslov

IF pSLik=30slik

{

vsota=0;

//povprečje glede na posamezen piksel

//indeksa i in j predstavljata posamezen piksel na sliki

FOR i=0; i<76800 {

FOR j=0; j<30

vsota+=pSlik[j][i]

povpPix[i]=vsota/30

vsota=0

}

//standardni odklon

FOR i=0; i<76800 {

FOR j=0; j<30 {

tmp=POW((povpPix[i]-pSlik[j][i]),2)

vsota+=tmp

}

vsota=vsota/30

stOdkPix[i]=SQRT(vsota)

vsota=0

}

FOR i=0; i<76800

vsota+= stOdkPix[i]

PovpStOdk=vsota/76800

IF PovpStOdk >prag

premik

}

Koda 5.2: Začetna neoptimizirana različica algoritma modeliranja ozadja.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

24

5.3 Akumulirana slika razlik

Algoritem akumulirana slika razlik je namenjen za zaznavo gibanja tam, kjer ozadje

predstavlja manjši del kot ospredje in hkrati ne prihaja do enakomerno velikih premikov

ospredja (npr. sedeča oseba (portret) pred kamero) [21]. Prva razlika med algoritmom

akumulirane slike razlik in prejšnjima algoritmoma je ta, da smo pri prejšnjih dveh premike

iskali po celotnem področju slike, pri tem algoritmu pa sliko razdelimo na odseke (bloke) in

premike iščemo znotraj posameznega bloka. Naslednja posebnost algoritma je ta, da v

polje ne akumuliramo enakomerno količino slik, ampak za vsak posamezen blok; glede na

predvideno gibanje določimo število slik, ki jih bomo akumulirali. Če se ospredje spreminja

počasneje, akumuliramo več slik, če se spreminja hitreje, pa manj slik.

Delovanje algoritma akumulirana slika razlik lahko razdelimo v tri korake:

1. Začetna analiza in razdelitev slike na posamezne bloke,

2. izračun števila slik za akumulacijo in akumulacija slik ter

3. določitev praga in predstavitev rezultata.

V prvem koraku smo iz prvih dveh zajetih slik izračunali sliko razlik (FD) in dobljeno sliko

razdelili na bloke B(i,j), kjer sta i in j koordinati piksla znotraj bloka. Velikost blokov je zelo

pomembna, saj premajhni bloki ne zajemajo vseh informacij, medtem ko lahko preveliki

bloki zajemajo preveč informacij. Prav tako je potrebno paziti, da se bloki med sabo ne

prekrivajo, saj bi tako določene informacije podvajali. Za naš program smo izbrali bloke

velikosti 16 x 16 pikslov, kar na sliki 320 x 240 pikslov pomeni, da bo slika sestavljena iz

300 blokov. Delitvi slike na bloke sledi izračun vsote pikslov (SBD) za prej izračunano

sliko razlik po posameznih blokih (enačba (5.2)), kjer k pomeni trenutni indeks, x in y pa

predstavljata koordinati piksla znotraj slike:

),(),(

),(),(jiByx

kk yxFDjiSBD (5.2)

Naslednji korak je izračun NFA (angl. Number of frames to accumulate) oziroma števila

slik, potrebnih za akumulacijo. Sledi njihova akumulacija. Število slik, ki jih bomo

akumulirali se razlikuje med posameznimi bloki in je odvisno od gibanja v posameznem

bloku. Če je gibanje na sliki počasno, akumuliramo več slik, če pa je gibanje hitro,

akumuliramo manj slik (enačbe (5.3), (5.4) in (5.5)), vendar pa predhodno določimo

maksimalno vrednost (Nmax) NFA, ter primerjavo vsote pikslov referenčnih blokov glede na

velikost in določitev največjega (Sn.max):

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

25

max1

max.

8

1

2

NNFANFA

SSBDIF

kk

nk

(5.3)

]/[

2

1max.1

max.1

kknkk

nkk

SBDSBDSNFANFA

SSBDSBDIF (5.4)

max.11

max.1

/][

2

nkkkk

nkk

SSBDSBDNFANFA

SSBDSBDIF

(5.5)

Ko imamo izračunano vrednost NFA za vse bloke, sledi akumuliranje slik. To storimo tako,

da za posamezne bloke izračunamo sliko razlik in jo prištejemo prejšnjemu rezultatu.

Akumulaciji slik sledi še zadnji korak, kjer s pomočjo referenčnih blokov (Bbg) po enačbi

(5.6) določimo prag in podamo rezultate (koda 5.3):

bg

Byx

Nk

ki

i

N

kB

yxFD

Tbg

),(

),(

(5.6)

//Algoritem akumulacija slike razlik

//Vhod: Zaporedje slik

//Izhod: izpis »Premik« na zaslonu, v primeru zaznanega nenavadnega dogodka

VOID zajem(){

IF prvi dve sliki

{

FOR stPix=76800

Slika1[stPix]=piksel slike s kamere

FOR stPix=76800

Slika2[stPix]=piksel slike s kamere

predpriprava()

}

ELSE IF naslednjih 32 slik

{

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

26

FOR stPix=76800

Slika1[stPix]=piksel slike s kamere

akumulacijaINprag()

}

}

VOID predpriprava(){

//ustvarimo sliko razlik

FOR i=0; i<76800

FD[i]=ABS(slika1[i]-slika2[i])

//izračunamo SBD

FOR i=0; i<76800

{

SBD[vrstica][stolpec]+=FD[i]

stevecP++ //šteje 16 pikslov kolikor jih je v vrstici enega blok

IF stevecP==16

{

stolpec++

stevecP=0

}

IF stolpec==20

{

stolpec=0

vrstica++

}

}

//določimo Snmax

IF(SBD[0][0]>SBD[14][19])

Snmax= SBD[0][0]

ELSE

Snmax= SBD[14][19]

//Izračun NFA (max NFA je omejen na 32 slik)

predhodnik=0

k=1

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

27

FOR i=0; i<15

FOR j=0; j<20

{

IF SBD[i][j]<2*Snmax

NFA[k]=NFA[k-1]+4

ELSE IF SBD[i][j]-predhodnik>2*Snmax

NFA[k]=NFA[k-1]*Snmax/(SBD[i][j]-predhodnik)

ELSE IF SBD[i][j]-predhodnik>-2*Snmax

NFA[k]=NFA[k-1]* (SBD[i][j]-predhodnik)/ Snmax

IF NFA[k]>32

NFA[k]=32

k++

predhodnik=SBD[i][j]

}

}

VOID akumulacijaINprag(){

IF dve novi sliki

{

FOR i=0; i<76800

{

FD2[i]=ABS(slika1[i]-slika2[i])

slika2[i]=slika1[i]

}

tmpNFA=0;

FOR i=0; i<76800

{

IF NFA[trenutni]>0

AFD[i]+=FD2[i]

stevecPixlov++

IF stevecPixlov==16

{

trenutni++

stevecStolpcev++

stevecPixlov=0

}

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

28

IF stevecStolpcev==20

{

stevecStolpcev=0;

stevecVrstic++

trenutni=tmpNFA

}

IF stevecVrstic%16==0

{

tmpNFA+=20

trenutni+=tmpNFA

}

}

FOR za vsak NFA[]--

}

ELSE

FOR i=0; i<76800

slika2[i]=slika1[i]

IF akumulirane vse slike

{

FOR i za prvi blok

prag+=AFD[i]

FOR i za zadnji blok

prag+=AFD[i]

prag=prag/512

FOR i=0; i<76800

IF AFD[i]>=prag

stevecPrekoracitev++;

IF stevecPrekoracitev>45000

Premik

}

}

Koda 5.3: Algoritem akumulirana slika razlik.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

29

6 REZULTATI

V tem poglavju bomo predstavili dobljene rezultate, primerjavo med algoritmi in izboljšave,

ki so bile potrebne za normalno delovanje, predvsem pri algoritmu modeliranja ozadja.

Preizkusi algoritmov so bili narejeni tako na stacionarnem računalniku, kot tudi na

usmerjevalniku, v obeh primerih za 1000 zajetih slik. V nadaljevanju pa so podani samo

rezultati z usmerjevalnika, saj so bile razlike testiranja na računalniku zanemarljive.

Scena, na kateri smo preizkušali algoritme, je bilo okno z zaveso (slika 6.1), kjer smo

dodajali in odvzemali različne predmete, ki so ponazarjali gibanje.

Slika 6.1: Scena, ki se je uporabljala za preizkus algoritmov.

Najprej si poglejmo rezultate prvega algoritma, torej algoritma razlike dveh slik. Algoritem

zaradi svoje preprostosti, pri čemer ni zapletenih matematičnih funkcij, opravka imamo le

z odštevanjem, deluje v realnem času; tako na računalniku kot tudi usmerjevalniku. Za

obdelavo 1000 slik na usmerjevalniku potrebuje 29 sekund (tabela 6.1), kar pomeni, da

smo zmožni obdelati približno 34 slik na sekundo.

Tabela 6.1: Podatki o izvajanju algoritma razlika dveh slik.

POVPREČEN

ČAS FUNKCIJA ENOTA ŠT. SLIK

29 main s 1000

20 proc_img ms 1

0 primerjava ms 1

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

30

Pri algoritmu modeliranja ozadja pa ni potekalo vse tako gladko. Na računalniku so bili

rezultati uporabni, saj je program deloval v realnem času. Na usmerjevalniku pa je čas

izvajanja za 1000 slik dosegel kar 2 uri in 20 minut, kar pomeni okoli 7 slik na minuto

(tabela 6.2). To je seveda bistveno preveč za učinkovito zaznavanje nenavadnih

dogodkov.

Tabela 6.2: Podatki o izvajanju neoptimiziranega algoritma modeliranje ozadja.

POVPREČEN

ČAS FUNKCIJA ENOTA ŠT. SLIK

140 main program min 1000

7 proc_img s 1

8 primerjava s 11

6 standardni odklon s 1

Po podrobnem pregledu algoritma (glej kodo 5.2) smo prišli do ugotovitve, da predstavlja

eno izmed ovir izračun povprečja za posamezne piksle v zaporedju 32 slik. V

neoptimiziranem programu smo namreč ta izračun izvedli za vsako novo sliko. Naslednjo

ozko grlo pa predstavljata izračun standardnega odklona ter uporaba potratnih funkcij

kvadriranja (POW) in korenjenja (SQRT) (tabela 6.3 prikazuje program po vpeljavi

kazalcev in enačb za tekoče povprečje in tekoči standardni odklon, vendar pa še vedno

uporablja funkciji POW in SQRT).

Tabela 6.3: Podatki o izvajanju algoritma modeliranje ozadja s kazalci in funkcijo POW.

POVPREČEN

ČAS FUNKCIJA ENOTA ŠT. SLIK

446 main program s 1000

460 funkcija proc_img ms 1

440 primerjava ms 1

400 standardni odklon ms 1

Procesor v usmerjevalniku namreč nima matematičnega koprocesorja, posledično seveda

nima strojne podpore za omenjena ukaza. Tudi dostop do podatkov je možno optimirati.

Ker do podatkov dostopamo zaporedoma, lahko uporabimo branje podatkov s pomočjo

kazalcev, kar je nedvomno hitrejše, kot pa branje iz polja, pri katerem moramo pred

1 Funkcija primerjava se je izvedla za vsako novo sliko, vendar pa se je povprečje računalo za vseh

30 slik v polju.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

31

dostopom iz indeksa še vedno izračunati pomnilniški naslov. Po uvedbi kazalcev je na

vrsti za optimizacijo del, kjer se računa povprečje pikslov. Zgoraj omenjeno zanko, ki

predstavlja ozko grlo, uporabimo samo za izračun prvih 32 slik. Toliko slik smo uporabili

zato, ker lahko množenje in deljenje na računalnikih brez koprocesorja implementiramo

učinkoviteje. Za vsako naslednjo sliko pa uporabimo enačbo za izračun tekočega

povprečja (glej enačbo (6.1)), ki od starega povprečja odšteje najstarejšo sliko zaporedja

in prišteje novo.

ns aaxx 01 (6.1)

Naslednja v vrsti za izvedeno optimizacijo je funkcija za izračun standardnega odklona, ki

uporablja zelo potratni operaciji kvadriranja in korenjenja. Najprej smo splošno enačbo za

izračun standardnega odklona zamenjali z enačbo za izračun tekočega standardnega

odklona (glej enačbo (6.2)):

21

0

1

0

22 1

1

1 N

i

i

N

i

i xN

xN

(6.2)

Nato pa smo zamenjali še funkcijo POW z množenjem enakih vrednosti, korenjenje pa

smo izpustili. Poleg zgoraj omenjenih optimizacij, smo pri prevajanju preizkusili še

optimizacijo, ki nam jo ponuja prevajalnik GCC. Po uvedbi vseh opisanih izboljšav v naš

neoptimiziran program se je čas izvajanja bistveno izboljšal. Optimizirana različica

programa (t.i. končna verzija, koda 6.1) je za obdelavo potrebovala slabi dve minuti

(približno 110 sekund), kar po preračunu pomeni, da smo zmožni obdelati 9 slik na

sekundo (tabela 6.4), kar pa že zadostuje za realnočasovno delo.

Tabela 6.4: Podatki o izvajanju popolnoma optimiziranega algoritma modeliranje ozadja.

POVPREČEN

ČAS FUNKCIJA ENOTA ŠT. SLIK

110 main s 1000

115 proc_img ms 1

95 Primerjava ms 1

55 standardni odklon ms 1

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

32

//Končna oz. optimizirana različica Algoritema modeliranja ozadja

//Vhod: zaporedje 32 slik, ki ga pretvorimo v 2D polje

//Izhod: izpis »Premik« na zaslonu, v primeru zaznanega nenavadnega dogodka

INT pSlik[32][76800]={0} //32 predstavlja število slik v polju, 76800 pa vsak piksel

INT p1[76800]={0}

INT *kazalecNS, *kazalecSS

VOID zajem(){

IF stSlik<32

{

FOR stPix=76800

pSlik[stSlik][stPix]=piksel slike s kamere

stSlik++

}

ELSE // najstarejšo sliko nadomestimo z novo

{

FOR za vsak piksel

{

*kazalecNS=piksel slike s kamere

kazalecNS++

}

kazalecSS=najstarejša slika v polju

}

IF 32 slik

detekcijaGibanja()

}

VOID detekcijaGibanja(){

kaz1=&pSlik[0][0] //kazalec 1, kaže na polje slik

//izračun povprečja za prvih n slik

IF prvih 32 slik

FOR i<32

{

povp=kazkvadrat=p1

FOR stPix=76800

{

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

33

*povp+=*kaz1

*kazkvadrat+=((*kaz1)*(*kaz1

kaz1++

povp++

kazkvadrat++

}

}

ELSE

{

//kazalecNS je slika, ki prihaja v polje in bo nadomestila sliko kazalecSS

//izračun tekočega povprečja z novo sliko

kopijaKazNS= kazalecNS

povp=kazkvadrat=p1

FOR i=0; i<76800

{

*povp=*povp+*kazalecNS-*kazalecSS

*kazkvadrat+=(*kazalecNS*(*kazalecNS))-

(*kazalecSS*(*kazalecSS))

povp++

kazalecNS++

kazalecSS++

kazkvadrat++

}

//izračun tekočega standardenga odklona

kazalecNS=kopijaKazNS

INT povp2=0

FOR i=0; i<76800

{

povp2=(*povp)*(*povp)/32

sigma2=((*kazkvadrat)-povp2)/32

razlika=(*kazalecNS)-povp2

IF razlika<0

razlika=-razlika

IF razlika>sigma2 //če je pogoj izpolnjen je prišlo do premika

vsota++

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

34

Preden podamo primerjalne rezultate izvajanja posameznih programov glede na čas, si

poglejmo še, kako se je odrezal zadnji algoritem, tj. algoritem akumulirana slika razlik.

Algoritem akumulirana slika razlik se je odrezal zelo dobro, kar je bilo tudi za pričakovati,

saj poleg nekaj primerjav (if stavkov) in osnovnih matematičnih funkcij nima nobene

potratne funkcije kot predhodnik. Tako je bil njegov povprečni čas izvajanja 53 sekund,

kar pri 1000 slikah pomeni približno 19 slik na sekundo (tabela 6.5), kar je drugi najboljši

rezultat pri našem preizkusu. Tudi zaznavanje gibanja je zelo zanesljivo, primerljivo z

algoritmom modeliranja ozadja, saj med preizkusom ni bilo zaznati vplivov šuma kamere

in rahlo premikajočih se objektov (npr. šelestenje listja, premiki zaves).

Tabela 6.5: Podatki o izvajanju algoritma akumulacija slike razlik.

V nadaljevanju podajamo pregled končnih rezultatov v obliki grafov, ki smo jih dobili s

testiranjem algoritmov na usmerjevalniku. Za preglednejši prikaz podatkov smo vse

algoritme priredili tako, da zajamejo in obdelajo 1000 slik. S to omejitvijo smo zagotovili

verodostojno primerjavo različnih pristopov med sabo. Prvi graf (slika 6.1) prikazuje

časovno izboljšavo po korakih optimizacije pri algoritmu modeliranje ozadja, medtem ko

drugi graf (slika 6.2) prikazuje primerjavo časov izvajanja vseh treh algoritmov med sabo,

POVPREČEN

ČAS FUNKCIJA ENOTA ŠT. SLIK

53 celoten program s 1000

56 akumulacija in prag img ms 1

25 primerjava ms 1

povp++

kazalecNS++

kazkvadrat++

}

IF vsota>prag

premik

vsota=0

}

}

Koda 6.1: Končna optimizirana različica algoritma modeliranja ozadja.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

35

pri čemer je bila pri algoritmu modeliranja ozadja izbrana končna, optimizirana različica

algoritma.

Slika 6.2: Grafični prikaz časovne zahtevnosti za posamezne korake optimizacije algoritma modeliranja ozadja.

Slika 6.3: Grafični prikaz časovne zahtevnosti za končno različico algoritma modeliranja ozadja in preostalih dveh testiranih algoritmov.

6.1 Primerjava s programskim sistemom Motion

Delovanje oziroma učinkovitost naših algoritmov smo primerjali s programom Motion (glej

podpoglavje 2.1). Vse programe smo poganjali na usmerjevalniku, velikost zajete slike je

bila v vseh primerih 320 x 240 pikslov. Prednost naših programov je v tem, da jim ob

zaznanem premiku ni bilo potrebno shraniti slike.

Edina očitna prednost naših algoritmov pred programom Motion je pri samem zagonu.

Program Motion je tipično potreboval od 5 do 25 sekund (odvisno od načina zagona) do

0

20

40

60

80

100

120

140

160

Neoptimiziranprogram

Kazalci in POWfunkcija

Popolnomaoptimiziran

program

ČAS (min)

0

20

40

60

80

100

120

Modeliranje ozadja Akumulirana slikarazlik

Slika razlik

ČAS (s)

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

36

prvega zajema slike, medtem ko so naši programi bili pripravljeni v dobri sekundi. Pri

samem izvajanju ni opaziti bistvenih razlik glede hitrosti delovanja, saj vsi zajamejo in

obdelajo slike v realnem času. Kot edino opazno razliko med algoritmi lahko navedemo to,

da algoritma modeliranja ozadja in akumulirana slika razlik zaradi načina delovanja

učinkoviteje delujeta v primerih, kjer prihaja do konstantnih sprememb scene (migetanje

listja, spremembe senc), saj s svojim pristopom te probleme odpravljata oziroma

zmanjšujeta.

Pri opisanih ugotovitvah je potrebno poudariti, da je program Motion deloval na privzetih

nastavitvah, saj nam program s spremembo nastavitev omogoča nivojsko izbiro

občutljivosti in odstranitev zaznanih motenj (npr. prižiganje oziroma ugašanje luči), kar je

bistveno izboljšalo učinkovitost samega programa.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

37

7 SKLEP

V diplomskem delu smo izdelali preprost sistem za zaznavo nenavadnih dogodkov, ki za

delovanje potrebuje spletno kamero, usmerjevalnik in algoritem, ki zaznava gibanje.

Najprej smo na usmerjevalniku tovarniški operacijski sistem zamenjali z OpenWrt-jem, ki

nam je v nadaljevanju omogočal zagon lastnih programov. Sledila je namestitev

gonilnikov spletne kamere na usmerjevalnik in priprava računalnika za pisanje in

prevajanje programov, ki so se nato izvajali na usmerjevalniku. K pripravi računalnika za

prevajanje programov namenjenih usmerjevalniku sodi tudi izdelava SDK-ja za operacijski

sistem OpenWrt in priprava Makefila, ki na koncu vse skupaj prevede in pripravi paket, za

namestitev na usmerjevalniku. Po namestitvi vseh potrebnih programov in dodatkov, smo

osnovno delovanje preizkusili s programom HelloWorld. Uspešnemu preizkusu je sledil

izbor primernih algoritmov za zaznavanje gibanja.

Prvi algoritem, ki smo ga implementirali je bil osnovni algoritem slika razlik. Algoritem slika

razlik deluje tako, da primerja razliko istoležnih pikslov trenutne in predhodne slike z

vnaprej določenim pragom. Naslednji algoritem, ki smo ga implementirali je bil algoritem

modeliranja ozadja, ki s statistično obdelavo sliko loči na ozadje in ospredja. To stori tako,

da izračunano absolutno razliko med posameznim pikslom in isto ležečo povprečno

vrednostjo piksla primerjamo s trikratno vrednostjo standardnega odklona. V primeru, ko

je absolutna razlika večja od trikratne vrednosti standardnega odklona, to točko

obravnavamo kot ospredje. Če vsota točk, ki predstavljajo ospredje posamezne slike,

preseže nek prag, nam to pove, da je prišlo do premika. Zadnji algoritem, ki smo ga

implementirali ter preizkusili pa je bil algoritem akumulirana slika razlik. Algoritem se od

predhodnikov razlikuje po tem, da premikov ne išče po celotni sliki, ampak sliko razdeli na

bloke (odseke) in nato znotraj teh blokov zaznava gibanje. Na začetku algoritem

akumulirane slike razlik analizira prvi dve sliki, izračuna osnovno sliko razlik, jo razdeli na

bloke in v dobljeni sliki razlik izračuna vsoto pikslov za posamezne bloke. V drugem

koraku določi število akumuliranih slik za posamezen blok, nazadnje pa še določi prag in

poda rezultat.

Po končanem programiranju je sledilo preizkušanje posameznih algoritmov in

medsebojna primerjava. Prve preizkuse algoritmov smo opravljali na stacionarnem

računalniku, kjer zaradi zadostne procesorske moči in velikosti pomnilnika noben izmed

zgoraj opisanih algoritmov ni imel težav. Preizkusom na računalniku je sledil preizkus na

usmerjevalniku, kjer pa so se pokazale prve razlike med algoritmi, saj usmerjevalnik

deluje le na 264 MHz ter ima 32 MB pomnilnika. S pomanjkanjem pomnilniškega prostora

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

38

in procesorske moči se je najbolje odrezal algoritem slika razlik, ki je deloval najhitreje in

najbolj tekoče, imel pa je kar nekaj težave z različnimi motnjami (npr. šum kamere,

premiki zaves), kljub preizkušanju različnih pragovnih vrednosti. Naslednji algoritem, ki

smo ga preizkusili, je bil algoritem modeliranje ozadja, ki pa zaradi zahtevnosti nekaterih

matematičnih operacij in velikega števila podatkov, ki jih je bilo potrebno obdelati na

začetku, ni deloval v realnem času. Zaradi počasnega delovanja smo nato algoritem

predelali, zamenjali enačbi za izračun povprečja in standardnega odklona z enačbama za

izračun tekočega povprečja in tekočega standardnega odklona, vpeljali kazalce in funkcijo

potenciranja zamenjali z množenjem. Po vpeljavi sprememb se je delovanje algoritma

bistveno izboljšalo, saj je deloval v realnem času. Pri istih testnih pogojih kot predhodnik

pa se je obnesel bistveno bolje, saj zaradi svojega statističnega pristopa zanemarja

motnje, omenjene pri prejšnjem algoritmu. Kot zadnji algoritem smo na usmerjevalniku

preizkusili algoritem modeliranja akumulacija slike razlik, ki se je prav tako kot algoritem

slika razlik na usmerjevalniku izvedel brez težav, edina opazna razlika, ki je bila med

njima, je ta, da se je algoritem akumulacija slike razlik dosti bolje izkazal v primeru motenj

(šum, premiki zaves).

Po vseh opravljenih preizkusih smo prišli do sklepa, da tak sistem, ki smo ga naredili v

diplomskem delu ni pretirano drag, saj ima skoraj vsakdo izmed nas doma kako spletno

kamero, marsikdo pa še naprednejši usmerjevalnik (ni potrebno da je enak, kot smo ga

uporabili v našem diplomskem delu, važno je le, da omogoča nadgradnjo OS na

OpenWrt). Tak nadzorni sistem pa ni praktičen le zaradi svoje nizke cene, ampak tudi

zaradi končne uporabnosti in zanesljivosti, saj sta se dva izmed zgornjih algoritmov

izkazala za zelo zanesljiva, le algoritem slike razlik je zaznal kak premik preveč (šum

kamere, premik zaves). Prav tako pa je velika prednost neodvisnost od računalnika in ob

primerni konfiguraciji usmerjevalnika tudi dostopnost do same aplikacije. Kot slabost tega

sistema bi izpostavili pomanjkanje procesorske moči in predvsem pomanjkanje prostora

za shranjevanje v usmerjevalniku, saj bi, če bi želeli shranjevati video ali slike ob

zaznanem gibanju potrebovali dodaten USB pomnilnik z večjo kapaciteto, kar pa bi še

dodatno upočasnilo delovanje algoritmov.

V bodoče bi bilo vredno razmisliti o nadgradnji sistema, predvsem z vidika prijaznosti do

uporabnikov, saj v taki obliki kot je sedaj, omogoča dostop samo preko SSH protokola, kar

pa za povprečne uporabnike ni primerno. Smiselno bi bilo dodati grafični vmesnik v obliki

spletne strani in/ali aplikacije za računalnike oziroma mobilne naprave, da bi tako imeli

pregled in nadzor nad objektom, ne glede na to, kje se nahajamo. Prav tako bi bilo

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

39

potrebno dodati še možnost vpogleda v trenutno dogajanje (slika v živo), shranjevanje

posnetkov ob zaznanih premikih ali glede na časovne nastavitve ter obveščanje preko

elektronske pošte ob zaznanem premiku.

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

40

8 VIRI

[1] OpenWrt, OpenWrt, 2012.

Dostopno na: https://openwrt.org/

[zadnji dostop: 14. 11. 2012].

[2] OpenWrt, ASUS WL-500g Premium, 2012.

Dostopno na: http://wiki.openwrt.org/toh/asus/wl500gp

[zadnji dostop: 14. 11. 2012].

[3] OpenWrt, OpenWrt Basic Configuration, 2012.

Dostopno na: http://wiki.openwrt.org/doc/howto/basic.config

[zadnji dostop: 14. 11. 2012].

[4] OpenWrt, USB Video Support, 2012.

Dostopno na: http://wiki.openwrt.org/doc/howto/usb.video

[zadnji dostop: 14. 11. 2012].

[5] OpenWrt, USB Basic Support, 2012.

Dostopno na: http://wiki.openwrt.org/doc/howto/usb.essentials

[zadnji dostop: 14. 11. 2012].

[6] Gargoyle, Writing and Compiling A Simple Program For OpenWrt. 2012.

Dostopno na: http://www.gargoyle-router.com/wiki/doku.php?id=openwrt_coding

[zadnji dostop: 14. 11. 2012].

[7] Manoftoday, Writing and Compiling A Simple Program For OpenWrt, 2007.

Dostopno na: http://manoftoday.wordpress.com/2007/10/11/writing-and-compiling-

a-simple-program-for-openwrt/

[zadnji dostop: 14. 11. 2012].

[8] Motion, Motion - Web Home, 2011.

Dostopno na: http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome

[zadnji dostop: 14. 11. 2012].

[9] M. H. Schimek, M. Dirks, H. Verkuil, M. Rubli. Video for Linux Two API

Specification: Revision 0.24. 2008.

Dostopno na: http://uvo4.sci.hokudai.ac.jp/~softs/closed/anjuta/video_pack.anjuta-

130110/doc/v4l2.pdf

[zadnji dostop: 14. 11. 2012].

[10] P. Spagnolo, M. Leo, T. D. Orazio, N. Mosca, M. Nitti. A Background Modelling

Algorithm for Motion Detection.

Dostopno na:

http://www.eurasip.org/Proceedings/Ext/ISCCSP2006/defevent/papers/cr1174.pdf

[zadnji dostop: 14. 11. 2012].

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

41

[11] ZoneMinder, ZoneMinder, 2011.

Dostopno na: http://www.zoneminder.com/

[zadnji dostop: 14. 11. 2012].

[12] C. H. Chen, L. F. Pau, P. S. P. Wang. Handbook of Pattern Recognition and

Computer Vision. World Scientific Publishing Company, London. 2010.

[13] Surveillance .NET, Surveillance .NET, 2012.

Dostopno na: https://code.google.com/p/surveillancedotnet/

[zadnji dostop: 14. 11. 2012].

[14] D. Gookin. C for Dummies, 2nd Edition, Wiley Publishing, Inc., Indianapolis, ZDA,

2004.

[15] G. Bradski, A. Kaehler. Learning OpenCV. O’Reilly Media, Inc., Sebastopol. 2008.

[16] Ideasonboard, Linux UVC driver and tools, 2011.

Dostopno na: http://www.ideasonboard.org/uvc/

[zadnji dostop: 14. 11. 2012].

[17] LinuxTV, Webcam Devices, 2012.

Dostopno na: http://linuxtv.org/wiki/index.php/Webcam_Devices

[zadnji dostop: 14. 11. 2012].

[18] Z. Frangež, Spletne kamere – Uporabnost, Moj Mikro, 2007.

Dostopno na:

http://www.mojmikro.si/v_srediscu/podrobneje_o/spletne_kamere-uporabnost

[zadnji dostop: 14. 11. 2012].

[19] Wikipedia, YUV color model, 2012.

Dostopno na: http://en.wikipedia.org/wiki/YUV

[zadnji dostop: 14. 11. 2012].

[20] M. T. Jones, Optimization in GCC, Linux Journal, 2005.

Dostopno na: http://www.linuxjournal.com/article/7269

[zadnji dostop: 14. 11. 2012].

[21] L. Bing, D. Qionghai, Video object segmentation based on accumulative frame

difference, Broadband Network & Digital Media Lab of Dept. Automation in

Tsinghua University, Beijing

Dostopno na:

http://www.eurasip.org/Proceedings/Ext/PCS2007/defevent/papers/cr1155.pdf

[22] Wikipedia, Secure Shell, 2012.

Dostopno na: http://en.wikipedia.org/wiki/Secure_Shell

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

42

[zadnji dostop: 14. 11. 2012].

[23] Wikipedia, GNU Compiler Collection, 2012.

Dostopno na: http://en.wikipedia.org/wiki/GNU_Compiler_Collection

[zadnji dostop: 14. 11. 2012].

[24] Wikipedia, Webcam, 2012,

Dostopno na: http://en.wikipedia.org/wiki/Webcam

[zadnji dostop: 14. 11. 2012].

[25] Wikipedia, Router, 2012.

Dostopno na :http://en.wikipedia.org/wiki/Router_(computing)

[zadnji dostop: 14. 11. 2012]

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

43

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

44

Zaznavanje nenavadnih dogodkov s pomočjo kamere in usmerjevalnika

45