Nous allons voir dans ce tutoriel comment mettre en place un stream vidéo avec Motion à partir d’un Raspberry Pi. Ce tutoriel reste compatible avec tout système Linux.
Matériel
- Raspberry Pi (ou autre machine linux)
- Caméra USB ou Caméra CSI
Description de Motion
Le programme Motion a été développé comme système de surveillance. Il permet d’observer plusieurs caméras, détecter les mouvements sur chaque caméra et enregistrer des images ou des vidéos à ce moment là.
Cet outil permet donc
- streamer les vidéos pour être affichées à distance
- détecter des mouvements sur chacune des caméra
- enregistrer des images ou des vidéos à partir des caméras
Installation de motion
Si ce n’est pas déjà le cas sur votre version d’OS, vous pouvez installer Motion à l’aide de la commande suivante.
sudo apt-get install motion
Vérification de l’installation
motion --version
Si une erreur apparait à propose de la permission d’accès au fichier /var/log/motion/motion.log
Vous pouvez supprimer le fichier puis redémarrer
rm -r /var/log/motion
ou accorder les droits d’accès
sudo chmod -R 777 /var/log/motion
sudo chmod -R 777 /var/lib/motion
ou créer un autre fichier de log et ajouter son chemin d’accès dan le fichier motion.conf
sudo nano ~/.motion/motion.log
Configuration de motion
Toute la configuration de motion se fait dans le fichier /etc/motion/motion.conf. Vous pouvez directement modifier le fichier de configuration après avoir fait une copie en sauvegarde
sudo cp /etc/motion/motion.conf /etc/motion/motion.conf.bckp
sudo nano /etc/motion/motion.conf
Dans les principaux paramètres, on retrouve
- video_device pour définir la caméra à utiliser
- paramètres de la capture (height, width, framerate)
- texte à afficher sur l’image de la caméra (text_left, text_right, etc.)
- paramètres de la détection de mouvement (threshold, event_gap, etc.)
- le fichier log_file pour écrire les log (défaut: /var/log/motion/motion.log)
- le répertoire target_dir pour enregistrer les images et vidéos (défaut; /var/lib/motion)
- picture_output pour capturer des images à la détection
- video_output pour enregistrer des vidéos
N.B.: vous pouvez retrouver tous les paramètres de configuration sur le site officiel
Allez plus loin dans la configuration
Il existe un grand nombre de paramètre dans le fichier motion.conf qui vont vous permettre d’adapter l’acquisition d’image à votre besoin
Si plusieurs caméra sont utilisées, vous pouvez définir un jeu de paramètre pour chaque caméra (/etc/motion/camera1.conf)
Démarrer Motion depuis le terminal
sudo motion
sudo motion -c ~/.motion/motion.conf #to use another configuration file
sudo killall motion #to end the process
(utilise ~/.motion/motion.conf par défaut, s’il existe, sinon /etc/motion/motion.conf)
Démarrer Motion comme service
sudo service motion start
sudo service motion status
sudo service motion restart
sudo service motion stop
N.B.: Dans le fichier /etc/motion/motion.conf, laisser l’option daemon à OFF
Créer un stream vidéo avec Motion
Dans le fichier /etc/motion/motion.conf, modifier les paramètres par défaut
webcontrol_port
8080 # define http port for camera web control http://<ip_server>:<webcontrol_port>
webcontrol_localhost on # define if accessible only from the same machine
stream_port 8081 # define http port for camera display http://<ip_server>:<stream_port>
stream_localhost off
stream_auth_method
0
stream_authentication <username>:<password>
N.B.: si vous activer le webcontrol depuis l’extérieur de la machine, il est fortement conseillé d’activer l’authentification sur le stream
N’oubliez pas de redémarrer le service motion après toute modification du fichier motion.conf
sudo service motion restart
Si vous entrez l’adresse IP de votre machine Linux (ici, 192.168.1.92), suivie du numéro de port défini dans stream_port, vous pouvez observer le stream vidéo de motion.
Si vous n’utilisez pas motion en continu, il est possible d’enregistrer une vidéo sans attendre une détection de mouvement (emulate_motion on, event_gap -1)
Tips: vous pouvez définir une image de mauvaise qualité pour améliorer la bande passante du stream (stream_quality 45) mais conserver une image de bonne qualité pour l’enregistrement de la vidéo (video_quality 100).
Fichier motion.conf pour le streaming
/etc/motion/motion.conf (avec webcontrol local et ports 8553 et 8554)
# Rename this distribution example file to motion.conf # # This config file was generated by motion 4.3.2 # Documentation: /usr/share/doc/motion/motion_guide.html # # This file contains only the basic configuration options to get a # system working. There are many more options available. Please # consult the documentation for the complete list of all options. # ############################################################ # System control configuration parameters ############################################################ # Start in daemon (background) mode and release terminal. daemon off # Start in Setup-Mode, daemon disabled. setup_mode off # File to store the process ID. ; pid_file value # File to write logs messages into. If not defined stderr and syslog is used. log_file /var/log/motion/motion.log # Level of log messages [1..9] (EMG, ALR, CRT, ERR, WRN, NTC, INF, DBG, ALL). log_level 6 # Target directory for pictures, snapshots and movies target_dir /var/lib/motion # Video device (e.g. /dev/video0) to be used for capturing. videodevice /dev/video0 # Parameters to control video device. See motion_guide.html ; vid_control_params value # The full URL of the network camera stream. ; netcam_url value # Name of mmal camera (e.g. vc.ril.camera for pi camera). ; mmalcam_name value # Camera control parameters (see raspivid/raspistill tool documentation) ; mmalcam_control_params value ############################################################ # Image Processing configuration parameters ############################################################ # Image width in pixels. width 640 # Image height in pixels. height 480 # Maximum number of frames to be captured per second. framerate 10 # Text to be overlayed in the lower left corner of images text_left CAMERA1 # Text to be overlayed in the lower right corner of images. text_right %Y-%m-%d\n%T-%q - %{fps} text_scale 3 ############################################################ # Motion detection configuration parameters ############################################################ # Always save pictures and movies even if there was no motion. emulate_motion off # Threshold for number of changed pixels that triggers motion. threshold 1500 # Noise threshold for the motion detection. ; noise_level 32 # Despeckle the image using (E/e)rode or (D/d)ilate or (l)abel. despeckle_filter EedDl # Number of images that must contain motion to trigger an event. minimum_motion_frames 1 # Gap in seconds of no motion detected that triggers the end of an event. event_gap 60 # The number of pre-captured (buffered) pictures from before motion. pre_capture 3 # Number of frames to capture after motion is no longer detected. post_capture 0 ############################################################ # Script execution configuration parameters ############################################################ # Command to be executed when an event starts. ; on_event_start value # Command to be executed when an event ends. ; on_event_end value # Command to be executed when a movie file is closed. ; on_movie_end value ############################################################ # Picture output configuration parameters ############################################################ # Output pictures when motion is detected picture_output off # File name(without extension) for pictures relative to target directory picture_filename %Y%m%d%H%M%S-%q ############################################################ # Movie output configuration parameters ############################################################ # Create movies of motion events. movie_output on # Maximum length of movie in seconds. movie_max_time 60 # The encoding quality of the movie. (0=use bitrate. 1=worst quality, 100=best) movie_quality 100 # Container/Codec to used for the movie. See motion_guide.html movie_codec mkv # File name(without extension) for movies relative to target directory movie_filename %t-%v-%Y%m%d%H%M%S ############################################################ # Webcontrol configuration parameters ############################################################ # Port number used for the webcontrol. webcontrol_port 8553 # Restrict webcontrol connections to the localhost. webcontrol_localhost on # Type of configuration options to allow via the webcontrol. webcontrol_parms 0 ############################################################ # Live stream configuration parameters ############################################################ # The port number for the live stream. stream_port 8554 # Restrict stream connections to the localhost. stream_localhost off stream_quality 100 ############################################################## # Camera config files - One for each camera. ############################################################## ; camera /usr/etc/motion/camera1.conf ; camera /usr/etc/motion/camera2.conf ; camera /usr/etc/motion/camera3.conf ; camera /usr/etc/motion/camera4.conf ############################################################## # Directory to read '.conf' files for cameras. ############################################################## ; camera_dir /usr/etc/motion/conf.d
Applications
- Créer un système de vidéo surveillance
- Utilisation de MotionEye OS