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
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]