Copyright © Février 2008 Nowicki Christophe
| Historique des versions | ||
|---|---|---|
| Version v0.1 | 2008-01-20 | CN |
| Première version publique. | ||
Table des matières
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).
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
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.
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 :
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.
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.
Pour le choix de la machine qui fera office de serveur de vidéo surveillance, il faut faire attention aux points suivants :
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 :
Les systèmes multi-processeurs (SMP) sont parfaitement exploités par le logiciel, car celui-ci utilise un processus par camèra.
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.
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 :
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 :
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.
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.
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:
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.
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 :
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.
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)
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.
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.
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.
Pour l'installation du système, nous allons nous baser sur une distribution Debian GNU/Linux "etch" fraichement installée.
Zoneminder est une application LAMP, qui nécessite les composants suivants :
Nous allons procèder à l'installation de l'ensemble de ses éléments :
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
Pour tous les autres programmes nous allons utiliser les packages Debian :
#apt-get install mysql-server-5.0 libapache2-mod-php4 php4-mysql ffmpeg
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
Une fois les composants installés, il faut les configurer individuellement :
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';
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'.
Voici les points faibles et les points d'attaque qui j'ai identifié dans cette solution :
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.
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.
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 :
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.
ZoneMinder dispose de plusieurs interfaces utilisateurs supplèmentaires :
Une interface graphique riche écrite en Qt4 permet de se conneter au système de vidéo-surveillance directement à partir de votre bureau : ZMViewer.
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.
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.
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.
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.