sources :
http://doc.ubuntu-fr.org/motion
http://raspbian-france.fr/video-surveillance-raspberry-pi-camera/
Intro
En cherchant vidéosurveillance, premier réflexe aller vers « cheese » puis je suis tombé assez naturellement sur motion.
En test avec le Raspberry et quelques simples paramétrages, on arrive à de la vidéosurveillance avec détecteurs de mouvement pour n'enregistrer que les moments nécessaires… bluffant !
Taille des vidéos avec la config en bas (plus ou moins par défaut)
7 237 514 octets pour 1 mn et 54 sec
soit 0,063486965 Mo /sec
ou 3,809 Mo/mn
ou 228,55 Mo/heure
Matériel :
- Un Raspberry Pi 2
- Une webcam (MS Livecam VX-3000)
- Clavier et souris USB
- écran télé recyclé
en usage :
ajouter un hub auto-alimenté et un disque dur externe
plus besoin du clavier de la souris ou de l'écran
car accès et lancement en ssh.
Pré tests
Je part d'une installation de Jessy (Debian 8) assez fraîche
voir l'installation dans l'article « Raspbian Jessie sur raspberry pi 2 »
VLC
VLC est installé, je m'en sert pour voir la webcam
Menu / Son et Vidéo / Lecteur Multimedia VLC
puis Media / Ouvrir un périphérique de capture
Dans « nom du périphérique de capture » choisir /dev/video0
Pour les systèmes avec plusieurs entrées vidéos
on pourra avoir /dev/video1 (pour l'instant on reste à une)
différent pour la caméra à brancher en nappe sur le Raspberry
bouton du bas « lire »
la liste de lecture affiche v4l2:///dev/video0
et la vidéo s'affiche comme un film.
Installation
installation du logiciel motion
sudo apt-get install motion
puis
sudo apt-get install libjpeg62 libjpeg62-dev libavformat53 libavformat-dev libavcodec53 libavcodec-dev libavutil51 libavutil-dev libc6-dev zlib1g-dev libmysqlclient18 libmysqlclient-dev libpq5 libpq-dev
Configuration
motion -h pour l'aide en ligne de commande
motion -c lancera un fichier dans /etc/motion/motion.conf
mais pour le maîtriser il vaut mieux passer par un fichier spécifique
Utilisation de fichiers de configuration spécifique
On pourra utiliser ce fichier de configuration spécifique
voire en avoir plusieurs en fonction des cas.
On va créer un dossier pour l'utilisation de motion.
mkdir ~/motion/
On lance un setup par l'option -s
sudo motion -s
Je ne sais pas si c'est obligatoire mais je l'ai fait. J'ai aussi patienté jusqu'à la fin du test qui retourne au prompt.
On copie le fichier de configuration par défaut
dans un dossier personnel puis on en modifie les droits
pour faire de l'utilisateur en cours le propriétaire
sudo cp /etc/motion/motion.conf ~/motion/motion.conf
sudo chown $USER ~/motion/motion.conf
j'ai aussi créé un dossier pour les captures en le renseignant dans le conf (voir plus loin)
mkdir ~/motion/captures
et un dossier de conservation
mkdir ~/motion/captures/old
Maintenant on modifie le fichier ~/motion/motion.conf
les options importantes concerne le lieu d'enregistrement
et des options mieux expliquées plus bas.
Lancement et arrêt du serveur
Pour lancer le serveur
sudo motion -c ~/motion/motion.conf
Pour l'arrêter
sudo killall motion
Lancement automatique
On pourra créer un ou deux scripts pour lancer le service ou passer en ligne de commande par ssh.
Créer un script sh (captures.sh) et copier le texte suivant dedans.
### DEBUT DU SCRIPT
#!/bin/bash
### BEGIN INIT INFO
# Provides: skeleton
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: $portmap
# Should-Stop: $portmap
# X-Start-Before: nis
# X-Stop-After: nis
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be placed in /etc/init.d.
#
### END INIT INFO
sudo motion -c /home/pi/motion/motion.conf
### FIN DU SCRIPT
Faire une copie du script dans /etc/init.d
sudo cp ~/motion/captures.sh /etc/init.d
Rendre le script exécutable avec un chmod 755
sudo chmod 755 /etc/init.d/captures.sh
Faire un update-rc.d
sudo update-rc.d captures.sh defaults
Visionner le direct
Une interface web permet de voir le la vidéo ou quelques fonctions basiques
La meilleure façon reste de regarder dans le dossier des enregistrements (en ssh, sshfs, samba, sftp...) dans lequel on pourra voir les fichiers s'ajouter au fur et à mesure.
Par exemple, j'ai réglé pour avoir une photo toute les minutes. Un fichier (lastsnap.jpg) est créé automatiquement pour lier avec la dernière photo prise. On pourra donc se servir d'une page html qu'il suffira de rafraîchir et d'afficher cette photo : ~/motion/captures/lastsnap.jpg
mon fichier motion.conf sur Raspberry
Voici des extraits de mon fichier en exemple
Intro
Le démon détectera les mouvements et ne déclenchera l'enregistrement que quand nécessaire
daemon on
process_id_file /var/run/motion/motion.pid
Fichier de log où on veut
logfile /home/pi/motion/motion.log
Choix de la source vidéo
ici ma première entrée vidéo principale
videodevice /dev/video0
# je pense que motion -s doit modifier cette partie
v4l2_palette 17
Choix caméra USB
# Should normally be set to 0 or 1 for video/TV cards, and -1 for USB cameras
input -1
Taille de l'image
352x288 ; 800x600 ; 1024x768
# Image width (pixels). default: 352
width 640
# Image height (pixels). default: 288
height 480
Le framerate pour le nombre d'images par sec.
Par défaut à 2, test à 15 ok mais peut être moins fiable et lourd pour les fichiers
framerate 3
Paramètres particuliers de la caméra
# Valid range 0-255, default 0 = disabled
brightness 0
contrast 0
saturation 0
# Set the hue of a video device (NTSC feature).
# Valid range 0-255, default 0 = disabled
hue 0
Détection
la détection est bien réglée pour moi par défaut
on peut aussi choisir la taille du buffer de pré et post capture qui sera enregistré
# Specifies the number of pre-captured (buffered) pictures from before motion
# was detected that will be output at motion detection.
pre_capture 0
# Number of frames to capture after motion is no longer detected (default: 0)
post_capture 0
Taille des fichiers vidéos pour un découpage
# Maximum length in seconds of a movie
# When value is exceeded a new movie file is created. (Default: 0 = infinite)
max_movie_time 0
Partie pour les images
output_pictures off
output_debug_pictures off
quality 75
picture_type jpeg
Codage video
j'ai laissé ces valeurs par défaut
ffmpeg_output_movies on
ffmpeg_output_debug_movies off
ffmpeg_timelapse 0
ffmpeg_timelapse_mode daily
ffmpeg_bps 500000
ffmpeg_variable_bitrate 0
ffmpeg_video_codec mpeg4
ffmpeg_deinterlace off
sdl_threadnr 0
use_extpipe off
Faire des photos à intervalles réguliers
60 pour toutes les minutes, peut être laissé à 0
snapshot_interval 0
locate_motion_mode off
locate_motion_style box
text_right %Y-%m-%d\n%T-%q
; text_left CAMERA %t
text_changes off
text_event %Y%m%d%H%M%S
text_double off
fonctionne mais pixelise si sur on
Emplacement des fichiers
# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
target_dir /home/pi/motion/captures
Noms des fichiers
snapshot_filename %v-%Y%m%d%H%M%S-snapshot
picture_filename %v-%Y%m%d%H%M%S-%q
movie_filename %v-%Y%m%d%H%M%S
timelapse_filename %Y%m%d-timelapse
PARTIE RESEAUX
ipv6_enabled off
Visionner le direct
adresse par défaut pour la vidéo :
ou, sur le réseau local
par exemple
# The mini-http server listens to this port for requests (default: 0 = disabled)
stream_port 8081
stream_quality 50
stream_motion off
stream_maxrate 1
# Restrict stream connections to localhost only (default: on)
mettre sur off pour avoir visibilité sur le réseau
stream_localhost on
stream_limit 0
stream_auth_method 0
; stream_authentication username:password
Accès à l'interface http
webcontrol_port 8080
# Restrict control connections to localhost only (default: on)
webcontrol_localhost on
webcontrol_html_output on
; webcontrol_authentication username:password
D'autres options possibles Warnings and Logging
# Do not sound beeps when detecting motion (default: on)
# Note: Motion never beeps when running in daemon mode.
quiet on
Bases de données
#####################################################################
# Common Options for database features.
# Options require database options to be active also.
#####################################################################
Loopback
############################################################
# Video Loopback Device (vloopback project)
############################################################
# Output images to a video4linux loopback device
# The value '-' means next available (default: not defined)
; video_pipe value
# Output motion images to a video4linux loopback device
# The value '-' means next available (default: not defined)
; motion_video_pipe value
Dans le cas de plusieurs caméras
##############################################################
# Thread config files - One for each camera.
# Except if only one camera - You only need this config file.
# If you have more than one camera you MUST define one thread
# config file for each camera in addition to this config file.
##############################################################
# Remember: If you have more than one camera you must have one
# thread file for each camera. E.g. 2 cameras requires 3 files:
# This motion.conf file AND thread1.conf and thread2.conf.
# Only put the options that are unique to each camera in the
# thread config files.
; thread /etc/motion/thread1.conf
; thread /etc/motion/thread2.conf
; thread /etc/motion/thread3.conf
; thread /etc/motion/thread4.conf
*********************************************************************
Edit du 16/11/2015
Les différents tests effectués montrent que l'alimentation par USB est point point faible du montage. La webcam a des sauts qui se traduisent par un écran gris puis fini par se déconnecter sans possibilité de réarmement automatique.
Un redémarrage règle le problème mais nécessite une surveillance régulière.
Sans doute un hub USB auto-alimenté, pour brancher tous les modules USB, permettrait au système plus de stabilité... on utilise des alimentations spécifiques dans les PC et surtout une redondance dans les serveurs pour pallier à ce genre de problèmes.
Motion est un bon logiciel assez facile à configurer bien que ce soit un fichier conf à modifier (très utilisé sous Linux).
VLC suffirait pour utiliser le montage dans le cadre de la surveillance d'un bébé. Des tutoriels explique le routage du signal par le réseau.