Les 5 précédents articles de cette série Caméra de surveillance et Raspberry Pi explorent différents aspects de la gestion de caméras de surveillance sur Rasberry Pi et la diffusion des flux vidéos sur une page web. Cet article en fait la synthèse.
L’objectif :
A partir d’une Raspberry Pi B+, installer motion réglé correctement pour :
- gérer deux caméras de surveillance IP ;
- collecter les vidéos et images générées sur détection de mouvement avec aussi peu de faux positifs que possible ;
- afficher les flux vidéos en temps réel sur une page web accessible sur le réseau local.
Préparation du Raspberry Pi
- Installer Raspbian Jessie Lite – voir l’article Mise en service d’un Raspberry Pi
- Régler le Pi pour fonctionner correctement en wifi sur une adresse fixe 192.168.1.104 (nom nautilus) – voir l’article Raspberry Pi : connexion internet en wifi et/ou IP fixe
Pour moi toutes ces étapes réalisées correspondent à l’image de carte sd « jessie-lite-wifi fixe-103-2016-07-16.img « , dans le répertoire « Downloads\2016-07 Pi Images « . Il me suffit de régler l’adresse wifi et le nom du Pi comme suit :
- Connecter le Pi en ethernet, sans dongle wifi ;
- Editer /etc/dhcpcd.conf et modifier l’adresse IP attribuée ;
- Taper raspi-config puis modifier Hostname (advanced options) et changer le nom vers « nautilus ».
- Mettre le dongle wifi sur le Pi puis taper « reboot » pour redémarrer.
Ensuite se reconnecter en wifi et mettre le Pi à jour :
- apt-get update
- apt-get upgrade
- rpi-update
Enlever la connexion ethernet et taper « reboot » pour redémarrer.
uname -a nous indique la version du système d’exploitation en fonctionnement.
Le résultat, le 14/08/2016 est 4.4.17+ #901 Fri Aug 12 17:48:40 BST 2016 armv6l GNU/Linux .
df -h montre qu’on utilise 17% de la carte SD de 8 Go.
Installer motion
- Installer motion selon l’article Lire un flux vidéo d’une webcam avec un Raspberry Pi (je n’ai pas installé les deux derniers paquets liés à sql)
apt-get install -y libjpeg62-turbo libjpeg62-turbo-dev libavformat-dev libavcodec-dev libavutil-dev libc6-dev zlib1g zlib1g-dev apt-get install motion
Régler motion pour mes deux caméras
Il me faut 3 fichiers de configuration (droits d’accès 664, propriétaires motion / video) puisque j’ai deux caméras (cf l’article une caméra IP avec une vieille tablette android ?) :
- /etc/motion/motion.conf pour tous les éléments communs aux deux caméras ;
- /etc/motion/thread0.conf pour la caméra ‘Foscam’ ;
- /etc/motion/thread1.conf pour la caméra ‘galaxy’ ;
J’exécute donc les commandes suivantes pour créer les fichiers, et donner les bons droits :
chown -R root:root /etc/motion/ touch /etc/motion/thread1.conf touch /etc/motion/thread0.conf chown root:motion /etc/motion/thread0.conf chown root:motion /etc/motion/thread1.conf chmod -R 664 /etc/motion/ chmod 755 /etc/motion/
cp /etc/motion/motion.conf /etc/motion/motion.conf.OLD
créer certains fichiers et donner les droits d’accès
Exécuter chaque ligne de commande non commentée :
# /usr/bin/motion : 755 chmod 755 /usr/bin/motion #/var/lib/motion/ ne sert pas #var/run/motion (pour motion.pid) mkdir /var/run/motion touch /var/run/motion/motion.pid chown -R motion:motion /var/run/motion/ chmod 755 /var/run/motion/ chmod 644 /var/run/motion/motion.pid # thread2.conf (foscam) : /home/jf/motion/log/foscam # thread1.conf (tablette) : /home/jf/motion/log/galaxy mkdir /home/jf/motion mkdir /home/jf/motion/galaxy mkdir /home/jf/motion/foscam touch /home/jf/motion/motion-log.log chown -R root:motion /home/jf/motion/ chown motion:motion /home/jf/motion/motion-log.log chmod -R 644 /home/jf/motion/ chmod 777 /home/jf/motion/ chmod 775 /home/jf/motion/foscam/ chmod 775 /home/jf/motion/galaxy/
éditer les fichiers de configuration
Dans etc/motion/motion.conf les lignes suivantes sont modifiées ou décommentées :
process_id_file /var/run/motion/motion.pid logfile /home/jf/motion/log/motion-log.log v4l2_palette 8 width 640 height 480 netcam_keepalive on # Number of motion thread to show in SDL Window (default: 0 = disabled) sdl_threadnr 0 text_double on target_dir /home/jf/log/ # Restrict stream connections to localhost only (default: on) stream_localhost off webcontrol_port 8080 #must be in motion.conf, not in a thread. # Restrict control connections to localhost only (default: on) webcontrol_localhost off # Output for http server, select off to choose raw text plain (default: on) webcontrol_html_output on thread /etc/motion/thread0.conf thread /etc/motion/thread1.conf
Attention : il faut bien vérifier que thread0.conf et thread1.conf ont des sauts de ligne UNIX.
etc/thread0.conf règle la configuration pour la caméra devant la maison (évidemment il faut modifier USER et PWD ainsi que l’adresse IP pour que ça corresponde à la caméra) :
# caméra FOSCAM devant la maison # thread0.conf videodevice /dev/video0 netcam_url http://USER:PWD@192.168.X.X:80/videostream.cgi?user=USER&pwd=PWD ############################################################ # Régler sensibilité aux mouvements pour cette caméra extérieure threshold 3000 threshold_tune off noise_level 32 noise_tune off despeckle_filter EedDl smart_mask_speed 10 lightswitch 25 minimum_motion_frames 3 ############################################################ # Target base directory for pictures and films target_dir /home/jf/motion/log/foscam snapshot_filename f-%v-%Y%m%d%H%M%S-snapshot picture_filename f-%v-%Y%m%d%H%M%S-%q movie_filename f-%v-%Y%m%d%H%M%S timelapse_filename f-%Y%m%d-timelapse ############################################################ stream_port 8081
etc/thread1.conf règle la configuration pour la caméra créée sur la vieille tablette samsung selon l’article une caméra IP avec une vieille tablette android ? :
#caméra Galaxy tab dans la maison videodevice /dev/video1 netcam_url http://192.168.X.X:8090/video ############################################################ threshold 3000 threshold_tune off noise_level 32 noise_tune off despeckle_filter EedDl smart_mask_speed 10 lightswitch 25 minimum_motion_frames 3 ############################################################ # Target base directory for pictures and films target_dir /home/jf/motion/log/galaxy snapshot_filename g-%v-%Y%m%d%H%M%S-snapshot picture_filename g-%v-%Y%m%d%H%M%S-%q movie_filename g-%v-%Y%m%d%H%M%S timelapse_filename g-%Y%m%d-timelapse ############################################################ stream_port 8082
Démarrer motion comme un service
Dans /etc/default/motion, modifier la ligne suivante (passer à yes) :
start_motion_daemon=yes
Redémarrer le Pi avec reboot.
http://192.168.1.104:8082/ et http://192.168.1.104:8081/ affichent les deux flux vidéos sur un navigateur local.
Si ça ne fonctionne pas, modifier /etc/init.d/motion comme indiqué dans cet article, en y ajoutant la ligne sleep 30 . Pour moi, ça fonctionne sans.
Pour déboguer, on peut souhaiter savoir quel est l’utilisateur du service motion :
ps -aef | grep motion
Dans mon cas, ça montre deux utilisateurs (1ère colonne) : motion et root.
A ce stade, si on tape 192.168.1.104:8081 ou 192.168.1.104:8082 dans un navigateur du réseau local, on voit les flux vidéos en temps réel.
Supprimer les anciens fichiers image et vidéo
- créer le fichier camera–delete–cron.sh dans le répertoire /home/jf/motion et lui donner les droits d’acès 764
- Dans ce fichier, mettre les lignes suivantes :
#!/bin/bash # /home/jf/motion/camera–delete–cron.sh # efface les fichiers avi et jpg de plus de deux jours find /home/jf/motion/foscam -maxdepth 1 -name '*.avi' -type f -mtime +2 -exec rm {} \; find /home/jf/motion/foscam -maxdepth 1 -name '*.jpg' -type f -mtime +2 -exec rm {} \; find /home/jf/motion/galaxy -maxdepth 1 -name '*.avi' -type f -mtime +2 -exec rm {} \; find /home/jf/motion/galaxy -maxdepth 1 -name '*.jpg' -type f -mtime +2 -exec rm {} \;
- Dans le cron, via crontab -e, insérer les lignes suivantes :
#env SHELL=/bin/bash HOME=/home/jf PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin * 1 * * * bash /home/jf/motion/camera-delete-cron.sh
- Redémarrer le Pi avec reboot.
Visualiser les flux vidéos sur une page PHP
- Installer apache et PHP – voir l’article Un serveur Web sur mon Raspberry Pi.
- dans le répertoire /var/www/html , créer une page index.php qui affiche les deux flux vidéos et y ajouter un fichier A-style.css .
- supprimer index.html
index.php contient :
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <title>Nautilus</title> <meta name="viewport" content="width=device-width,initial-scale=1" /> <link href="A-style.css" rel="stylesheet" media="all" type="text/css"> </head> <body class="pi-dashboard"> <H1>Tableau de bord maison 192.168.1.104 (nautilus)</h1> <section class="video-surveillance"> <img name="Galaxy-Tab" class="stream" src="https://192.168.1.104:8082/?action=stream" width="600" height="450" alt="Live Feed" title="Galaxy Tab GT-P6210" /> <img name="Foscam-FI8905W" class="stream" src= "http://192.168.1.104:8081/?action=stream" width="600" height="450" title="Foscam FI8905W"/> </section> <section class="capteurs"> <h3>Autres informations</h3> <p>A venir...</p> </section> </body> </html>
A-style.css contient :
body { padding: 0.3%; font-family: Georgia, "Times New Roman", Times, serif; color: purple; background-color: #d8da3d ; width: 95%; text-align: center; } section.video-surveillance { display: flex; /* or inline-flex */ justify-content: space-around; display: inline-block; } h1 { font-family: Helvetica, Geneva, Arial, SunSans-Regular, sans-serif ; margin-top: 1em; } img.stream { padding: 1%; } @media only screen and (min-width: 800px){ section.video-surveillance { flex-direction: row ; } img.stream { max-width: 45% ; height: auto; } } @media only screen and (max-width: 800px){ section.video-surveillance { flex-direction: column ; } img.stream { max-width: 95%; height: auto; } }
A ce stade, la page php s’affiche lorsqu’on tape « nautilus » dans un navigateur local (192.168.1.104 dans une tablette)et les deux flux vidéos s’affichent en streaming.
df -h montre qu’on utilise maintenant 19% de la carte SD de 8 Go.
Salut, j’aimerais savoir si il est possible d’afficher le flux vidéo sur sa télévision. Merci.
Bonjour a tous j utilise octoprint et je veux branché 2 webcam j ai bien le premier flux sans prob mais quand je switch sur l autre rien et il y a des tutoriels mais il sont tous différents et je ne sais pas lequel prendre si c est possible au plus simple j utilise un endoscope et une web cam en usb svp merci a tous pour votre aide
Bonjour Anne Laure, merci d’avoir publié mon commentaire. Pourquoi vous n’avez pas répondu à ma question puisque je pense que vous avez la réponse 🙂 . En effet, j’ai trouvé aussi cet article qui fait référence à vous : https://knowledge.parcours-performance.com/lire-flux-video-dune-webcam-raspberry-pi/ A votre avis, il est donc possible avec motion et raspberry bi de visualiser en temps réel sur ma tv le son et image de la caméra ip ? Votre tuto fonctionne avec n’importe quel camera ip ? Exemple : celle-ci : https://www.amazon.fr/YI-Surveillance-Int%C3%A9rieur-D%C3%A9tection-Mouvement/dp/B07C55PWFD/ref=sr_1_1_sspa?ie=UTF8&qid=1542982969&sr=8-1-spons&keywords=yi+camera+1080p&psc=1 En lisant d’autre tuto, on parle de flux rtsp, du coup je ne sais pas si toutes… Lire la suite »
Bonjour,
j’ai une camera IP YI Home edition qui est indépendante du raspberry.
Je souhaite diffuser le flux video/audio de la camera ip sur ma tv en utilisant le raspberry via sa sortie HDMI.
Est-ce possible ?
Si oui, comment ?
Mon but est de diffuser le flux video/audio de ma camera ip sur ma télévision sans avoir de câble qui traîne. Il faut aussi que la caméra soit indépendante du raspbery.
Sinon avez-vous une autre solution ?
Merci d’avance.