Posez votre question »

Vidéosurveillance et capture d'image périodique par webcam

Juin 2015


Vidéosurveillance et capture d'image périodique par webcam sous Linux


Ce tutoriel vous permettra de d'utiliser votre webcam et votre ordinateur personnels à des fins de vidéosurveillance sous Linux. Notez d'abord qu'il s'agira de surveillance "maison" et qu'il existe des tas de matériels plus sophistiqués. En particulier les caméras IP intègrent directement un serveur Web, certaines sont mêmes motorisées et pilotables à distance ; mais ce matériel coûte cher alors que nous avons tout à la maison pour faire un travail similaire.

La puissance des outils utilisées (notamment le programme motion) fait que de multiples modes de fonctionnement sont possibles. Ce tutoriel explique les suivants, à vous de les adapter pour qu'ils répondent à vos besoins.



Avant de commencer


Prérequis : On suppose que votre webcam est déjà installée sur votre système et disponible sur /dev/video0. Selon la version de votre système d'exploitation et le modèle de votre webcam il peut s'agir de l'étape la plus compliquée pour faire fonctionner votre système de vidéosurveillance maison. Vérifiez avec xawtv ou cheese par exemple, que votre webcam fonctionne correctement sur vote système.

Captures régulières d'images


Ce mode de fonctionnement permet de capturer une image au format JPEG issue de votre webcam et de la mettre à jour régulièrement. Vous pouvez ensuite l'intégrer à votre site Web, par exemple. Ici nous ne nous occupons donc pas du serveur Web.

Méthode simple avec "webcam"


L'utilitaire webcam permet de capturer une image issue d'une webcam, l'annoter et l'enregistrer localement ou bien sur un serveur FTP.

Commencez par installer webcam (fourni par xawtv) puis créez ou ouvrez le fichier de configuration ~/.webcamrc. Placez-y :
[grab]    
device = /dev/video0    
text = "Capture du %d/%m/%Y à %H:%M:%S"    
width = <VOTRE_RESOLUTION>    
height = <VOTRE_RESOLUTION>    
quality = 75    
trigger = 200    
delay = 5    


[ftp]    
dir  = ~    
file = webcam.jpeg    
local = 1    


Ces configurations par défaut permettront de créer une image webcam.jpeg dans votre homedir toutes les 5 secondes uniquement si la scène est suffisamment différente de la précédente (voir l'option trigger).

La section [grab] contient les paramètres de capture, la section [ftp] indique où l'image doit être enregistrée (éventuellement sur un serveur FTP). Commencez par essayer le bon fonctionnement du programme avant de configurer l'upload sur FTP s'il vous intéresse.

text est l'annotation qui accompagnera votre image en bas à gauche. Laissez vide ou consultez la page man de date pour voir les paramètres disponibles.

trigger est une option importante : si elle veut zéro, l'image sera mise à jour toutes les delay secondes. Toute valeur différente de zéro permettra de mettre à jour l'image uniquement si l'image a changé significativement. Ceci permet de ne pas renouveler l'image si elle est similaire à la précédente. Plus la valeur de trigger est importante, moins la sensibilité est importante. Faîtes des essais pour déterminer la valeur la plus convenable à votre scène.

Attention : Si delay est nul et que la valeur de trigger est faible voire nulle, le programme risque d'utiliser une grande quantité de ressources.

Lancez simplement webcam pour tester. Vous devriez obtenir une sortie similaire à celle-ci :
$ webcam     
reading config file: /home/ccm/.webcamrc    
video4linux webcam v1.5 - (c) 1998-2002 Gerd Knorr    
grabber config:    
  size 640x480 [none]    
  input (null), norm (null), jpeg quality 75    
  rotate=0, top=0, left=0, bottom=480, right=640    
write config [ftp]:    
  local transfer /home/ccm/upload.jpeg => /home/ccm/webcam.jpeg    
compare: max=218,avg=210    
compare: max=89,avg=18    
compare: max=96,avg=18    
compare: max=81,avg=20    
compare: max=78,avg=20    
compare: max=78,avg=25    
compare: max=73,avg=22    
compare: max=80,avg=27    
compare: max=81,avg=27    
compare: max=87,avg=30    
compare: max=95,avg=30    
compare: max=86,avg=34    
...


Vérifiez également que l'image ~/webcam.jpg est mise à jour à chaque changement significatif de l'image.

Si tout fonctionne, vous pouvez, si vous le souhaitez, changer les paramètres FTP pour que l'image soit directement mise à jour sur votre serveur FTP (utile pour afficher votre image sur votre site Web et que vous disposez d'un hébergement distant). Pour cela éditez la section [ftp] :

[ftp]    
host = <HOTE_FTP>    
user = <LOGIN_FTP>    
pass = <PASS_FTP>    
dir  = /    
file = webcam.jpeg    
local = 0    

Libérer la webcam lorsqu'elle n'est pas utilisée (webcam + cron)


La méthode précédente a l'inconvénient de monopoliser la caméra en continu alors que ce n'est pas nécessaire.

Pour éviter cela, reprenez cette méthode mais ajoutez l'option once = 1 à la section [grab] (ce qui a pour effet de faire une seule capture et de quitter) et automatisez la tâche avec cron.

Cela vous permettra en plus d'effectuer la capture à des heures précises, idéal pour les webcam touristiques par exemple. Voir l'article détaillé pour automatiser des tâches avec cron. Dans notre cas, la tâche à automatiser est simplement la commande webcam.

Note : motion permet également d'effectuer des captures régulières. Cependant il souffre du même défaut de monopolisation du périphérique.

Emission d'un flux sur un serveur Web


Installez motion et vérifiez que le fichier /etc/motion/motion.conf existe. Ce fichier permet de paramétrer motion afin qu'il ait le comportement souhaité.

Repérez les valeurs suivantes dans le fichier motion.conf et modifiez-les :

Dans la section Capture device options, vérifiez que les paramètres sont corrects :
# Videodevice to be used for capturing  (default /dev/video0)    
# Périphérique d'entrée (généralement à laisser à la valeur /dev/video0)    
videodevice /dev/video0    

# Image width (pixels). Valid range: Camera dependent, default: 352    
# Largeur de l'image capturée en pixels (selon votre caméra)    
width 480    

# Image height (pixels). Valid range: Camera dependent, default: 288    
# Hauteur de l'image capturée en pixels (selon votre caméra)    
height 640    


Dans la section Image File Output :
# Output 'normal' pictures when motion is detected (default: on)    
# Mettre à off pour ne pas créer d'images    
output_normal off    


Dans la section Live Webcam Server :
# The mini-http server listens to this port for requests (default: 0 = disabled)    
# Indiquer un numéro de port, ex : 8081    
webcam_port 8081    

# Restrict control connections to localhost only (default: on)    
# Mettez cette valeur à off UNIQUEMENT si vous voulez accéder au flux vidéo depuis un autre ordinateur que celui sur lequel tourne motion    
# attention, selon vos paramètres de pare-feu, la valeur off peut signifier que votre vidéo sera accessible sans restriction depuis Internet    
control_localhost on    


Dans la section FFMPEG related options :
# Use ffmpeg to encode mpeg movies in realtime (default: off)    
# Mettre à off pour ne pas créer de vidéo (sauf le flux vidéo bien-sûr)    
ffmpeg_cap_new off    


Laissez toutes les autres valeurs à celles par défaut.

Lancez motion en tapant simplement motion dans un terminal. Si tout est normal, vous devriez voir apparaître ceci :
[1] Started stream webcam server in port 8081


Ceci signifie que le serveur est démarré et diffuse le flux provenant de votre webcam sur le port 8081.

Pour vous y connecter vous pouvez soit l'ouvrir à l'aide d'un navigateur, soit à l'aide d'un lecteur multimédia. Par exemple :

Pour accéder au flux vidéo depuis un autre ordinateur, changez la valeur de control_localhost à off, relancez motion et remplacez localhost par l'adresse IP de l'ordinateur sur lequel tourne motion dans l'adresse du flux.

Vous pouvez interrompre l'émission du flux en appuyant sur Ctrl+C dans le terminal où tourne motion.

Notez que l'émission d'un flux vidéo sur le Web requiert un débit montant important et que sur une connexion standard ADSL, le débit montant est largement inférieur au débit descendant, n'espérez donc pas pouvoir transmettre une vidéo HD en temps réel sur le Web.

Enregistrement d'une vidéo lorsqu'un mouvement est détecté


Ceci permet d'effectuer de la surveillance pure et dure. A chaque détection de mouvement, motion créera une nouvelle vidéo jusqu'à ce que l'image cesse de bouger.

Installez motion et vérifiez que le fichier /etc/motion/motion.conf existe. Ce fichier permet de paramétrer motion afin qu'il ait le comportement souhaité.

Repérez les valeurs suivantes dans le fichier motion.conf et modifiez-les :

Dans la section Capture device options, vérifiez que les paramètres sont corrects :
# Videodevice to be used for capturing  (default /dev/video0)    
# Périphérique d'entrée (généralement à laisser à la valeur /dev/video0)    
videodevice /dev/video0    

# Image width (pixels). Valid range: Camera dependent, default: 352    
# Largeur de l'image capturée en pixels (selon votre caméra)    
width 480    

# Image height (pixels). Valid range: Camera dependent, default: 288    
# Hauteur de l'image capturée en pixels (selon votre caméra)    
height 640    


Dans la section Image File Output :
# Output 'normal' pictures when motion is detected (default: on)    
# Mettre à off pour ne pas créer d'images    
output_normal off    


Dans la section Live Webcam Server :
# The mini-http server listens to this port for requests (default: 0 = disabled)    
# Mettre 0 comme numéro de port pour désactiver le serveur Web    
webcam_port 0    


Dans la section FFMPEG related options :
# Use ffmpeg to encode mpeg movies in realtime (default: off)    
# Mettre à on pour activer la création de fichier vidéo    
ffmpeg_cap_new off    

# Codec to used by ffmpeg for the video compression.    
# Choisir le format MPEG4 (fichers .AVI)    
ffmpeg_video_codec mpeg4    


Dans la section Snapshots :
# Target base directory for pictures and films    
# Créez un répertoire "motion" dans votre homedir et placez le chemin ici    
# Tous les fichiers de sortie seront créés dans ce dossier    
target_dir /home/ccm/motion    


Laissez toutes les autres valeurs à celles par défaut.

Lancez motion en tapant simplement motion dans un terminal. Si tout est normal, au premier mouvement en face de votre caméra, vous devriez voir apparaître ceci :
[1] File of type 8 saved to: /home/ccm/motion/01-20110905130753.avi


Ceci signifie que motion a détecté un mouvement et est en train d'enregistrer une vidéo. Il s'arrêtera dès que l'image sera de nouveau stable.

Vous pouvez interrompre la vidéosurveillance en appuyant sur Ctrl+C dans le terminal où tourne motion. Les fichiers ne seront pas supprimés.

Attention, un nouveau fichier n'est pas nécessairement créé à chaque nouveau mouvement, il se peut que deux enregistrements soient mis bout-à-bout dans le même fichier si la différence de temps entre la fin du premier enregistrement et le début du second est inférieure à une valeur donnée. Cette valeur est l'option gap dans la section Motion Detection Settings, donnée en secondes.

Si vous trouvez que la détection est trop sensible ou trop peu sensible, ajustez le paramètre threshold de la section Motion Detection Settings. La valeur par défaut est 1500. Une valeur inférieure signifie une sensibilité supérieure. Bien que la valeur par défaut soit adaptée pour la plupart des cas, si vous modifiez cette valeur vous devrez probablement effectuer beaucoup de tests avant de trouver la valeur qui convient à votre usage. N'oubliez pas d'interrompre motion (Ctrl + C) et de le relancer à chaque changement de valeur.

Note concernant motion


Motion est un outil très puissant qui vous permettra bien plus de possibilités que celles évoquées ci-dessus. Modifiez le fichier motion.conf pour changer son comportement.

Si vous désirez configurer plusieurs comportements différents, copiez le fichier motion.conf dans un autre répertoire puis créez des fichiers différents pour vos usages différents par exemple motion_videosurveillance.conf, motion_serveur_http.conf ... Vous pouvez ensuite démarrer motion en utilisant le fichier de configuration que vous souhaitez plutôt que /etc/motion.conf, par exemple :
$ motion ./motion_configurations/motion_videosurveillance.conf    

Sources


Pour une lecture illimitée hors ligne, vous avez la possibilité de télécharger gratuitement cet article au format PDF :
Videosurveillance-et-capture-d-image-periodique-par-webcam.pdf

Réalisé sous la direction de , fondateur de CommentCaMarche.net.

A voir également

Dans la même catégorie

Publié par Yoan.
Ce document intitulé «  Vidéosurveillance et capture d'image périodique par webcam  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.