sources :

http://doc.ubuntu-fr.org/motion

http://raspbian-france.fr/video-surveillance-raspberry-pi-camera/

vidéo avec le raspberry pi 2

 

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

http://localhost:8081

http://localhost:8080

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 :

http://localhost:8081

ou, sur le réseau local

http://IP:8081

par exemple

http://192.168.1.15:8081

# 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.