# ZoneMinder

ZoneMinder és un programa d'ordinador de vídeo-vigilància que permet capturar, analitzar, enregistrar i visualitzar qualsevol càmera, CCTV (circuit tancat de televisió), càmeres IP, webcams, … connectades a una màquina treballant amb un sistema operatiu basat en Linux.
Aquest programa neix el 25 de setembre del 2002 on es distribueix la primera versió pública (versió 0.0.1), actualment la versió més recent és la 1.23.3 apareguda el 27 d'abril del 2008. Cal destacar que ZoneMinder forma part del món del programari lliure i això facilita molt la seva distribució, ja que és gratuïta i permet modificar la programació gràcies al codi obert per part de gent interessada a millorar el producte.
La base de ZoneMinder és la captura i anàlisis d'imatges, és àmpliament configurable permetent eliminar falses alarmes, possibilitant la definició de zones amb cada càmera i diferent sensibilitat, portant a donar més importància a un lloc que a un altre de la visió de la càmera. Més endavant s'explicaran detalladament totes les opcions possibles.
El control d'aquest programa es fa mitjançant una interfície web on es poden modificar múltiples opcions, veure les alarmes, guardar o eliminar segons convingui entre altres funcions.
Com s'ha esmentat anteriorment, aquesta aplicació està dissenyada per treballar en distribucions de Linux que suportin Video for Linux (v4l). Requereix un base de dades (MySQL), llenguatges de programació (PHP i Perl) i s'executa en un servidor web com pot ser Apache.
ZoneMinder està dissenyat a través de diferents mòduls independents que funcionen únicament quan cal per a minimitzar el recursos de la màquina.

## Requeriments

A nivell de maquinari, ZoneMinder no necessita un gran potencial per treballar, pot arribar a treballar amb un Pentium II però limitant a dos el nombre de càmeres, com més càmeres es vulguin controlar més memòria caldrà per gestionar les tasques. Les càmeres que pot utilitzar ZoneMinder són molt diverses des de webcams fins a càmeres IP que suportin el v4l (Video for Linux). Les llistes següents són els dispositius compatibles amb ZoneMinder coneguts fins avui:
Targetes de captura de vídeo:
* Pico2000 Bt878_4chip_8inputs
* bt878 8 chip 8 input
* Hauppauge
* Ituner Spectra 8
* Linux Media Labs LMLBT44
* Hawkeye
* Avermedia
* TView 95/99
* WinFast TV2000 XP
* Osprey 100
* Grandtec Grand X Guard
* Kodicom 4400r
* Leadtek WinFast VC 100
* Digiflower
* Altres targetes BTTV (bt878, bt848)
Càmeres analògiques:
Qualsevol càmera que es pugui connectar a una targeta de captura de vídeo citada anteriorment.
Càmeres IP:
* D-Link
* Airlink 101
* Conceptronic
* Gadspot GS9603 IP Camera
* Grandtec WLAN Camera WiFi or III
* Intellinet IPCamera
* Level One WCS-1090
* OvisLink AirLive WL-5400CAM
* Panasonic
* Rimax IP Cam 7100 / IP Cam 7200
* Sony SNC-M1 i SNC-M3
* Trendnet TV-IP200 / TV-IP200W, TV-IP300 and the TV-IP400 / TV-IP400W
* Veo Observer IP NetCam / Orite IP-Cam IC-301 / Sweex IP Network Camera JA200010
Càmeres USB (webcams):
* Just Zoom USB cam
* Creative Webcam Pro, Webcam 3
* Logitech QuickCam Express, QuickCam Pro 3000, QuickCam Communicate STX
* Logitech Quickcam Orbit/Sphere
* Philips
* Any OV511
* Any CPIA
* LabTec WebCam Pro
Parlant de programari, si que és indispensable que treballi en un sistema operatiu basat en Linux com pot ser Debian, Ubuntu, RedHat…això no és cap problema, ja que aquests són lliures i, per tant, gratuïts a l'abast de tothom. ZoneMinder també utilitza la base de dades MySQL, el llenguatge Perl i PHP però no comporta cap dificultat, ja que amb la instal·lació del ZoneMinder inclou també aquestes. Cal dir que aquest programa treballa sobre un servidor, el més conegut Apache, això fa que pugui accedir des de qualsevol lloc via internet per modificar la configuració de ZoneMinder via web. Com s'ha citat anteriorment ZoneMinder està format per diferents mòduls. Aquests mòduls principalment són executables binaris compilats que realitzen la principal funció de processament de vídeo, també trobem scripts Perl que ajuden a portar a terme diferents accions i els scripts PHP que són utilitzats per la interfície web. Seguidament s'explicarà cadascun d'aquests mòduls.

## Mòduls de ZoneMinder

Aquests mòduls són els arxius binaris executables i es poden trobar en el directori "usr/bin/".
* zmc és el binari executable que s'encarrega de la captura dels marcs o fotogrames d'imatge el més ràpid com sigui possible.
* zma aquest és l'encarregat de fer l'anàlisi dels fotogrames capturats i controlar el moviment que pugui generar una alarma o succés.
* zmf és un executable opcional que serveix per guardar el marcs al disc dur durant un temps per analitzar-los posteriorment això fa que l'eina d'anàlisi no es saturi.zms aquest realitza la funció de servidor del streaming, és a dir, la de visualitzar el vídeo de la càmera en directe. La interfície web activa aquest mòdul quan es visualitzen les imatges en temps real i es desactiva quan es tanca la web.
* zmu' és una utilitat de ZoneMinder on l'usuari pot enviar comandes a través de la consola del sistema per modificar diferents paràmetres de vídeo. El tipus d'instrucció és: "zmu –m 2(id de la camera) –D(deshabilitar)/-E(habilitar)".
* zmfix aquest binari té la funció d'assegurar que els arxius dels dispositius de vídeo puguin ser llegits pels altres mòduls. Normalment aquests arxius són configurats per només permetre l'accés de la màquina en l'inici del sistema operatiu. Aquest binari s'executa i s'assegura de què disposi dels permisos adequats.
Els següents són scripts amb llenguatge Perl, els quals poden ser modificats per millorar les prestacions i es troben al mateix directori que els anteriors "usr/bin/".
* zmpkg.pl és el script de control dels mòduls, s'utilitza en la interfície web i té la possibilitat que l'usuari enviï comandes per la consola del sistema per controlar l'execució del programa ZoneMinder. Aquestes comandes són les següents: "zmpkg.pl (start/stop/restart)".
* zmdc.pl aquest és l'encarregat de controlar l'execució i la captura dels altres mòduls. També té comandes com "zmdc.pl (start/startup/stop/restart/reload) (zmc/zma/zmf/zmfilter.pl/zmaudit.pl/zmtrigger.pl/zmx10.pl/zmwatch.pl/zmupdate.pl/zmtrack.pl)".
* zmfilter.pl aquest script controla que es guardin el filtres i s'executin segons la seva configuració. Per executar un filtre des de la consola del sistema s'utilitza: "zmfilter.pl –f (nom del filtre)".
* zmaudit.pl té la funció de comprovar l'associació del sistema d'arxius i la base de dades, eliminar arxius d'alarmes que han quedat orfes i verificar que estiguin relacionats correctament.
* zmwatch.pl aquest script controla els altres mòduls i s'encarrega de reiniciar-los en cas de bloqueig.
* zmupdate.pl és l'encarregat de buscar i actualitzar una nova versió del ZoneMinder.
* zmvideo.pl s'utilitza des de la interfície web per generar arxius de vídeo en diversos formats. També es pot utilitzar des de la consola amb les següents comandes:
* zmx10.pl és un script opcional on s'activa mitjançant les opcions corresponents. És utilitzat per una comunicar-se mitjançant el protocol X10 usat en domòtica.
* zmtrigger.pl és un script opcional que s'utilitza per fer un control a distància de diferents opcions del ZoneMinder.
* zmcontrol-*.pl són un conjunt de scripts d'exemple que poden ser utilitzats pel control de càmeres mòbils. En cas que el protocol utilitzat per la càmera no estigues en cap d'aquests scripts caldria crear un basant-se amb els exemples.
* zmtrack.pl és el que controla que la càmera es mogui a la zona de l'alarma i després retorni a la posició original. A part de fer moure la càmera també controla la funció de detecció de moviment activant-la o desactivant-la només quan calgui. Com l'anterior només s'utilitza en cas que es disposi d'una càmera amb la funció de moviment.
A continuació es detalla els mòduls Perl que es troben en el directori "usr/share/perl5/".
* ZoneMinder.pm és l'arxiu que conté tots mòduls que s'explicaran a continuació i conté totes les funcions d'aquests, així doncs utilitzant aquest mòdul en el nostre codi podem fer servir qualsevol funció dels altres.
* Base.pm aquest és el mòdul que conté informació sobre el ZoneMinder. Està inclòs en tots el mòduls Perl de ZoneMinder.
* Config.pm és el mòdul de Perl encarregat d'importar la informació de configuració provinent de la base de dades.
* Debug.pm aquest mòdul conté la depuració i defineix les funcions d'error que són utilitzades en els scripts per informar a l'usuari del funcionament.
* Database.pm inclou les definicions d'accés a la base de dades i funcions. Actualment no és funcional, ja que està en fase de desenvolupament.
* SharedMem.pm aquest arxiu consta de les funcions d'accés a la memòria compartida. Pot ser utilitzat en cas de canviar la configuració de les càmeres.
* ConfigAdmin.pm aquest mòdul conté la informació i les definicions de les diferents opcions de la configuració.
* Trigger/*.pm aquests mòduls enllacen les definicions de l'activació i connexió utilitzades pel zmtrigger.pl. També serveixen com a exemples per ser modificats i especialitzats per diferents interfícies segons ens convingui.

## Enllaços externs

* http://www.zoneminder.com/wiki/ Arxivat 2008-07-19 a Wayback Machine.
* Llista de funcions de ZoneMinder A Shinobi