Le Blog de C-quad

Mise en place d’un système de vidéosurveillance – 2ème partie : Zoneminder

Cet article a pour but de mettre en place un système de vidéo-surveillance avec Zoneminder. Comme vu précédemment pour le choix du matériel, je dispose de caméras extérieures analogiques et intérieures ainsi que d’une carte d’acquisition.

Pourquoi Zoneminder ?

L’objectif n’est pas uniquement de pouvoir visualiser les caméras, mais de :

  • détecter les mouvements sur une caméra
  • enregistrer une séquence vidéo sur un évènement
  • être prévenu en cas d’évènement (par mail par exemple)
  • interagir avec la maison (domotique)

A ma connaissance, seul ZoneMinder rempli toutes ces fonctionnalités en étant un logiciel open source bien entendu.

Installation de ZoneMinder

L’installation de ZoneMinder se fera grâce à yum comme d’habitude.

# yum install zoneminder

================================================================================
 Paquet                      Architecture
 Version               Dépôt       Taille
================================================================================
Installation:
 zoneminder                  x86_64     1.24.2-5.fc14         fedora      1.2 M
Installation pour dépendance:
 mysql-libs                  x86_64     5.1.55-1.fc14         updates     1.2 M
 perl-Archive-Tar            noarch     1.64-1.fc14           fedora       64 k
 perl-Archive-Zip            noarch     1.30-3.fc14           fedora      107 k
 perl-Compress-Raw-Bzip2     x86_64     2.030-1.fc14          fedora       31 k
 perl-Compress-Raw-Zlib      x86_64     2.030-1.fc14          fedora       58 k
 perl-Convert-BinHex         noarch     1.119-13.fc14         fedora       43 k
 perl-DBD-MySQL              x86_64     4.017-1.fc14          fedora      136 k
 perl-DBI                    x86_64     1.613-1.fc14          fedora      776 k
 perl-Date-Manip             noarch     6.07-3.fc14           fedora      1.2 M
 perl-Device-SerialPort      x86_64     1.04-8.fc14           fedora       64 k
 perl-Email-Date-Format      noarch     1.002-7.fc14          fedora       16 k
 perl-HTML-Parser            x86_64     3.68-1.fc14           fedora      111 k
 perl-HTML-Tagset            noarch     3.20-5.fc14           fedora       16 k
 perl-IO-Compress            noarch     2.030-1.fc14          fedora      216 k
 perl-IO-Socket-SSL          noarch     1.38-1.fc14           updates      71 k
 perl-IO-Zlib                noarch     1:1.10-141.fc14       updates      31 k
 perl-IO-stringy             noarch     2.110-13.fc14         fedora       69 k
 perl-MIME-Lite              noarch     3.027-4.fc14          fedora       89 k
 perl-MIME-Types             noarch     1.28-3.fc14           fedora       32 k
 perl-MIME-tools             noarch     5.428-2.fc14          fedora      249 k
 perl-MailTools              noarch     2.07-1.fc14           fedora      102 k
 perl-Module-Load            noarch     1:0.16-141.fc14       updates      26 k
 perl-Net-LibIDN             x86_64     0.12-4.fc14           fedora       35 k
 perl-Net-SMTP-SSL           noarch     1.01-5.fc14           fedora      8.1 k
 perl-Net-SSLeay             x86_64     1.36-2.fc14           fedora      173 k
 perl-PHP-Serialization      noarch     0.27-5.fc14           fedora       11 k
 perl-Package-Constants      noarch     1:0.02-141.fc14       updates      25 k
 perl-TimeDate               noarch     1:1.20-2.fc14         fedora       42 k
 perl-URI                    noarch     1.54-2.fc14           fedora      102 k
 perl-YAML-Syck              x86_64     1.07-4.fc14           fedora       75 k
 perl-libwww-perl            noarch     5.837-2.fc14          updates     386 k
 php                         x86_64     5.3.5-1.fc14          updates     1.1 M
 php-cli                     x86_64     5.3.5-1.fc14          updates     2.2 M
 php-common                  x86_64     5.3.5-1.fc14          updates     527 k
 php-mysql                   x86_64     5.3.5-1.fc14          updates      78 k
 php-pdo                     x86_64     5.3.5-1.fc14          updates      76 k
Mise à jour pour dépendance:
 perl                        x86_64     4:5.12.3-141.fc14     updates      11 M
 perl-Module-Pluggable       noarch     1:3.90-141.fc14       updates      38 k
 perl-Pod-Escapes            noarch     1:1.04-141.fc14       updates      31 k
 perl-Pod-Simple             noarch     1:3.13-141.fc14       updates     210 k
 perl-libs                   x86_64     4:5.12.3-141.fc14     updates     594 k
 perl-threads-shared         x86_64     1.32-141.fc14         updates      51 k

Résumé de la transaction
================================================================================
Install      37 Package(s)
Upgrade       6 Package(s)

Taille totale des téléchargement : 23 M

Jusqu’à présent, je n’ai jamais rien eu à redire sur la qualité des paquets installés sous Fedora, mais malheureusement je trouve que celui-ci n’est pas à la hauteur :

On constate bien qu’un serveur mysql est nécessaire au fonctionnement de ZoneMinder, mais mysql ne figure pas parmi les dépendances. Cela pourrait s’expliquer si l’utilisateur avait le choix d’installer ZoneMinder sur une autre base de données (postgreSQL par exemple) mais cela ne semble pas être le cas.

Il est donc nécessaire d’installer mysql comme détaillé dans un précédent article.

Une fois cela réalisé, il est nécessaire de suivre les instructions renseignées dans /usr/share/doc/zoneminder-1.24.2/README.Fedora

Mise en place de la base de données de ZoneMinder :

Si vous avez sécurisé votre installation de mysql, il est nécessaire de vous authentifier pour exécuter les commandes fournies dans README.Fedora :

$ mysql -u root -p mysql < /usr/share/zoneminder/db/zm_create.sql
$ mysqladmin -u root -p reload

Par défaut zoneminder est désactivé dans son fichier de configuration, nous allons donc éditer /etc/httpd/conf.d/zoneminder.conf :

Alias /zm "/usr/share/zoneminder/www"
<Directory "/usr/share/zoneminder/www">
 Options -Indexes MultiViews FollowSymLinks
 AllowOverride All
 Order allow,deny
 Allow from all
Deny from all # DELETE THIS LINE
</Directory>

Nous rechargeons ensuite la configuration apache :

# service httpd reload

Paramétrage php

Malheureusement toutes ces actions ne sont pas suffisantes, si vous essayer d’accèder à votre installation de Zonemider située sous localhost/zm vous obtiendrez cette erreur :

[error] [client 127.0.0.1] PHP Parse error:  syntax error, unexpected $end in /usr/share/zoneminder/www/includes/functions.php on line 2309

Cela provient de la directive short_tag dans /etc/php.ini :

;short_open_tag = Off
short_open_tag = On

Cette fonctionnalité permet d’interpréter les tags <? et ?> comme des tags php <?php et ?>. Cette possibilité date des premières versions de php et a été retirée par la suite pour améliorer la qualité du parseur de php.

Pour que cette modification de php.ini soit prise en compte il est nécessaire de le faire savoir à apache :

# service httpd reload

Petits problèmes sur le paquet

SELinux

Vous devriez désormais avoir une application zoneminder accessible, mais qui va déclencher pas mal d’alertes SELinux. Il est pour l’instant nécessaire de désactiver SELinux pour ZoneMinder.

Un bug existe sur ce sujet : https://bugzilla.redhat.com/show_bug.cgi?id=611016

J’ai proposé mon aide au mainteneur, mais pour l’instant je n’ai pas eu de retour.

Cambozola

ZoneMinder fait appel à cambozola, un application open source développée en java qui permet de mettre en place un client/serveur de streaming video. Le souci c’est que cette application devrait être dans un autre paquet et non directement dans le paquet ZoneMinder.

J’ai donc déposé un bug sur ce sujet :https://bugzilla.redhat.com/show_bug.cgi?id=654052 et réalisé un paquet pour cambozola (voir mes paquets).

Néanmoins, ZoneMinder pour pouvoir être intégré aux dépôts officiels Fedora n’inclut pas ffmpeg et donc la capture des caméras se fait en mode jpeg. Je constate donc, sauf erreur de ma part, que cambozola ne sert pas en l’état.

Mise en place des caméras

Ma maison est neuve avec des peintures toutes fraiches et les caméras étant analogiques, il faut qu’un cable relie l’ordinateur à toutes les caméras. Il était bien sur hors de question, que des câbles soient visibles dans et à l’extérieur de la maison. Et autant que possible, je voulais des caméras qui soient assez discrètes.

les caméras sont donc placées sous l’avancée de toit, elles seront donc plutôt protégée de la pluie. Et j’en ai profité pour faire passer les câbles directement sous les tuiles.

Voici donc la caméra située à l’entrée de la maison :

Caméra Exterieure Entrée

La caméra qui donne derrière est encore plus discrète :

Caméra extérieure arrièreQuand à la caméra située dans le garage,  la discrétion n’était pas l’objectif premier, c’était plutôt de couvrir la plus grande superficie. la caméra est donc plutôt visible :

Caméra GarageLes lumières bleues sont en réalité les LED infrarouge qui ne sont pas aussi voyante « en vrai avec un œil humain ».

Configuration de la carte d’acquisition

Afin de pouvoir utiliser correctement la carte d’acquisition, c’est à dire que les 8 chipset BT878a soient reconnus, il est nécessaire de le spécifier dans le fichier /etc/modprobe.d/bttv.conf :

$ cat /etc/modprobe.d/bttv.conf
options i2c-algo-bit bit_test=1
options bttv gbuffers=16 card=102,102,102,102,102,102,102,102 radio=0,0,0,0,0,0,0,0 tuner=4,4,4,4,4,4,4,4 chroma_agc=1 combfilter=2 full_luma_range=1 coring=1 autoload=0

Configuration de ZoneMinder

Une fois l’installation terminée vous devriez avoir ZoneMinder fonctionnel à l’adresse suivante http://localhost/zm.

Je vous conseille d’aller regarder la page « options », elles sont très nombreuses et certaines sont encore obscures pour moi.

Pour ajouter une caméra, il faut faire « Add New Monitor » :

On y renseigne le nom que l’on veut donner au moniteur, si la caméra est locale ou distante:

  • On choisira local pour une caméra reliée directement à l’ordinateur
  • et distante (remote) pour les caméras IP

Dans mon cas c’est des caméras locales, il faut donc ensuite configurer dans l’onglet « source » le chemin pour accéder aux caméras :

 

Une fois les moniteurs sur les caméras ajoutés, vous devriez les voir apparaitre sur l’écran principal. ils ne doivent pas être rouge quand ils sont activés sinon c’est qu’il y a un souci.

Sur l’écran principal, le lien « Montage » permet d’avoir une vue regroupant toutes vos caméras :

On constate clairement que la qualité des caméras varie beaucoup, les caméras exterieures sont de bien meilleures factures que les caméras intérieures. Pour seulement 5 € d’écart les caméras extérieures qui présentent l’avantage d’être étanche sont nettement plus avantageuse.

Reste à faire

  • Recevoir les alertes quand un évènement est déclenché
  • Interconnecter ZoneMinder avec une alarme pour faciliter la mise à jour de son statut en fonction de l’état de l’alarme.

 

12 réponses à to “Mise en place d’un système de vidéosurveillance – 2ème partie : Zoneminder”

    • CedricOLIVIER:

      Effectivement motion permet la détection sur une ou plusieurs caméras. Je ne l’ai pas choisi parce qu’il me manquait une interface web pour contrôler les caméras et les envois par ftp ou mail sont à réaliser soit même.
      Par contre, motion étant plutôt un moteur de détection qui tourne en ligne de commande, il y peut-être une interface qui remplisse les fonctionnalités qui me manquent, mais je n’en ai pas trouvé (sans avoir beaucoup cherché je l’avoue).

  • Superbe réalisation !

    Merci pour ces articles ! Maintenant que tu l’as fait, je vais surement m’y mettre :p !

    PS : sympa ta maison 😀 !!!!

  • MichaDo:

    Bonjour,

    magnifique installation et vos deux articles sont très instructifs.
    Je les garde sous le coude pour les employer à mon tour.

    Pourrions-nous avoir un retour sur vos installations ?
    Avez-vous avancé sur vos « reste à faire » ?

    Cordialement

    Micha

    • CedricOLIVIER:

      Merci beaucoup.

      Concernant le retour sur mes installations après 1 mois d’exécution, l’utilisation de caméras analogiques n’est vraiment pas un problème. La qualité des caméras intérieures aurait pu être meilleure, je préfère de loin les extérieures.
      J’ai essayé pour éviter les câbles l’utilisation d’un transmetteur sans fil (pour télévision), cela fonctionne, mais je le déconseille. Effectivement quand il y a des interférences, cela déclenche l’enregistrement dans Zoneminder et je ne vois aucun moyen de l’éviter. Résultat des courses, je me suis retrouvé avec pleins d’enregistrement parasites qui m’ont obligé à passer un câble supplémentaire.

      Pour le reste à faire, je n’ai malheureusement pas avancé depuis. Je ne suis pas encore fixé sur le choix de l’alarme compatible…

  • Bonjour,
    depuis plus d’un ans, j’essai de mettre en place le meme systeme., J’ai des soucis avec des parasite sur mes cameras, dés lors que j’en parametre plus d’une. les images de l’une apparaissent sur l’autre ou se chevauchent. ce qui fait que j’ai enormement ce declancement. donc saturation du disque.
    auriez vous un piste.
    mon systeme fonction sur un celeron D a 2,8ghz, 1g ram, HDD1 80go, HDD2 250 Go ( la ou sont stocker les videos)
    le tous sur un ubuntu server 10.04 LTS
    je peu meme voir les video en live sur mon nokia N8 avec l’application ipCamera.
    pour les alertes d’intrusion, j utilise des detecteur PIR, connecter sur un réseau 1-wire., pour le moment toujours en phase experimentale, ca marche pas trop mal.
    j’ai un onduleur pour preserver l’ensemble en cas de coupure electrique.

    • CedricOLIVIER:

      Les caméras sont des caméras analogiques branchées à une carte d’acquisition ?

      Si c’est bien le cas, il faut voir du coté du fichier /etc/modprobe.d/bttv.conf si c’est ce chipset qui est utilisé par la carte.
      Dans mon cas c’est la configuration pour une carte avec 8 entrées et 8 chipset.

      Il me semble que pour ma carte si ce fichier n’est pas configuré le système n’utilise qu’un des chipset sur les 8.

  • Ramzi:

    bonjour,
    l’utilisation de webcam est elle possible avec zoneminder, si oui comment faire? merci

    • CedricOLIVIER:

      Bonjour,

      Personnellement, je n’ai jamais réussi à faire fonctionner zoneminder avec des webcams. Pourtant cela devrait être possible.
      Depuis la rédaction de cet article Zoneminder et passé de la version 1.24.2 à 1.24.4 donc peut être que les soucis que j’avais rencontré à l’époque avec les webcam ne sont plus d’actualités.

  • Ramzi:

    bonsoir,
    effectivement les webcams sont prises en charge.
    merci pour ces articles 🙂

  • Axel:

    Salut,

    Je suis en train de mettre en place zoneminder dans ma boite et je trouve ton article super intéressant et très complet.
    La carte que tu as utilisée m’intéresse, mais je voudrais savoir, avant de commander, si il est possible d’enregistrer plusieurs flux vidéos en même temps. Et si cet enregistrement peut se déclencher via la détection de mouvements.

    Merci d’avance

    • CedricOLIVIER:

      Il est effectivement possible d’enregistrer plusieurs flux vidéo en même temps avec cette carte.

      Au moment de la rédaction de cet article, les caméras IP étaient couteuses, c’est pourquoi je me suis rabattu sur des caméras analogiques. Mais si je devais me ré-équiper aujourd’hui, je pense que je partirais sur des caméras IP qui apportent tout de même plus de facilité.

Laisser un commentaire