SlideShare a Scribd company logo
1 of 16
Download to read offline
SecureCam 0.9


Programátorská dokumentácia




                          Vladimír Bedecs

                                2.8.2009
Obsah
 Adresárová štruktúra projektu............................................................................ 3

 Špeciality projektu............................................................................................... 3

 Návrhové vzory ................................................................................................... 4

 Modularizácia ...................................................................................................... 4

 StreamLoader ...................................................................................................... 5

 VideoAnalyzer ..................................................................................................... 7

        Obrazový filter ............................................................................................. 7

        Detektor ...................................................................................................... 8

        Filtrátor videa .............................................................................................. 9

 SecureCam ........................................................................................................ 10

        Udalosti a Logovanie ................................................................................. 10

        Poplach ...................................................................................................... 11

 Security.............................................................................................................. 11

 XML.................................................................................................................... 12

 GUI..................................................................................................................... 13

        Reprezentácia v kóde ................................................................................ 14

 Setup ................................................................................................................. 15

 Kompilácia SecureCam ...................................................................................... 16




                                                             2
Adresárová štruktúra projektu
  Zdrojový kód projektu SecureCam je organizovaný v jednoduchej adresárovej
štruktúre. Každý modul (na OS Windows dynamická knižnica .dll) má vlastný
podadresár projektového adresára „Source“. Niektoré súbory so zdrojovým
kódom obsahujúce globálne deklarácie alebo deklarácie tried výnimiek sú
spoločné pre všetky moduly. Tieto sa nachádzajú v podadresári „Shared“
adresára „Source“. Dokumentácia (Doc), externé knižnice (Libs), ukážkové videá
(Samples) s skompilované súbory (Build) majú vlastné adresáre v koreni
adresárovej štruktúry projektu tiež.
   •   SecureCam
          o Build
          o Doc
          o Libs
          o Samples
          o Sounds
          o Source
                   GUI
                   SecureCam
                   Security
                   Shared
                   StreamLoader
                   SystemLoader
                   VideoAnalyzer


  Špeciality projektu
  V jazyku C++ je veľmi ľahké vytvoriť únik pamäte (memory leak), pretože
behové prostredie neposkytuje garbage collection a každá naalokovaná pamäť
musí byť aj korektne dealokovaná. Aby sa predišlo podobným nepríjemnostiam,
tak sa na automatické uvoľňovanie alokovanej pamäte v zdrojovom kóde
používa logika smart pointrov. Implementáciu smart pointrov poskytuje
platformne nezávislá zbierka utilít a knižníc Boost, ktorej zdrojový kód je
dostupný pod Boost licenciou. Pre rýchly prístup k jednotlivým zdrojom videa




                                       3
vzhľadom na ich ID využíva hash mapy (navrhovaný štandard tr1) z knižnice
boost.



  Návrhové vzory
  SecureCam využíva pomerne často vo svojom kóde implementácie
návrhových vzorov. Preto sa predpokladá, že čitateľ tohto dokumentu má aspoň
základný prehľad terminológie tejto oblasti. Základné návrhové vzory, ktoré
SecureCam využíva sú:

         •   Iterator
         •   Observer
         •   Factory method
         •   Abstract factory
         •   Command
         •   Visitor



  Modularizácia
  Každý modul je kompilovaný ako dynamická knižnica (.dll) operačného
systému Windows. Rozhranie modulov tvoria deklarácie interface-ov tried,
ktorých instancie vracia továreň na objekty známa z design patterns ako
(abstract) Factory. Každý modul má teda vlastnú továreň, pomocou ktorej
propaguje svoju funkčnosť iným modulom. V ďalšom texte bude aplikácia
SecureCam detailnejšie popísaná vzhľadom na jednotlivé moduly:

         •   GUI
         •   SecureCam
         •   Security
         •   Setup
         •   StreamLoader



                                       4
•      SystemLoader
       •      VideoAnalyzer



StreamLoader
   SecureCam využíva pre prístup k zdrojom videa platformne nezávislú knižnicu
OpenCV vyvinutú firmou Intel, ktorá je určená najmä pre počítačové videnie
v reálnom čase. Zdrojový kód knižnice je dostupný pod licenciou BSD. Pre
efektívne využitie prítomnosti viacerých (jadier) procesorov využíva knižnicu pre
paralelné programovanie v jazyku C++ s názvom OpenMP. Základné triedy a ich
vlastnosti:




                       Obrázok 1 Diagram dedičnosti jednotlivých zdrojov videa.

       •      CameraVideoSource – podporuje všetky druhy kamier, ktoré sú
              operačným systémom rozpoznané ako zdroj videa.
       •      FileVideoSource – podporuje všetky formáty videa, pre ktoré sú
              nainštalované v operačnom systéme korektné video kodeky.
       •      BuffCameraVideoSource – je vstup z kamery, ktorého jednotlivé
              snímky sa vkladajú do vyrovnávacieho buffera.
       •      BufferedFileVideoSource – je vstup z video súboru, ktorého jednotlivé
              snímky sa vkladajú do vyrovnávacieho buffera.




                                                  5
Zápis videa podporuje aplikácia SecureCam tiž (trieda VideoWriter). Vlákna
jednotlivých video zdrojov sú implementované pomocou známeho platformne
nezávislého frameworku pre aplikácie a aplikačné rozhrania QT, ktorý bude ešte
spomenutá najmä v súvislosti s modulom GUI.




                         Obrázok 2 Enumerátor aktívnych zariadení.

      •    DeviceEnumerator – Metoda GetDeviceCount() vracia počet aktívnych
           zariadení pre video v rozpoznaných operačným systémom. Pre zistenie
           prítomnosti zariadení opäť využíva knižnicu OpenCV.

  Továreň modulu StreamLoader poskytuje konštrukciu všetkých spomenutých
  tried.




                          Obrázok 3 Továreň modulu StreamLoader.




                                            6
VideoAnalyzer
   Továreň na objekty poskytuje instancie potomkov troch abstraktných tried,
z ktorých je modul pre spracovanie videa vytvorený: filtrátor videa, obrazový
filter a detektor:




                        Obrázok 4 Továreň modulu VideoAnalyzer.

   Obrazový filter

   Každý filter podporuje množstvo parametrov, aby boli maximálne
prispôsobiteľné vlastnostiam vstupného videa a zachytenej scény ale aj
potrebám užívateľa. Kód každého filtru do veľkej miery využíva funkcie
spomínanej knižnice OpenCV.




                                          7
Obrázok 5 Diagram dedičnosti dvoch obrazových filtrov.

  Detektor

  Detektor je špeciálnym obrazovým filtrom, ktorý okrem zmeny obrazu (nie je
však nutná) dokáže zasielať poplašnému systému správy (metóda SendEvent).
V prípade poplašného syst
                     systému sa jedná o správy typu štart / stop poplach. Pre
potreby aplikácie SecureCam stačí jediný detektor WhiteDetector.




                          Obrázok 6 Diagram dedičnosti detektora.




                                             8
Filtrátor videa




                          Obrázok 7 Diagram dedičnosti filtrátora videa.

   Pracuje s vektorom obrazových filtrov, do ktorého je možné jednotlivé
obrazové filtre v ľubovoľnom čase pridávať (metóda AddImageFilter) a takisto aj
odoberať (metóda RemoveImageFilter). Na vstupné video aplikuje postupne
všetky filtre vo vektore obrazových filtrov.

   Výsledný filtrovaný obraz potom zasiela všetkým príjemcom, ktorý sú u neho
zaregistrovaný (metódy AddVideoStreamAcceptor,
RemoveVideoStreamAcceptor, SetPrimaryAcceptor).

   Táto logika je implementáciou návrhového vzoru „Observer“ a umožňuje
synchrónne rozosielať jednotlivé spracované snímky všetkým zaregistrovaným
príjemcom bez nutnosti aktívneho čakania príjemcov.

   Poslednou funkčnosťou filtrátora je možnosť zvoliť si aký obraz bude
príjemcom rozoslaný po aplikovaní všetkých obrazových filtrov vo vektore
(metóda SetOutput). Môže to byť pôvodný (vstupný) obraz, filtrovaný obraz
a spojený obraz. Ten je zlúčením pôvodného (vstupného) obrazu a filtrovaného
obrazu vo jednom farebnom kanále.


                                                    Filtrátor              Poplašný systém

                             Filtrátor
                                                                           Zobrazenie v GUI
   Vstupný
     obraz
                                                                             Zápis videa
                                                9

                   Obrázok 8 Filtrovanie a distribúcia vstupného obrazu pomocou filtrátorov
Ako je vidieť na obrázku 16, filtrátorov môže byť použitých aj viac, tým pádom
je možné distribuovať rôzne výstupy rôznym príjemcom videa.



SecureCam




                     Obrázok 9 Diagram dedičnosti poplašného systému.

  Základná myšlienka kódu tohto modulu spočíva vo využití návrhového vzoru
„Command“, pomocou ktorého je možné zasielaním príkazov vo forme objektov
(IEvent) z ostatných modulov ovládať celý poplašný systém (OnEvent
a ProcessSelf).

  Udalosti a Logovanie




                           Obrázok 10 Udalosti Start a End Alarm.

  Každá    udalosť   (príkaz),   ktorú     predstavujú        instancie   implementácie
návrhového vzoru „Command“, pomocou ktorých je poplašný systém riadený, je
zaznamenávaná formou logu, ktorý je tvorený dvojicami: dátum a čas, názov




                                            10
udalosti (príkazu). Interface pre zapisovanie logu poskytuje modul SystemLoader
so svojim ILogWriter.

  Poplach

  SecureCam podporuje niekoľko typov (prejavov) poplachu: hlásenie poplachu
zvukom (počas poplachu je opakovane prehrávaný zvolený zvukový súbor),
nahrávanie videa (na HDD sa začne zapisovať vstupné video (IVideoWriter), ktoré
spôsobuje poplach) a zaslanie notifikačného e-mailu, ktoré je realizované
pomocou externej aplikácie (je súčasťou dodávky) s voľnou licenciou
(sendEmail.exe).

  Modul SecureCam teda poskytuje len abstrakciu poplašného systému
(ISecuritySystem) riadeného príkazmi a abstrakciu vstupu poplašného systému
(ISecurityInput), ktorý je zapuzdruje triedy IVideoSource a IVideoStreamFiltrator
modulu VideoAnalyzer.




                          Obrázok 11 Továreň modulu SecureCam.



  Security
  Poskytuje modulu poplašného systému bezpečnú správu hesiel. To znamená,
že heslá sú interne reprezentované 32 bajtovým reťazcom šifrovaného metódou
MD5. Tento modul používa implementáciu šifrovania od RSA Data Security.




                                          11
Obrázok 12 Továreň a jediná vyrábaná trieda (IPassword).



  XML
  Transformuje zostavy poplašného systému (identifikácia zdrojov videa,
obrazové filtre, heslo a iné nastavenia systému) do a z formátu XML. Využíva pri
tom externú knižnicu Tiny XML c++.

  Tento modul implementuje tri I/O triedy, ktorých interface má lan jednu
metódu Write/Read a každá z nich jeden parameter (ISecuritySystem).
IXMLWritel uloží na dané miesto zostavu poplašného systému vo formáte XML.
IXMLReader vytvorí poplašný systém, ktorého zostava je uložená vo formáte
XML na danom mieste. ILogWriter uloží záznamy logu poplašnéh systému na
dané miesto vo formáte XML.




                       Obrázok 13 Tri I/O triedy modulu SystemLoader.

  XML modul jednoducho ukladá, resp. nahráva zostavu poplašného systému
do, resp. zo súboru na HDD. Hierarchia uložených dát (zostavy) je stromovitá, ako
je vidieť aj na nasledujúcom obrázku.




                                             12
Obrazový filter

                                                               Obrazový filter
                                          Zdroj videa
                                                               Obrazový filter

            Poplašný systém               Zdroj videa
                                                               Obrazový filter

                                          Zdroj videa          Obrazový filter

                                                               Obrazový filter

                    Obrázok 14 Štruktúra reprezentácie zostavy poplašného systému




GUI
  Mal by byť modulom, ktorý sa stará nielen o vizuálnu stránku projektu, ale aj
o komfortné používanie celého poplašného systému. Vďaka platformne
nezávislému frameworku pre aplikácie a aplikačné rozhrania Qt, naplnil modul
GUI obe požiadavky relatívne jednoducho. Celý framework je postavený na
architektúre riadenej udalosťami. Zabezpečuje aj množstvo iných platformne
nezávislých utilít (podpora vlákien, synchronizácia vlákien, grafika, štandardné
dialogy...), ktoré aplikácia SecureCam úspešne využíva.




                      Obrázok 15 Hlavné okno aplikácie - SCMainWindow.




                                             13
Hlavné okno aplikácie je rozdelené do troch vizuálnych oblastí, ktoré sú vďaka
dokovaniu jednoducho premiestniteľné v rámci hlavného okna.

  Reprezentácia v kóde

  Každé dialógové okno, widget ale aj hlavné okno aplikácie sú reprezentované
samostatnou triedou, ktorej predka generuje nástrok frameworku Qt „qmake“.
Ten z xml súborov vyjadrujúcich rozloženie, názvy, signály a sloty jednotlivých
ovládacích prvkov vygeneruje kód v jazyku C++.




                    Obrázok 16 Diagram dedičnosti troch tried modulu GUI.




                              Obrázok 17 class DialogCameras.




                                            14
Obrázok 18 class DialogSystemProps.




                              Obrázok 19 class DialogFilters.




                            Obrázok 20 class DialogInputProps.



  Setup
  Na vytvorenie spoľahlivého inštalátora projektu SecureCam, bol použitý
nástroj Inno Setup. Preto je tento modul zastúpený len jedným vstupným
skriptom, ktorý nástroj Inno setup kompiluje do spustiteľného súboru.



                                           15
Kompilácia SecureCam
   Pre úspešné skompilovanie aplikácie SecureCam je nutná prítomnosť
niekoľkých knižníc alebo nástrojov. Verzie jednotlivých knižníc / nástrojov ktoré
aplikácia aktuálne využíva sú uvedené v súbore Doc/VERSIONS.txt. Pre
skompilovanie GUI modulu je nutné pregenerovať GUI.vcproj súbor príkazom
qmake v adresári modulu GUI, aby bol prispôsobený na dané prostredie (cesty
a verzia knižnice Qt).

   Boost    –    Zdrojové   kódy    knižnice    sa   nachádzajú     na    adrese
http://www.boost.org. Knižnicu samotnú nie je nutné kompilovať, keďže väčšina
súborov sú hlavičkové súbory.

   OpenCV – Inštalátor behového prostredia a zdrojových kódov sa nachádzajú
na adrese http://sourceforge.net/projects/opencvlibrary/.

   Qt – SDK známeho frameworku je možné stiahnuť pod duálnou licenciou na
adrese http://www.qtsoftware.com.

   Inno Setup – Free nástroj pre kompiláciu inštalačného skriptu je možné nájsť
na adrese http://www.jrsoftware.org/isinfo.php.




                                        16

More Related Content

Viewers also liked

خالد حشيفان العتيبي
خالد حشيفان العتيبيخالد حشيفان العتيبي
خالد حشيفان العتيبيkhashman
 
Zaproszenie agrotechnika 2016
Zaproszenie agrotechnika 2016Zaproszenie agrotechnika 2016
Zaproszenie agrotechnika 2016Grupa PTWP S.A.
 
Autobazar CZ - Hummer H3 2010 @ www.autobazarcz.com
Autobazar CZ - Hummer H3 2010 @ www.autobazarcz.comAutobazar CZ - Hummer H3 2010 @ www.autobazarcz.com
Autobazar CZ - Hummer H3 2010 @ www.autobazarcz.comMr Man
 
Metabolismus železa
Metabolismus železaMetabolismus železa
Metabolismus železajirihouda
 
Strategie reformy psychiatrické péče - prezentace konference
Strategie reformy psychiatrické péče - prezentace konferenceStrategie reformy psychiatrické péče - prezentace konference
Strategie reformy psychiatrické péče - prezentace konferencePAS MZ CR
 
Absolutoria
AbsolutoriaAbsolutoria
Absolutoriaolc_user
 
Systém akreditačního řízení
Systém akreditačního řízeníSystém akreditačního řízení
Systém akreditačního řízeníMŠMT IPN KVALITA
 
Andragogika pre študentov
Andragogika pre študentovAndragogika pre študentov
Andragogika pre študentovStanislav Suvak
 
Svoboda učení: Peter Gray
Svoboda učení: Peter GraySvoboda učení: Peter Gray
Svoboda učení: Peter GrayTomáš Hajzler
 

Viewers also liked (17)

Z pekingu do_lhasy__1_
Z pekingu do_lhasy__1_Z pekingu do_lhasy__1_
Z pekingu do_lhasy__1_
 
خالد حشيفان العتيبي
خالد حشيفان العتيبيخالد حشيفان العتيبي
خالد حشيفان العتيبي
 
Zaproszenie agrotechnika 2016
Zaproszenie agrotechnika 2016Zaproszenie agrotechnika 2016
Zaproszenie agrotechnika 2016
 
Veckobrev v3
Veckobrev v3Veckobrev v3
Veckobrev v3
 
Autobazar CZ - Hummer H3 2010 @ www.autobazarcz.com
Autobazar CZ - Hummer H3 2010 @ www.autobazarcz.comAutobazar CZ - Hummer H3 2010 @ www.autobazarcz.com
Autobazar CZ - Hummer H3 2010 @ www.autobazarcz.com
 
French 8D
French 8DFrench 8D
French 8D
 
Metabolismus železa
Metabolismus železaMetabolismus železa
Metabolismus železa
 
Strategie reformy psychiatrické péče - prezentace konference
Strategie reformy psychiatrické péče - prezentace konferenceStrategie reformy psychiatrické péče - prezentace konference
Strategie reformy psychiatrické péče - prezentace konference
 
1 basne, bajke
1 basne, bajke1 basne, bajke
1 basne, bajke
 
Absolutoria
AbsolutoriaAbsolutoria
Absolutoria
 
Posilovani-Anatomicky pruvodce
Posilovani-Anatomicky pruvodcePosilovani-Anatomicky pruvodce
Posilovani-Anatomicky pruvodce
 
Systém akreditačního řízení
Systém akreditačního řízeníSystém akreditačního řízení
Systém akreditačního řízení
 
Andragogika pre študentov
Andragogika pre študentovAndragogika pre študentov
Andragogika pre študentov
 
Doprava
DopravaDoprava
Doprava
 
Bullies y víctimas
Bullies y víctimas Bullies y víctimas
Bullies y víctimas
 
Svoboda učení: Peter Gray
Svoboda učení: Peter GraySvoboda učení: Peter Gray
Svoboda učení: Peter Gray
 
Biologická léčba Ca prsu
Biologická léčba Ca prsuBiologická léčba Ca prsu
Biologická léčba Ca prsu
 

Similar to SecureCam Program Guide

SecureCam User Guide
SecureCam User GuideSecureCam User Guide
SecureCam User Guideguest146c167
 
Libraries and tools for C++
Libraries and tools for C++Libraries and tools for C++
Libraries and tools for C++Juraj Michálek
 
Ať se z kódu nepráší!
Ať se z kódu nepráší!Ať se z kódu nepráší!
Ať se z kódu nepráší!Juraj Michálek
 
Vývoj pre Google Android
Vývoj pre Google AndroidVývoj pre Google Android
Vývoj pre Google AndroidJuraj Michálek
 
Bezpečnosť webových aplikácií (Martin Zajíček)
Bezpečnosť webových aplikácií (Martin Zajíček)Bezpečnosť webových aplikácií (Martin Zajíček)
Bezpečnosť webových aplikácií (Martin Zajíček)DCIT, a.s.
 
MTM - Flow3
MTM - Flow3MTM - Flow3
MTM - Flow3tetak
 
Samuel Hopko & Daniel Rajčan - Cloud Computing
Samuel Hopko & Daniel Rajčan - Cloud ComputingSamuel Hopko & Daniel Rajčan - Cloud Computing
Samuel Hopko & Daniel Rajčan - Cloud ComputingDavinci software
 
macroscop prezentacia WIDE security s.r.o
macroscop prezentacia WIDE security s.r.omacroscop prezentacia WIDE security s.r.o
macroscop prezentacia WIDE security s.r.oWIDE security s.r.o.
 
CCNA Semester 1 - Chapter 2
CCNA Semester 1 - Chapter 2CCNA Semester 1 - Chapter 2
CCNA Semester 1 - Chapter 2benniSVK
 
Require.JS & Backbone.JS
Require.JS & Backbone.JSRequire.JS & Backbone.JS
Require.JS & Backbone.JSsrigi
 
Úvod do vývoja pre Windows Phone 7 II
Úvod do vývoja pre Windows Phone 7 IIÚvod do vývoja pre Windows Phone 7 II
Úvod do vývoja pre Windows Phone 7 IIIgor Kulman
 
Diplomová práca - Štúdia pokročilých vlastností operačného systému Solaris
Diplomová práca - Štúdia pokročilých vlastností operačného systému SolarisDiplomová práca - Štúdia pokročilých vlastností operačného systému Solaris
Diplomová práca - Štúdia pokročilých vlastností operačného systému SolarisMatus Kovacik
 
Drupal ako nízkonákladová platforma pre business web aplikácie
Drupal ako nízkonákladová platforma pre business web aplikácieDrupal ako nízkonákladová platforma pre business web aplikácie
Drupal ako nízkonákladová platforma pre business web aplikácieJozef Toth
 

Similar to SecureCam Program Guide (20)

SecureCam User Guide
SecureCam User GuideSecureCam User Guide
SecureCam User Guide
 
Libraries and tools for C++
Libraries and tools for C++Libraries and tools for C++
Libraries and tools for C++
 
There is much more to C
There is much more to CThere is much more to C
There is much more to C
 
PlatformIO - Namakané Arduino IDE
PlatformIO - Namakané Arduino IDEPlatformIO - Namakané Arduino IDE
PlatformIO - Namakané Arduino IDE
 
Ať se z kódu nepráší!
Ať se z kódu nepráší!Ať se z kódu nepráší!
Ať se z kódu nepráší!
 
Vývoj pre Google Android
Vývoj pre Google AndroidVývoj pre Google Android
Vývoj pre Google Android
 
Magsa-generovanie
Magsa-generovanieMagsa-generovanie
Magsa-generovanie
 
Programovanie v C++
Programovanie v C++Programovanie v C++
Programovanie v C++
 
Bezpečnosť webových aplikácií (Martin Zajíček)
Bezpečnosť webových aplikácií (Martin Zajíček)Bezpečnosť webových aplikácií (Martin Zajíček)
Bezpečnosť webových aplikácií (Martin Zajíček)
 
MTM - Flow3
MTM - Flow3MTM - Flow3
MTM - Flow3
 
Samuel Hopko & Daniel Rajčan - Cloud Computing
Samuel Hopko & Daniel Rajčan - Cloud ComputingSamuel Hopko & Daniel Rajčan - Cloud Computing
Samuel Hopko & Daniel Rajčan - Cloud Computing
 
macroscop prezentacia WIDE security s.r.o
macroscop prezentacia WIDE security s.r.omacroscop prezentacia WIDE security s.r.o
macroscop prezentacia WIDE security s.r.o
 
CCNA Semester 1 - Chapter 2
CCNA Semester 1 - Chapter 2CCNA Semester 1 - Chapter 2
CCNA Semester 1 - Chapter 2
 
Mdsd
MdsdMdsd
Mdsd
 
Require.JS & Backbone.JS
Require.JS & Backbone.JSRequire.JS & Backbone.JS
Require.JS & Backbone.JS
 
Prečo symfony2 framework
Prečo symfony2 frameworkPrečo symfony2 framework
Prečo symfony2 framework
 
Úvod do vývoja pre Windows Phone 7 II
Úvod do vývoja pre Windows Phone 7 IIÚvod do vývoja pre Windows Phone 7 II
Úvod do vývoja pre Windows Phone 7 II
 
Php sec
Php secPhp sec
Php sec
 
Diplomová práca - Štúdia pokročilých vlastností operačného systému Solaris
Diplomová práca - Štúdia pokročilých vlastností operačného systému SolarisDiplomová práca - Štúdia pokročilých vlastností operačného systému Solaris
Diplomová práca - Štúdia pokročilých vlastností operačného systému Solaris
 
Drupal ako nízkonákladová platforma pre business web aplikácie
Drupal ako nízkonákladová platforma pre business web aplikácieDrupal ako nízkonákladová platforma pre business web aplikácie
Drupal ako nízkonákladová platforma pre business web aplikácie
 

SecureCam Program Guide

  • 2. Obsah Adresárová štruktúra projektu............................................................................ 3 Špeciality projektu............................................................................................... 3 Návrhové vzory ................................................................................................... 4 Modularizácia ...................................................................................................... 4 StreamLoader ...................................................................................................... 5 VideoAnalyzer ..................................................................................................... 7 Obrazový filter ............................................................................................. 7 Detektor ...................................................................................................... 8 Filtrátor videa .............................................................................................. 9 SecureCam ........................................................................................................ 10 Udalosti a Logovanie ................................................................................. 10 Poplach ...................................................................................................... 11 Security.............................................................................................................. 11 XML.................................................................................................................... 12 GUI..................................................................................................................... 13 Reprezentácia v kóde ................................................................................ 14 Setup ................................................................................................................. 15 Kompilácia SecureCam ...................................................................................... 16 2
  • 3. Adresárová štruktúra projektu Zdrojový kód projektu SecureCam je organizovaný v jednoduchej adresárovej štruktúre. Každý modul (na OS Windows dynamická knižnica .dll) má vlastný podadresár projektového adresára „Source“. Niektoré súbory so zdrojovým kódom obsahujúce globálne deklarácie alebo deklarácie tried výnimiek sú spoločné pre všetky moduly. Tieto sa nachádzajú v podadresári „Shared“ adresára „Source“. Dokumentácia (Doc), externé knižnice (Libs), ukážkové videá (Samples) s skompilované súbory (Build) majú vlastné adresáre v koreni adresárovej štruktúry projektu tiež. • SecureCam o Build o Doc o Libs o Samples o Sounds o Source GUI SecureCam Security Shared StreamLoader SystemLoader VideoAnalyzer Špeciality projektu V jazyku C++ je veľmi ľahké vytvoriť únik pamäte (memory leak), pretože behové prostredie neposkytuje garbage collection a každá naalokovaná pamäť musí byť aj korektne dealokovaná. Aby sa predišlo podobným nepríjemnostiam, tak sa na automatické uvoľňovanie alokovanej pamäte v zdrojovom kóde používa logika smart pointrov. Implementáciu smart pointrov poskytuje platformne nezávislá zbierka utilít a knižníc Boost, ktorej zdrojový kód je dostupný pod Boost licenciou. Pre rýchly prístup k jednotlivým zdrojom videa 3
  • 4. vzhľadom na ich ID využíva hash mapy (navrhovaný štandard tr1) z knižnice boost. Návrhové vzory SecureCam využíva pomerne často vo svojom kóde implementácie návrhových vzorov. Preto sa predpokladá, že čitateľ tohto dokumentu má aspoň základný prehľad terminológie tejto oblasti. Základné návrhové vzory, ktoré SecureCam využíva sú: • Iterator • Observer • Factory method • Abstract factory • Command • Visitor Modularizácia Každý modul je kompilovaný ako dynamická knižnica (.dll) operačného systému Windows. Rozhranie modulov tvoria deklarácie interface-ov tried, ktorých instancie vracia továreň na objekty známa z design patterns ako (abstract) Factory. Každý modul má teda vlastnú továreň, pomocou ktorej propaguje svoju funkčnosť iným modulom. V ďalšom texte bude aplikácia SecureCam detailnejšie popísaná vzhľadom na jednotlivé moduly: • GUI • SecureCam • Security • Setup • StreamLoader 4
  • 5. SystemLoader • VideoAnalyzer StreamLoader SecureCam využíva pre prístup k zdrojom videa platformne nezávislú knižnicu OpenCV vyvinutú firmou Intel, ktorá je určená najmä pre počítačové videnie v reálnom čase. Zdrojový kód knižnice je dostupný pod licenciou BSD. Pre efektívne využitie prítomnosti viacerých (jadier) procesorov využíva knižnicu pre paralelné programovanie v jazyku C++ s názvom OpenMP. Základné triedy a ich vlastnosti: Obrázok 1 Diagram dedičnosti jednotlivých zdrojov videa. • CameraVideoSource – podporuje všetky druhy kamier, ktoré sú operačným systémom rozpoznané ako zdroj videa. • FileVideoSource – podporuje všetky formáty videa, pre ktoré sú nainštalované v operačnom systéme korektné video kodeky. • BuffCameraVideoSource – je vstup z kamery, ktorého jednotlivé snímky sa vkladajú do vyrovnávacieho buffera. • BufferedFileVideoSource – je vstup z video súboru, ktorého jednotlivé snímky sa vkladajú do vyrovnávacieho buffera. 5
  • 6. Zápis videa podporuje aplikácia SecureCam tiž (trieda VideoWriter). Vlákna jednotlivých video zdrojov sú implementované pomocou známeho platformne nezávislého frameworku pre aplikácie a aplikačné rozhrania QT, ktorý bude ešte spomenutá najmä v súvislosti s modulom GUI. Obrázok 2 Enumerátor aktívnych zariadení. • DeviceEnumerator – Metoda GetDeviceCount() vracia počet aktívnych zariadení pre video v rozpoznaných operačným systémom. Pre zistenie prítomnosti zariadení opäť využíva knižnicu OpenCV. Továreň modulu StreamLoader poskytuje konštrukciu všetkých spomenutých tried. Obrázok 3 Továreň modulu StreamLoader. 6
  • 7. VideoAnalyzer Továreň na objekty poskytuje instancie potomkov troch abstraktných tried, z ktorých je modul pre spracovanie videa vytvorený: filtrátor videa, obrazový filter a detektor: Obrázok 4 Továreň modulu VideoAnalyzer. Obrazový filter Každý filter podporuje množstvo parametrov, aby boli maximálne prispôsobiteľné vlastnostiam vstupného videa a zachytenej scény ale aj potrebám užívateľa. Kód každého filtru do veľkej miery využíva funkcie spomínanej knižnice OpenCV. 7
  • 8. Obrázok 5 Diagram dedičnosti dvoch obrazových filtrov. Detektor Detektor je špeciálnym obrazovým filtrom, ktorý okrem zmeny obrazu (nie je však nutná) dokáže zasielať poplašnému systému správy (metóda SendEvent). V prípade poplašného syst systému sa jedná o správy typu štart / stop poplach. Pre potreby aplikácie SecureCam stačí jediný detektor WhiteDetector. Obrázok 6 Diagram dedičnosti detektora. 8
  • 9. Filtrátor videa Obrázok 7 Diagram dedičnosti filtrátora videa. Pracuje s vektorom obrazových filtrov, do ktorého je možné jednotlivé obrazové filtre v ľubovoľnom čase pridávať (metóda AddImageFilter) a takisto aj odoberať (metóda RemoveImageFilter). Na vstupné video aplikuje postupne všetky filtre vo vektore obrazových filtrov. Výsledný filtrovaný obraz potom zasiela všetkým príjemcom, ktorý sú u neho zaregistrovaný (metódy AddVideoStreamAcceptor, RemoveVideoStreamAcceptor, SetPrimaryAcceptor). Táto logika je implementáciou návrhového vzoru „Observer“ a umožňuje synchrónne rozosielať jednotlivé spracované snímky všetkým zaregistrovaným príjemcom bez nutnosti aktívneho čakania príjemcov. Poslednou funkčnosťou filtrátora je možnosť zvoliť si aký obraz bude príjemcom rozoslaný po aplikovaní všetkých obrazových filtrov vo vektore (metóda SetOutput). Môže to byť pôvodný (vstupný) obraz, filtrovaný obraz a spojený obraz. Ten je zlúčením pôvodného (vstupného) obrazu a filtrovaného obrazu vo jednom farebnom kanále. Filtrátor Poplašný systém Filtrátor Zobrazenie v GUI Vstupný obraz Zápis videa 9 Obrázok 8 Filtrovanie a distribúcia vstupného obrazu pomocou filtrátorov
  • 10. Ako je vidieť na obrázku 16, filtrátorov môže byť použitých aj viac, tým pádom je možné distribuovať rôzne výstupy rôznym príjemcom videa. SecureCam Obrázok 9 Diagram dedičnosti poplašného systému. Základná myšlienka kódu tohto modulu spočíva vo využití návrhového vzoru „Command“, pomocou ktorého je možné zasielaním príkazov vo forme objektov (IEvent) z ostatných modulov ovládať celý poplašný systém (OnEvent a ProcessSelf). Udalosti a Logovanie Obrázok 10 Udalosti Start a End Alarm. Každá udalosť (príkaz), ktorú predstavujú instancie implementácie návrhového vzoru „Command“, pomocou ktorých je poplašný systém riadený, je zaznamenávaná formou logu, ktorý je tvorený dvojicami: dátum a čas, názov 10
  • 11. udalosti (príkazu). Interface pre zapisovanie logu poskytuje modul SystemLoader so svojim ILogWriter. Poplach SecureCam podporuje niekoľko typov (prejavov) poplachu: hlásenie poplachu zvukom (počas poplachu je opakovane prehrávaný zvolený zvukový súbor), nahrávanie videa (na HDD sa začne zapisovať vstupné video (IVideoWriter), ktoré spôsobuje poplach) a zaslanie notifikačného e-mailu, ktoré je realizované pomocou externej aplikácie (je súčasťou dodávky) s voľnou licenciou (sendEmail.exe). Modul SecureCam teda poskytuje len abstrakciu poplašného systému (ISecuritySystem) riadeného príkazmi a abstrakciu vstupu poplašného systému (ISecurityInput), ktorý je zapuzdruje triedy IVideoSource a IVideoStreamFiltrator modulu VideoAnalyzer. Obrázok 11 Továreň modulu SecureCam. Security Poskytuje modulu poplašného systému bezpečnú správu hesiel. To znamená, že heslá sú interne reprezentované 32 bajtovým reťazcom šifrovaného metódou MD5. Tento modul používa implementáciu šifrovania od RSA Data Security. 11
  • 12. Obrázok 12 Továreň a jediná vyrábaná trieda (IPassword). XML Transformuje zostavy poplašného systému (identifikácia zdrojov videa, obrazové filtre, heslo a iné nastavenia systému) do a z formátu XML. Využíva pri tom externú knižnicu Tiny XML c++. Tento modul implementuje tri I/O triedy, ktorých interface má lan jednu metódu Write/Read a každá z nich jeden parameter (ISecuritySystem). IXMLWritel uloží na dané miesto zostavu poplašného systému vo formáte XML. IXMLReader vytvorí poplašný systém, ktorého zostava je uložená vo formáte XML na danom mieste. ILogWriter uloží záznamy logu poplašnéh systému na dané miesto vo formáte XML. Obrázok 13 Tri I/O triedy modulu SystemLoader. XML modul jednoducho ukladá, resp. nahráva zostavu poplašného systému do, resp. zo súboru na HDD. Hierarchia uložených dát (zostavy) je stromovitá, ako je vidieť aj na nasledujúcom obrázku. 12
  • 13. Obrazový filter Obrazový filter Zdroj videa Obrazový filter Poplašný systém Zdroj videa Obrazový filter Zdroj videa Obrazový filter Obrazový filter Obrázok 14 Štruktúra reprezentácie zostavy poplašného systému GUI Mal by byť modulom, ktorý sa stará nielen o vizuálnu stránku projektu, ale aj o komfortné používanie celého poplašného systému. Vďaka platformne nezávislému frameworku pre aplikácie a aplikačné rozhrania Qt, naplnil modul GUI obe požiadavky relatívne jednoducho. Celý framework je postavený na architektúre riadenej udalosťami. Zabezpečuje aj množstvo iných platformne nezávislých utilít (podpora vlákien, synchronizácia vlákien, grafika, štandardné dialogy...), ktoré aplikácia SecureCam úspešne využíva. Obrázok 15 Hlavné okno aplikácie - SCMainWindow. 13
  • 14. Hlavné okno aplikácie je rozdelené do troch vizuálnych oblastí, ktoré sú vďaka dokovaniu jednoducho premiestniteľné v rámci hlavného okna. Reprezentácia v kóde Každé dialógové okno, widget ale aj hlavné okno aplikácie sú reprezentované samostatnou triedou, ktorej predka generuje nástrok frameworku Qt „qmake“. Ten z xml súborov vyjadrujúcich rozloženie, názvy, signály a sloty jednotlivých ovládacích prvkov vygeneruje kód v jazyku C++. Obrázok 16 Diagram dedičnosti troch tried modulu GUI. Obrázok 17 class DialogCameras. 14
  • 15. Obrázok 18 class DialogSystemProps. Obrázok 19 class DialogFilters. Obrázok 20 class DialogInputProps. Setup Na vytvorenie spoľahlivého inštalátora projektu SecureCam, bol použitý nástroj Inno Setup. Preto je tento modul zastúpený len jedným vstupným skriptom, ktorý nástroj Inno setup kompiluje do spustiteľného súboru. 15
  • 16. Kompilácia SecureCam Pre úspešné skompilovanie aplikácie SecureCam je nutná prítomnosť niekoľkých knižníc alebo nástrojov. Verzie jednotlivých knižníc / nástrojov ktoré aplikácia aktuálne využíva sú uvedené v súbore Doc/VERSIONS.txt. Pre skompilovanie GUI modulu je nutné pregenerovať GUI.vcproj súbor príkazom qmake v adresári modulu GUI, aby bol prispôsobený na dané prostredie (cesty a verzia knižnice Qt). Boost – Zdrojové kódy knižnice sa nachádzajú na adrese http://www.boost.org. Knižnicu samotnú nie je nutné kompilovať, keďže väčšina súborov sú hlavičkové súbory. OpenCV – Inštalátor behového prostredia a zdrojových kódov sa nachádzajú na adrese http://sourceforge.net/projects/opencvlibrary/. Qt – SDK známeho frameworku je možné stiahnuť pod duálnou licenciou na adrese http://www.qtsoftware.com. Inno Setup – Free nástroj pre kompiláciu inštalačného skriptu je možné nájsť na adrese http://www.jrsoftware.org/isinfo.php. 16