Mise en place d'un système de vidéo surveillance avec ZoneMinder

Mise en place d'un système de vidéo surveillance IP à l'aide du logiciels libre ZoneMinder

Nowicki Christophe

Permission est accordée de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultérieure publiée par la Free Software Foundation. Pas de section inaltérable.

Historique des versions
Version v0.1 2008-01-20 CN
Première version publique.

Table des matières

Présentation
Problématique
Architecture
Zoneminder
Matèriel
Serveur
Carte d'aquisition
Cameras de vidéo surveillance
Alimentations
Cablage
Budget Total
Installation
Zoneminder
Configuration
Base de données
Apache
Faiblesses de la solution
Voix et enregistrement sonore
Coupure de courant
Vitesse de transfert entre le serveur distant et le système de vidéo surveillance
Idées d'amélioration et fonctionnaliteés avancées
Interaction avec une PABX IP
Interfaces utilisateur
Diffusion des images via le système de TV Perso de la Freebox
Législation

Résumé

L'objectif de ce document est de décrire l'installation et la configuration d'un système de Système de vidéo surveillance "Personnel". Ce système se base sur un serveur de video surveillance tournant sous Debian GNU/Linux et utilisant le logiciel libre Zone Minder.

Le document décrit la procédure complète de mise en place du système (matériel, logiciel, installation et configuration).

Présentation

Problématique

Pour des raisons de sécurité, j'ai voulu faire l'acquisition d'un système de vidéo surveillance, après un rapide tour du marché, je suis arrivé à la conclusion suivante :

La plupart des solutions proposées dans le commerce sont des boîtes noires, disposant de peu de fonctionnalités et qui ne sont pas accessibles pour un particulier ou une PME.

Ces solutions sont baséses sur du matèriel dédié et des logiciels propriètaires.

Une solution basée sur des logiciels libres et du matèriel PC standard, apporte les avantages suivants :

  • Nombreuses fonctionnalités

  • Evolutivité

  • Maîtrise et compréhension du système

  • Maîtrise du coût

Architecture

Le système de vidéo surveillance est architecturé de la manière suivante :

De 1 à 16 caméras de vidéo surveillance sont contrôlées via une carte d'acquisition, celle-ci est branchée directement sur un serveur (ou bien un PC standard). Celui-ci fonctionne à l'aide du système d'exploitation Debian GNU/Linux. L'ensemble de l'installation est piloté par le logiciel ZoneMinder et les vidéos ou événements capturés sont envoyés directement sur un serveur distant.

Zoneminder

Il existe plusieurs solutions de vidéo-surveillance disponible sous GNU/Linux : Motion, Palantir et ZoneMinder.

C'est ce derniere que j'ai souhaité mettre en place, car il dispose des fonctionnalités suivantes :

  • Fonctionne sur toutes les distributions GNU/Linux ;
  • Supporte aussi bien des caméras analogiques, des webcams et des caméras réseaux ;
  • Dispose d'une interface web de contrôle et de visualisation des événements ;
  • Permet d'envoyer à l'aide du protocole FTP ou SMTP, les événements sur une machine distante ;
  • L'interface est traduite dans plusieurs langues dont le français.

Le logiciel est composé de plusieurs éléments écrits en C++, Perl et PHP. Les données sur les événements sont stockées dans une base de données MySQL et les images capturées par les caméras sous forme de fichiers au format JPEG sur le disque dur.

Matèriel

Pour mettre en place ce système, les éléments suivants sont nécessaires : un serveur, une carte d'acquisition, des caméras, des alimentations et du câble. Dans ce document, je décrits la configuration du système de vidéo surveillance que j'ai mis en place à titre personnel. Cette configuration a été remise au goût du jours, car mon installation à plus d'un an et certains composants ne sont plus trouvables dans le commerce.

Cette configuration est donnée à titre d'exemple, l'installation d'un système de vidéo surveillance est assez complexe et nécessite parfois de tâtonner. Dans chaque section de ce document, j'essaye de vous donner des informations pour dimensionner votre système.

Serveur

Pour le choix de la machine qui fera office de serveur de vidéo surveillance, il faut faire attention aux points suivants :

Processeur

Pour le choix du processeur, les points les plus importants sont la consommation électrique et la puissance du processeur. En effet, dans la plupart des cas votre machine fonctionnera 24h sur 24h et avec un processeur qui ne prend pas en charge la gestion de l'énergie, la facture risque de devenir rapidement salée.

Pour cette raison, j'ai choisi un processeur de type Pentium M pour ordinateur portable. Car ces processeurs consomment peu d'énergie, produisent peu de chaleur et fournissent une bonne puissance de calcul.

Une architecture basée sur un Pentium M est difficile à obtenir pour le grand publique, et les processeurs Code 2 Duo, fournissent les même caractéristiques aujourd'hui.

Le système de vidéo surveillance nécessite de la puissance processeur pour la capture et l'analyse des images. La puissance nécessaire varie fortement en fonction :

  • du type d'images (couleur ou noir et blanc)
  • de la taille des images
  • du nombre d'images par secondes
  • du nombre de caméras de vidéo surveillance

Les systèmes multi-processeurs (SMP) sont parfaitement exploités par le logiciel, car celui-ci utilise un processus par camèra.

Mémoire

Zoneminder utilise fortement le système de mémoire partagée entre processus (SHM, Shared Memory) pour échanger les images entre les différents composants du système. Pour connaître la quantité de mémoire partagée nécessaire à votre système, il faut utiliser la formule suivante :

(Nombre de pixels contenus dans l'image) x (Nombre de couleurs dans l'image) x (Nombre d'images dans le tempon de capture) x (Nombre de caméras) x 1.1

Par exemple, pour 4 caméras qui capturent des images d'une résolution de 384x288 en 24bit, avec un tompon de 80 images :

4 x ( 384 x 288 ) x 24 x 80 x 1.1 = 934281216 bits, soit 116785152 kB, soit 114 MB.

Un autre exemple, pour 4 caméras qui capturent de images d'une résolution de 640x480 en 24bit, avec un tompon de 80 images :

4 x ( 640 x 480 ) x 24 x 80 x 1.1 = 2595225600 bits, soit 324403200 kB, soit 316 MB.

Pour des raisons évidentes de performance, les pages de mémoire partagée doivent être obligatoirement stockées en mémoire vive. A cette utilisation mémoire, il faut ajouter la mémoire utilisée par les autres applications telles que : Apache, PHP et MySQL.

Pour cette raison, 1Go de mémoire vive est un minimum raisonnable pour ZoneMinder.

Stockage

L'ensemble des images capturées par le système de vidéo-surveillance est stocké sur le disque dur du serveur. Pour connaître, l'espace disque nécessaire, il vous suffit de télécharger, la feuille de calcul disponible sur le site de ZoneMinder :

Storage Calc

La formule utilisé par cette feuille de style est la suivante :

(Nombre d'images par secondes) x (Nombre de caméras) x (Taille de l'image) x (Temps)

L'élément le plus important du calcul est la taille de l'image, voici quelques exemples :

  • Image couleur 384 x 288 en 8bit : 24ko
  • Image couleur 384 x 288 en 24bit : 44ko
  • Image couleur 640 x 480 en 8bit : 64ko
  • Image couleur 640 x 480 en 24bit : 96ko

Si on utilise, un système qui capture sur 24h, 10 images par secones, à l'aide de 4 caméras dans une résolution de 640 x 480 en 24bit, cela donne :

10 x 4 x 96 x 86400 = 331776000ko, soit 316 Go

Comme en peut le constater l'espace disque nécessaire est très important.

Une petite astuce, pour gagner de la place sur cette espace de stockage et de lancer périodiquement le programme jpegoptim.

Attention : par défault ZoneMinder conserve tous les évènements capturés, je vous conseille vivement de mettre en place une routine qui efface automatiquement les anciens événements.

Carte d'aquisition

Pour faire l'aquisition d'un carte de vidéo surveillance, je vous conseille de vous rendre sur le site de Blue Cherry. Ce fabriquant propose de nombreuses réferences. La plupart des cartes d'aquisition proposéees sur ce site se base sur le chipset BT878. Ces cartes ne nécessitent aucune installation de drivers, elle sont directement prise en compte par le noyau via le driver BTTV.

Cameras de vidéo surveillance

Voici quelques notions et points qu'il faut prendre en considération lors du choix d'un modèle de camèra de vidéo-surveillance:

Capteurs CMOS ou CDD?

Il existe deux principaux types de capteurs pour les caméras de vidéo-surveillance : CMOS et CCD.

La qualité de l'image varie fortement en fonction du type et de la qualité du circuit électronique. Mais dans la pratique on peut dire que les caméras qui utilisent des capteurs de type CCD sont plus chères, plus consommatrices d'énergie mais de meilleure qualité. Les capteurs CMOS sont réservées au marché d'entrée de gamme. Mais attention, cela n'est pas forcément vrai dans tous les cas, car il existe d'excellentes caméras CMOS, en règle générale ces caméras sont aidées par le traitement numérique des données.

Type de camèra (analogique, USB ou réseau)?

Zoneminder prend parfaitement en charge ces trois types de caméras. Mais mon choix s'est porté vers des caméras de type analogique pour les raisons suivantes :

  • Le prix des camèra de vidéo surveillance réseau est prohibitif.
  • Le drivers des webcams sous Linux ne sont pas tous de bonne qualité (problème de fiabilité du driver, problème de vitesse de capture, etc...)

Capteurs Noir/Blanc ou Couleurs?

En terme de ressources, des images en couleurs nécessitent 3 à 4 fois plus de résources en terme de puissance CPU, mémoire et espace disque. Et la couleur n'apporte que peu de bénéfices en terme d'identification.

Donc, dans 80% des cas une camèra Noir/Blanc couvrrira vos besoins.

Camèra filaire ou sans-fils?

Les fabriquants proposent des camèra sans fils. qui utilisent les ondes radio pour transfmettre les images.

Les systèmes sans-fils présentent peu d'interêt, car il ne présentent que peu de garanties au niveau de la sécurité.

C'est à vous de choisir si vous voulez quelques cables dans votre maison ou bien votre tête sur la télévision de votre voisin ;0)

Alimentations

Pour alimenter les caméras analogiques, il faut utiliser un transformateur. Les deux principales caractéristiques à prendre en compte sont l'ampérage et le voltage. La plupart des caméras nécessitent une alimentation stabilisée et un courant continu.

Cablage

La connexion entre la caméra et la carte d'aquisition est réalisée à l'aide de câbles vidéos analogiques de type BNC (75 Ohms) ou bien RCA.

Vous pouvez changer le type d'extrémité avec des adaptateurs : RCA vers BNC et BNC vers RCA.

Le meilleur choix pour le cablage est de prendre un câble qui fait à la fois l'image et l'alimentation. Cela permet de n'avoir qu'un seul câble par caméra.

Budget Total

Voilà le budget de mon déploiement :

Tableau 1. Budget de l'installation

Composant Produit retenu Acheté chez Prix unitaire TTC Quantité Total TTC
CPU Intel® Core 2 Duo E6750 Materiel.net 170 € 1 170 €
Carte mère Intel® DG33FB Materiel.net 100 € 1 100 €
Mémoire Corsair Twin2X 2 x 1 Go DDRII PC6400 Materiel.net 52 € 1 52 €
Disque dur Seagate Barracuda 7200.10 SATA - 250 Go - 16 Mo Materiel.net 62 € 1 62 €
Boîtier Cooler Master Elite RC-332 Materiel.net 35 € 1 35 €
Alimentation PC Antec Earthwatts 380 Materiel.net 45 € 1 45 €
Onduleur MGE O.P.S. Protection Center 500 USB Materiel.net 110 € 1 110 €
Carte d'aquisition PV-153 - 4 port video, 4 port audio capture card (120FPS) Bluecherry 160 $ 1 160 $
Camera de vidéo-surveillance Mini-caméra CCD couleur avec support Conrad électronique 105 € 4 420 €
Alimentation pour camèra Série d'alimentation P2EFSW3 - 12VDC 500mA Conrad électronique 24 € 4 96 €
Cable Cable de 20M pour caméra analogique (BNC + Alim) Abix 42 € 4 168 €

A ce budget, il faut ajouter 10% pour ce qui concerne les frais de port et de douane.

Installation

Pour l'installation du système, nous allons nous baser sur une distribution Debian GNU/Linux "etch" fraichement installée.

Zoneminder

Zoneminder est une application LAMP, qui nécessite les composants suivants :

  • Apache
  • MySQL
  • PHP
  • FFMpeg
  • libjpeg

Nous allons procèder à l'installation de l'ensemble de ses éléments :

Compilation de libjpeg avec le support des instructions MMX

La bibliothèque jpeg de Debian est compilée pour une architecture i386, par conséquent les instructions MMX sont désactivées dans le paquet Debian. C'est extrêmement gênant car l'absence de ces instructions pénalise les performances du processus de capture des images au format JPEG. Par conséquent il est nécessaire de re-compiler le package Ubuntu (libjpeg-mmx) à l'aide des instructions suivantes :

    #cd /usr/src
    #apt-get install build-essential dpkg-dev wget gcc-3.3
    #wget http://archive.ubuntu.com/ubuntu/pool/universe/libj/libjpeg-mmx/libjpeg-mmx_0.1.5-4.dsc
    #wget http://archive.ubuntu.com/ubuntu/pool/universe/libj/libjpeg-mmx/libjpeg-mmx_0.1.5.orig.tar.gz
    #wget http://archive.ubuntu.com/ubuntu/pool/universe/libj/libjpeg-mmx/libjpeg-mmx_0.1.5-4.diff.gz
    #dpkg-source -x libjpeg-mmx_0.1.5-4.dsc
    #cd libjpeg-mmx-0.1.5
    #CC=gcc-3.3 dpkg-buildpackage -b
    #dpkg -i ../libjpeg-mmx-dev_0.1.5-4_i386.deb

Installation des packages Debian

Pour tous les autres programmes nous allons utiliser les packages Debian :

    #apt-get install mysql-server-5.0 libapache2-mod-php4 php4-mysql ffmpeg

Compilation de Zoneminder

Pour la compliation et l'installation de ZoneMinder, il faut procèder de la manière suivante :

    #apt-get install dh-make-perl
    #dh-make-perl --install  --cpan PHP::Serialization

    #apt-get install g++-3.3 libsys-syslog-perl libdbi-perl libdbd-mysql-perl \
        libtime-hires-perl libdate-manip-perl libmodule-load-perl libarchive-tar-perl libarchive-zip-perl \
        libdevice-serialport-perl libmime-perl libwww-perl libphp-serialization-perl
    #cd /usr/src
    #wget http://www2.zoneminder.com/downloads/ZoneMinder-1.23.1.tar.gz
    #tar xzf ZoneMinder-1.23.1.tar.gz
    #cd ZoneMinder-1.23.1
    #CXX=g++-3.3 CC=gcc-3.3 ./configure \
        --with-webdir=/var/www --with-webuser=www-data --with-webgroup=www-data --with-cgidir=/usr/lib/cgi-bin \
        --with-libarch=lib --disable-debug --disable-crashtrace --with-mysql=/usr  --with-ffmpeg \
        --with-extralibs= --includedir=/usr/include --prefix=/usr --sysconfdir=/etc
    #make
    #make install

Configuration

Une fois les composants installés, il faut les configurer individuellement :

Base de données

Le schèma de la base de données se trouve dans le répértoire db, du package zoneminder. Il faut initialiser la base mysql à l'aide du fichier zm_create.sql :

    #mysql < /usr/src/ZoneMinder-1.23.1/db/zm_create.sql
    #mysql
    mysql>use mysql;
    mysql>CREATE USER 'zmuser' IDENTIFIED BY 'zmpass';
    mysql>GRANT ALL ON zm.* TO 'zmuser'@'localhost';
        

Apache

Dans le répertoire /etc/apache2/site-available, vous pouvez créer le fichier zone, pour y mettre la configuration du site :


<VirtualHost *:80>
        ServerName zonemainder.domain.tld

        DocumentRoot /var/www

        ScriptAlias /cgi-bin /usr/lib/cgi-bin
</VirtualHost>

          

Puis activer la configuration à l'aide des commandes suivantes :

    #a2ensite zone
    #/etc/init.d/apache2 reload
          

Vous pouvez vous connecter sur l'interface du logiciel à l'aide de l'URL du type : http://zonemainder.domain.tld

Le login et mots de passe par défault de l'application est : 'admin', 'admin'.

Faiblesses de la solution

Voici les points faibles et les points d'attaque qui j'ai identifié dans cette solution :

Voix et enregistrement sonore

Certaines caméras de vidéo-surveillance disposent de microphone omni-directionnel de bonne qualité qui permettent d'enregistrer les différents bruits. Malheureusement ZoneMinder ne dispose d'aucune fonctionnalité en matière de détection de bruits et enregistrement sonore.

La gestion de l'audio est sur la feuille de route du projet.

Coupure de courant

En cas de coupure de l'alimentation électrique, l'enregistrement des événements est arrêté et le système est neutralisé.

La meilleurs solution pour palier à ce problème est d'équiper l'ensemble de l'installation d'Onduleurs.

Vitesse de transfert entre le serveur distant et le système de vidéo surveillance

Zoneminder ne prend pas en charge le streaming des événements, lorsqu'un événement donne lieu à une alerte, celui-ci attend la fin de l'enregistrement pour le transférer sur le serveur. En moyenne, avec mon installation, un événement donne lieu à un fichier de 50Mo et le transfert de ce fichier vers le serveur distant prend en moyenne plus de 5 minutes.

Cette limitation est liée à la vitesse d'upload de ma connexion ADSL.

Les solutions envisagables sont les suivantes :

  • Réduction de la qualité des images, permet de réduire la taille des archives.
  • Encodage sous forme de vidéo, nécessite beaucoup de puissance CPU, pour un résultat final peu convaincant, en effet, l'encodage de la vidéo peut prendre plus de temps que l'upload de l'archive.
  • Augmentation de la bande passante, nécessite un investissement dans une ligne de type SDSL.

Idées d'amélioration et fonctionnaliteés avancées

Interaction avec une PABX IP

Il serait intéressant de pouvoir accèrder aux enregistrements via un système de téléphonie.

Asterisk dispose de peu de fonctionnalités en matière de vidéo. Il ne dispose pas d'un système de "transcodage", il faut donc que les vidéos envoyées aux clients soit directement comprehensibles par ceux-ci.

Il n'est pas possible à l'heure actuelle d'interconnecter les deux systèmes.

Interfaces utilisateur

ZoneMinder dispose de plusieurs interfaces utilisateurs supplèmentaires :

ZoneMinder Viewer

Une interface graphique riche écrite en Qt4 permet de se conneter au système de vidéo-surveillance directement à partir de votre bureau : ZMViewer.

MythZoneMinder

Le projet MythZoneMinder, propose un plugin pour MythTV, celui-ci permet de visualiser les événements directement sur l'interface d'un système multi-média basé sur MythTV.

Xlib SHM

Le programme Xlib SHM, permet d'affiché sous X, les images capturées par ZoneMinder, en allant les chercher directement dans la mémoire partagé. Cela permet d'affiché en local sur la machine les images en utilisant très peu de ressources CPU.

Diffusion des images via le système de TV Perso de la Freebox

Free propose à ses abonnés de diffuser des flux vidéo à l'aide du terminal Freebox. Il suffit de brancher la carte vidéo (S-Video) de votre serveur directement sur la Freebox pour diffuser en direct les images du systèmes de vidéo-surveillance dans un cadre restreint.

Législation

Voici un raccourci rapide sur les obligations et les possiblités offertes par la législation Francaise :

Dans le cadre d'un lieu privé, les caméras ne doivent pas filmer à l'extérieur de votre propriété, même derrière la vitre d'une fenêtre privée. L'utilisation des caméras à l'intérieur d'une propriété relève du droit à l'image. Vous avez le droit de filmer le personnel employé dans votre maison (Babysitter, agent d'entretiens, etc...) à la seule condition que celui-ci en soit dûment informé par écrit.

Dans le cadre d'un lieu de travail, la législation est beaucoup plus réstrictive, l'installation du système de vidéo surveillance nécessite l'aval de plusieurs authorités (représantant du personnel, préfecture, CNIL, etc...). La partie administrative d'un projet de vidéo surveillance est complexe et lourde dans le cas d'une entreprise.