Détection d’intrusion avec Motion
Mon objectif est de surveiller l’accès à ma cave avec un flux vidéo et une détection d’intrusion pour que je sois avertis quand quelqu’un rentre.
Pour réaliser ce projet nous avons besoin d’un ordinateur et d’une webcam.
Dans mon cas je vais utiliser un vieux ordinateur portable.
Les objectifs sont :
- Pouvoir visualiser le flux vidéo à travers internet
- Recevoir un email avec une vidéo dés que la webcam détecte une intrusion
J’ai choisis d’utiliser motion qui est gratuit, open source et qui est compatible avec le raspberry Pi.
Téléchargement et installation
Sous debian motion se trouve dans les dépôts officiels :
apt-get install motion
Configuration de votre webcam
Le problème avec Debian, c’est quand si vous branchez plusieurs webcams ou une webcam et un tuner PCI, ils vont aléatoirement être montés dans /dev/video 0 1 2 3
Nous allons donc forcer Debian à faire un symlink pour notre webcam de surveillance.
D’abord nous devons obtenir les informations sur notre webcam, soit en scrutant le log /var/log/messages, soit avec lsusb, soit avec udevadm
Exemple :
root@Deb:/dev# lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 002: ID 05a9:a511 OmniVision Technologies, Inc. OV511+ Webcam Bus 003 Device 002: ID 0a5c:200a Broadcom Corp. BCM2035 Bluetooth dongle
Les informations nécessaires sont idProduct et idVendor, dans mon exemple idVendor = 05a0 et idProduct = a511.
Créer un fichier 90-webcam.rules dans /etc/udev/rules.d/ contenant :
# Persistent symlinks for webcam and tuner KERNEL=="video*", ATTRS{idProduct}=="a511", ATTRS{idVendor}=="05a9", SYMLINK+="webcam"
A remplacer avec vos propres variables.
Enfin, après un restart du service udev ( /etc/init.d/udev restart ) vous devriez avoir un lien /dev/webcam
Configuration de Motion
Toute la configuration se passe dans le fichier /etc/motion/motion.conf, voici mes quelques modifications :
daemon on : pour lancer motion au démarrage en mode daemon videodevice /dev/video0 : le chemin vers votre caméra, info que vous pouvez trouver dans le fichier de log /var/log/messages lors du branchement de la webcam width et height : règle la résolution, à modifier en fonction de votre webcam framerate 3 : nombres d’images capturés par minute treshold 1500 : nombres de pixel qui doivent changer entre 2 images pour détecter une intrusion output_normal off : je ne veux pas enregistrer d’image, je préfère recevoir une vidéo ffmpeg_cap_new on ffmpeg_video_codec msmpeg4 locate on webcam_port 8081 on_movie_end /opt/uploader.py /opt/uploader.cfg %f : à la fin d’un enregistrement d’intrusion, motion déclenche le script /opt/uploader.py
Toutes les options disponibles sont documentés dans la documentation officiel de Motion
Les explications sur le script sont disponibles par ici
Les actions sont diverses et variés, vous pouvez exécuter une action n’importe quel soit à n’importe quel moment.
Dans mon exemple j’ai choisis d’envoyer la vidéo à la fin de la détection mais j’aurais pu envoyer un SMS au début de la détection, de m’envoyer une image pendant la capture et la vidéo à la fin.
Vous l’aurez compris, les possibilités sont nombreuses et la seule limite est votre besoin !
Motion ne trouve pas la palette de couleur pour votre webcam
Dans mon cas j’utilise une vielle webcam, du coup motion ne trouve pas la bonne palette de couleur à utiliser
Symptômes :
[1] Retrying until successful connection with camera [1] cap.driver: "ov519" [1] cap.card: "USB Camera (05a9:a511)" [1] cap.bus_info: "usb-0000:00:1d.0-1" [1] cap.capabilities=0x05000001 [1] - VIDEO_CAPTURE [1] - READWRITE [1] - STREAMING [1] Config palette index 8 (YU12) doesn't work. [1] Supported palettes: [1] 0: O511 (O511) [1] Unable to find a compatible palette format. [1] ioctl (VIDIOCGCAP): Inappropriate ioctl for device
Il vous faut trouver la bonne librairie à utiliser pour votre webcam.
Dans mon cas c’est /usr/lib/i386-linux-gnu/libv4l/v4l1compat.so
Pour tester vous pouvez utiliser :
export LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so
Si cela fonctionne et pour rendre automatique ce changement, rajoutez cet export dans le fichier /etc/rc.local
Utilisation
A ce stade votre flux webcam est disponible sur http://ADDR.IP.SERVEUR:8081.
Quand une intrusion est détecté, motion enregistre la scène et à la fin vous envoie un mail avec la vidéo en pièce jointe ou directement sur google drive ( exemple )
Sur smartphone, et notamment sur Android, l’application MJpegViewer fonctionne bien.
Bonjour,
Très intéressant. Je souhaiterai envoyer un SMS quand motion détecte un mouvement avec l’utilisation de la commande externe ‘on_movie_end’. Pourrais-tu STP fournir des explications sur les fichiers uploader.py et uploader.cfg, car le lien sur les explications du script ne fonctionne pas.
Merci,
Titou.
Bonjour,
Les liens sont maintenant à jour.
Pour l’envoie de SMS, il va falloir que tu fouilles un peu le web
Le script uploader.py permet juste d’envoyer la vidéo sur Google Drive.
Aulieu du SMS, tu peux faire comme moi et t’envoyer un mail ?
Bonjour,
ton tuto est très intéressant mais ton lien « Les explications sur le script et le petit fichier de conf sont disponibles par ici » ne fonctionne pas. Je souhaiterais envoyer un SMS lorsque Motion détecte un mouvement. Quel est le contenu de tes fichiers uploader.py et uploader.cfg?
Dans l’attente, merci à toi.
Cordialement
Pat
Bonjour,
Les liens sont maintenant à jour.
Pour l’envoie de SMS, il va falloir que tu fouilles un peu le web
Le script uploader.py permet juste d’envoyer la vidéo sur Google Drive.