Aujourd’hui nous allons voir comment créer un système de télé-surveillance grâce à un Raspberry Pi et divers types de caméras.
Ce système a pour vocation d’être utilisé dans le cardre d’une télé-surveillance domestique. Il doit permettre de garder un oeil en temps réel sur sa maison, et sauvegarder un historique des images en cas de besoin.
La capture d’écran ci-dessous vous donne un aperçu du résultat final du système qui est actuellement installé chez moi. J’ai volontairement flouté les images pour conserver l’intimité de mon « chez moi ». Je dispose de quatre caméras (une webcam, une caméra IP et deux module Raspberry Pi Caméra dont un NoIR pour la vision nocturne) :
Nous verrons comment utiliser trois différents types de caméras pour vous permettre de construire votre système avec le matériel dont vous disposez déjà :
Si vous souhaitez vous équiper, je vous conseille fortement d’opter pour le module Raspberry Pi Caméra, très petit, qui offre un rapport qualité/prix imbatable. En outre le modèle NoIR vous permettra de voir la nuit grâce un projecteur infra rouge 🙂
Note : Je ne reviens pas ici sur l’installation et l’utilisation de ces caméras. Il existe de nombreux tutos sur le net, que ce soit pour les webcam, les caméras IP ou le module Raspberry Pi Camera. Cet article se concentre sur la création du système de télé-surveillance.
Le principe global du système
Le système se compose d’un ou plusieurs Raspberry Pi équipés chacun d’une caméra (quelque soit son type) et d’un Raspberry Pi de « contrôle » qui centralise les images. Les Raspberry Pi se contentent de prendre une photo à intervalles réguliers et de les envoyer en WiFi ou Ethernet au Raspberry Pi de « contrôle ». Chaque image est taguée avec le nom de la caméra dont elle provient, et la date à laquelle elle a été prise afin de pouvoir la situer dans le temps.
Le Raspberry Pi de « contrôle » archive toutes les images qu’il recoit et peut effectuer des traitements dessus pour détecter des mouvements par exemple. Il est également équipé d’une interface Web permettant de consulter les images à distance depuis n’importe quel device ou navigateur web.
Photo ou vidéo ?
Quand on parle de « vidéo surveillance », on s’imagine un flux « vidéo ». Or, dans la pratique, ce n’est pas forcément le cas. D’une part parce que ce n’est pas forcément utile, et d’autre part parce que c’est problématique d’un point de vu « bande passante » pour un usage domestique.
Problème réseau
Le problème se pose si l’on souhaite regarder les images prises par une caméra à distance. Il faut faire transiter ces images entre la caméra, et le poste de visionnage. Or, un flux vidéo nécessite une bande passante conséquente pour afficher les images en continue et de manière fluide. Surtout lorsqu’on utilise des résolutions importantes de plusieurs méga-pixels.
Pour résoudre ce problème, on peut soit baisser la qualité de l’image, soit baisser le nombre d’images prises par seconde (rappelons qu’une vidéo n’est autre qu’un enchainement de photos).
Dans la pratique il faudra faire les deux, surtout si vous souhaitez pouvoir visonner les images en passant par un mobile en 3G.
L’utilité de la vidéo par rapport aux photos
Un système de vidéo surveillance, ou de télé-surveillance, domestique doit selon moi, permettre deux choses :
- voir en directe ce qui se passe à la maison à distance (Est ce que tout se passe bien à la maison ? Ai-je oublié d’éteindre mes lumières ?). Une photo prise régulièrement suffit.
- avoir une trace d’un évènement qui s’est déroulé (Avoir des preuves d’un cambriolage ou d’un incendie, et pouvoir les utiliser pour l’enquête). Cela nécessite de stocker les images pendant un certain temps.
L’important, c’est d’avoir les images en temps réel, de pouvoir les stocker et les visonner facilement, sur place ou a distance. Dans ces conditions, nous pouvons nous satisfaire d’une photo par seconde, voire moins 🙂 C’est exactement le principe du MJPEG qui est largement utilisé dans de nombreuses caméras IP. Le célèbre logiciel de détection de mouvement Motion, fonctionne également sur ce principe 🙂
Le gros avantage de la photo par rapport à la vidéo pour la télésurveillance
Demander à une caméra de prendre une photo à intervalles réguliers plutôt qu’une vidéo a également de nombreux avantages et permet grande souplesse d’utilisation :
- entre chaque photo, votre caméra ou votre Raspberry Pi est disponible pour faire autre chose
- une photo peu être prise et stockée en haute résolution puis facilement réduite pour être affichée à distance. On peut ainsi garder un historique des photos ou évènements en haute définition 1080p, et consulter avec son mobile en 3G une miniature de ces photos.
- une photo prise, peut être immédiatement envoyée sur un serveur distant pour y être sauvegardée et archivée. Un voleur pourra saboter votre caméra, mais toutes les photos prises auront déjà été sauvegardée 🙂
- il est très facile de détecter un mouvement en comparant deux photos 🙂
- il est très facile de créer une vidéo à partir d’images qui se suivent 🙂
Nous allons maintenant voir comment créer notre système de télé-surveillance en commençant par son noeud central, le Raspberry Pi de « Contrôle » 🙂
Le Contrôleur
Pour réaliser ce « contrôleur« , vous pouvez utiliser n’importe quel Raspberry Pi (ou n’importe quel ordinateur d’ailleurs 😉 ) relié à votre réseau, en WiFi ou Ethernet. Vous choisirez une carte mémoire en fonction du nombre de caméras dont vous disposez, de la qualité des images, et du nombre d’images que vous souhaitez conserver.
La première étape consiste à installer et configurer un serveur web Apache et PHP5. Je vous propose de suivre la procédure décrite dans cette article : PiHomeDashScreen – Installation et configuration. Ce serveur web servira à récupérer les images envoyées en HTTP POST et à diffuser l’interface web de visionnage.
Script de réception des images
Le principe est simple, les images seront envoyées en HTTP POST par les Raspberry Pi équipé d’une caméra, il nous suffit donc de créer un petit script en PHP pour les réceptionner.
collect.php :
<?php $token = 'azerty'; // token qui sert de mot de passe $dst_dir = 'camera'; // nom du dossier dans lequel seront stockées les images if(isset($_REQUEST['token']) && $_REQUEST['token'] == $token){ if(isset($_REQUEST['camera_name'])){ $camera_name = $_REQUEST['camera_name']; // nom de la caméra envoyé en même temps que l'image $img_name = 'cam_'.$camera_name.'_'.time().'.jpg'; // nom du fichier image à stocker : prefixe, nom de la camera et timestamp if(!is_dir($dst_dir)){mkdir($dst_dir, 0777, true);} // créé le répertoire de stockage s'il n'existe pas if(!is_dir($dst_dir.'/'.$camera_name)){mkdir($dst_dir.'/'.$camera_name, 0777, true);} // créé un sous répertoire pour chaque caméra s'il n'existe pas if (is_uploaded_file($_FILES["camera_image"]["tmp_name"])) { move_uploaded_file($_FILES["camera_image"]["tmp_name"], $dst_dir.'/'.$camera_name.'/'.$img_name); // enregistre l'image réceptionnée dans le bon répertoire } } } ?>
Pour visionner les images nous allons créer une page index.php qui affiche la dernière image de chaque caméra. Une fonction JavaScript se charge de raffraichir les images à intervalles réguliers 🙂
<?php header('Content-type: text/html; charset=utf-8'); // nom du dossier dans lequel sont stockées les images $dst_dir = 'camera'; // liste des caméras à afficher $cameras = array('visioncam', 'egeon', 'carpo', 'triton'); // taille d'affichage des images $width = '640'; $height = '480'; // fonction qui renvoie la dernière image d'une caméra function showLastImage ($cam_name) { global $dst_dir; header('Content-type: image/jpeg'); $dir = $dst_dir."/".$cam_name."/cam_".$cam_name."_*"; $imgs = glob($dir); echo new Imagick(end($imgs)); } if(isset($_REQUEST['get_cam_img'])){ echo showLastImage($_REQUEST['get_cam_img']); } else{ ?> <!DOCTYPE html> <html> <head> <title>Cameras</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <style> body { text-align : center; background-color : #000;} div.camera { display : inline-block; text-align : center; margin : 5px } img.camera { width : <?php echo $width; ?>px; height : <?php echo $height; ?>px; } </style> </head> <body> <?php foreach($cameras as $camera){ ?> <div class="camera" id="<?php echo $camera; ?>"> <img class="camera" id="img_<?php echo $camera; ?>" src=""> </div> <?php } ?> <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script> <script> var refresh = 3000; $( document ).ready(function() { setInterval(function() { var now = new Date().getTime(); $("div.camera").each(function( index ) { var camera_name = $( this ).attr("id"); console.log( "refresh "+camera_name+"..." ); var url = 'index.php?get_cam_img='+camera_name; var img_tmp = $("<img />").attr("src", url+"&"+now); $("#img_"+camera_name).attr("src", url+"&"+now); }); }, refresh); }); </script> </body> </html> <?php } ?>
ATTENTION : De même que dans l’article « Contrôle de l’éclairage avec le module Z-Wave Razberry », le code source ci-dessus est créer dans le cadre d’un exemple simple, il peut et doit être optimisé et sécurisé
Si vous souhaitez avoir accès à cette application web depuis l’extérieur de votre réseau local, je vous conseille fortement de mettre en place un contrôle d’accès afin d’éviter que n’importe qui ne puisse visionner vos caméras et espionner votre maison
Dans un prochain article, je décortiquerai une installation complète et sécurisé à double authentification : certificat client et mot de passe.
En attendant, vous pouvez sécuriser l’accès à votre système en demandant un login/mot de passe grâce à un fichier .htacces comme expliqué dans ce tuto : http://www.commentcamarche.net/contents/7-apache-les-fichiers-htaccess
Voyons maintenant comment prendre des photos à intervalles réguliers et les envoyer au « contrôleur » 🙂
Prendre des photos et les envoyer au contrôleur
Sur chaque Raspberry Pi équipé d’une caméra, vous devrez exécuter le script camera_shot.sh suivant :
#!/bin/bash camera_name="egeon" dst_url="http://ip_controleur/collect.php" refresh=5 # delais entre chaque photo while true ; do img_tag=$camera_name" - "`date "+%Y-%m-%d %A %B %H:%M:%S"` img_name="cam_img.jpg" ################################################################## # POUR LES MODULES RASPBERRY PI CAMERA ################################################################## raspistill -t 1 -w 640 -h 480 -q 50 -o $img_name ################################################################## # POUR LES WEBCAMS USB ################################################################## streamer -c /dev/video0 -f jpeg -s 640x480 -j 50 -o $img_name".jpeg" && mv $img_name".jpeg" $img_name ################################################################## # POUR LES CAMERAS IP # (le nom du script snapshot.cgi peut dependre du modele de camera) ################################################################## curl -o $img_name".jpeg" http://adresse_ip_camera/snapshot.cgi && mv $img_name".jpeg" $img_name ################################################################## if [ -f $img_name ] ; then convert -pointsize 15 -undercolor black -fill white -draw 'text 0,12 "'"$img_tag"'"' $img_name $img_name curl --form camera_image=@$img_name --form camera_name=$camera_name --form token=azerty $dst_url rm $img_name fi sleep $refresh done
Vider l’historique des images sur le contrôleur
Si vous utilisez le système dans l’état les images vont s’entasser sur le contrôleur indéfiniment. A titre d’exemple, si vous prenez des photos en 640×480 px toutes les 5 secondes avec une moyenne de 30Ko par photo, cela représente environ 500Mo de données par jour et par caméra ! Avec mes quatre caméras, je génère donc près de 2Go de photo toutes les 24 heures 🙂
Il convient donc de supprimer les photos au bout d’un certain temps. Pour ma part je conserve un historique de 2 jours seulement.
Pour supprimer automatiquement les photos de plus de 2 jours, vous pouvez appeler ce script clean_cam.sh dans une CRON task :
#!/bin/bash for i in `find /var/www/camera/* -type d` ; do find $i -type f -mtime +2 -exec rm -f {} \; done
Vision de nuit
Si comme moi vous souhaitez profiter de la vision nocture que permet le module Raspberry Pi Camera NoIR, vous pouvez facilement construire un petit projecteur infrarouge grâce à quelques LED de ce type : LED IR 5mm 53Sf4Bt Kingbright
J’ai réalisé un petit montage qui se branche directement sur la broche 5V du GPIO du Pi :
Cela fonctionne bien mais sur une très courte distance (< 3 mètres). Il faudrait des LEDs beaucoup plus puissantes pour éclairer une grande pièce. Dans tous les cas, vous devrez choisir des LEDs infra rouge ayant une longueur d’onde autour des 880nm.
Pour les grandes pièces, ou la carrément éclairer votre jardin, vous pouvez utilisez un projecteur infra rouge spécialement prévu pour cet usage. J’ai pu en voir plusieur, et mon choix s’est arrêté sur celui ci :
Vous pourrez le trouvez ici : http://www.amazon.fr/s/?_encoding=UTF8&camp=1642&creative=19458&field-keywords=projecteur%20infrarouge&linkCode=ur2&rh=i%3Aaps%2Ck%3Aprojecteur%20infrarouge&tag=magdiblog-21&url=search-alias%3Daps&linkId=GMVLO4AJWYVSV4CL
D’une grande qualité de fabrication, et équipé d’un détecteur de luminosité, ce projecteur étanche et alimenté en 12V éclairera sans problème votre jardin ou votre séjour 🙂
Avec le module Raspberry Pi Camera NoIR dans l’obscurité la plus totale, on y voit comme en plein jour 🙂
Exemple de composants pour un module caméra
A mon sens, le Raspberry Pi A+ est parfait pour les modules caméra de ce système car il est très compacte et peu gourmand en énergie, ce qui peut permettre l’utilisation sur batterie : Comment alimenter votre Raspberry Pi avec une batterie
Voici une sélection de composants parfaits pour la réalisation d’un module caméra :
Ping : Système de vidéo-surveillance abo...
Bonjour, merci bcp pour le tuto. Très sympa et intéressant. Je débute sur linux et c’est sympa. Malheureusement malgré les explications qui sont très bien, je n’arrive pas à répéter le tuto. Mon RPI-caméra prend bien les photos, mais le contrôleur ne reçoit rien du tout… je peine…. à l’aide.
Dans collect.php y a t’il une subtilité dans
dst_url= »http://ip_controleur/collect.php »
c’est bien du style
dst_url= »http://192.168.1.53/collect.php »
merci de m’aider…
Damien
Hello,
Merci pour tes encouragements 🙂
Oui c’est bien cela qu’il faut faire au niveau de l’adresse IP.
Est ce que tu arrive à atteindre le collect.php à partir d’un navigateur ?
Re bonjour, j’avance avec le tuto. Je peux prendre les photos sur la camera et envoyer sur collect php. J’ai dû modifier le dossier de réception
$dst_dir = ‘camera’;
en
$dst_dir = ‘/var/www/camera’;
je reçoit correctement les fichiers dans un dossier « egeon » dans « camera ». (j’ai laissé les mêmes noms pour l’instant).
Mon énorme problème est le script de index.php. lorsque je rentre l’adresse ip sur mon navigateur, je tombe sur la page index avec les emplacements des photos mais rien ne se passe.
j’ai bien installé apache et php comme dans l’autre tutorial. mais rien à faire…
j’y ai passé des heures et rien ne marche, à l’aide!
Damien
Hello,
Si tu as laisser la conf Apache par défaut, le script index.php doit se placer dans le répertoire /var/www/default/.
Est ce bien le cas ?
Bonjour,
Super tuto! J’aime bien cette vision cerveau/capteurs et prendre des photos plutôt que du film.
Cependant j’ai un petit soucis :
Tout fonctionne sauf l’affichage des images. J’ai bien ma page mais elle est noire avec une icône d’image absente.
Il ne rentre pas dans la fonction :
$( document ).ready(function() {
setInterval(function() {
var now = new Date().getTime();
$(« div.camera »).each(function( index ) {
var camera_name = $( this ).attr(« id »);
console.log( « refresh « +camera_name+ »… » );
var url = ‘index.php?get_cam_img=’+camera_name;
var img_tmp = $(« »).attr(« src », url+ »& »+now);
$(« #img_ »+camera_name).attr(« src », url+ »& »+now);
});
}, refresh);
});
J’ai pourtant testé pas mal de trucs, j’ai mis des points d’arrêts un peu partout pour voir mais rien a faire il rentre pas dans cette partie du javascript.
J’ai aussi essayer un :
en créant le fichier jquery-1.11.0.min.js à partir de la source.
Une idée?
Cordialement.
Romain.
Hello,
Est ce que tu arrives à afficher directement les images dans une balise HTML sans passer par la fonction JavaScript ?
Hi Olivier, did you get this working? I experience the same problem….
You may install the FireBug plugin for you web browser in order to get further information in the javascript console debug
Ok fixed it! 🙂
The class= »camera » was missing in the index.php script!
old: <div id=" »>
new: <div class="camera" id=" »>
Yes, you are right 🙂 I just update the script, thanks 🙂
For the Imagick class you need to do the following:
apt-get install php5-imagick
edit php.ini and add extension=imagick.so
However I can’t get the Jquery refresh to work…
Any help is appreciated.
Exactly, you need to install the php5-imagick package in order to get things run correctly 🙂
What is your issue with the JQuery refresh ? You may install the FireBug plugin for you web browser in order to get console debug information 🙂
Ping : Surveillance | Pearltrees
Hello.Will you be producing any scripts to enable « Motion » detection and email / telephone warnings. As you have in other projects? Thanks for the information already posted. I’m enjoying getting things to work.
Hi Bob,
I may publish a new article for these functionnalities soon 🙂
Bon article (comme les autres)
C’est intéressant car ca consommera moins qu’un motion sur le Raspberry juste pour avoir accès à la camera. En plus personnellement vu que les RPi font tourner squeezelite aussi, motion consomme pas mal de cpu et bande passante par moment. Là c’est l’idéal l’envoi en central des photos pour traitement centralisé.
As-tu des pistes sur ce qui serait utilisable pour faire la reconnaissance de mouvement en central avec peut être une sauvegarde dans un autre répertoire ? OpenCV ?
Hello,
Oui OpenCV est une bonne solution, mais un peu « usine à gaz » à mon goût 😛 Et puis je préfère toujours faire les choses par moi même lorsque c’est possible, pour que cela colle parfaitement avec ce que j’attends 😛 Je pense donc utiliser la fonction compre de ImageMagick pour commencer 🙂
Sympa ce tuto, merci Olivier!
J’ai un soucis avec camera_shot.sh. Le fichier image est totalement noir et la console me renvoie l’erreur « convert : commande introuvable ».
J’ai l’installation de base de Raspbian. Olivier pourrais-tu ajouter à ce tuto les installations complémentaires à réaliser afin de les faire toutes en même temps et non au fil des erreurs. Cela aiderait bien les newbiz comme moi!
Merci
Hello,
Il convient d’installer imagemagick 🙂
Bonsoir,
J’ai enfin réussi à faire fonctionner la commande convert. Visiblement ma première installation ne c’était pas bien passée.
Les photos sont prises mais je ne comprends pas, elles sont totalement noir avec le nom de la camera, la date et l’heure mais noir.
Là, je séche si quelqu’un peut me donner un coupe de main. (il n’y a rien devant la camera et il y a de la lumiére ;o) )
Merci
Trouvé!
Good 🙂
La nuit était tombée, tu avais oublié d’allumer ta chambre ?
Bonsoir
J’ai suivi ton tuto. Pas de problème.
Cependant je ne comprends pas comment tu relies la camera IP Haden.
Est ce qu’elle est reliée directement au RPi (traitement par motion), ou est ce que tu passes par la liaison wifi/IP ? Dans le dernier cas comment récupérer les images ?
Merci par avance.
Hello,
La caméra Heden est une caméra IP, il convient donc d’utiliser la partie du script qui correspond à ce type de caméra :
##################################################################
# POUR LES CAMERAS IP
# (le nom du script snapshot.cgi peut dependre du modele de camera)
##################################################################
curl -o $img_name".jpeg" http://adresse_ip_camera/snapshot.cgi && mv $img_name".jpeg" $img_name
Hello,
J’ai un souci, j’ai la camera noir (pi). Cependant il me met toujours l’erreur :
mmal: mmal_vc_component_enable: failed to enable component: ENOSPC
mmal: camera component couldn’t be enabled
mmal: main: Failed to create camera component
mmal: Failed to run camera app. Please check for firmware updates
Aucune solution trouvée sur le net n’a régler mon soucis, as-tu été confronter à ce soucis ?
Merci pour le tuto dans tout les cas =)
Ping : Video | mes-notes
bonjour
solution vraiment intéressante.
Une petite question : j’ai l’intention de ne mettre qu’une seule caméra.
Puis-je mettre dans le même Raspberry la fonction caméra et la fonction Controle ?
Ou bien est-il nécessaire d’appliquer la méthode décrite : 1 x RPi Caméra ET 1 x RPi Controle ?
Merci
Bonjour,
Oui tout à fait, tu peux tout mettre sur un seul Pi 🙂
merci. Je vais essayer.
Bonjour,
votre tuto est très intéressant . Mon problème c’est que je n’arrive pas a créer un dossier « camera » avec la fonction: mkdir($dst_dir, 0777, true); dans le fichier collect.php.
merci.
Salut Olivier encore un article intéressant!
Apres avoir réussi à mettre au point mon sytèmende timelapse avec mon DSLR, gphoto et une cle 3g (pour m envoyer des email à chaque debut de boucle, ainsi que l envoie de la dernière photo de chaque fin de boucle (ca me permet de contrôler qu il n’y ai pas eu de sauts d images) ), je me lance dans un nouveau projet…
Crois tu qu il est possible à partir d’une détection de mouvement de lancer un programme pour jouer un son ou une vidéo, je fais des recherches en ce moment mais je ne trouve pas trop d’informations à ce sujet… Qu elle technique utiliserais tu ? Je pense vraiment que c’est quelque chose de réalisable mais je n ai pas encore trouver la bonne méthode/software pour le faire 😀
Merci d avance pour ta réponse!
Hello Mat,
Oui c’est tout à fait possible. Le premier truc qui me vient à l’esprit c’est d’utiliser Motion, qui permet de lancer un script lorsqu’il détecte un mouvement à la caméra 🙂
Bonjour,
J’ai voulu essayer de mettre mon pc en tant que contrôleur. Mais pas moyen, j’ai ce message d’erreur :
pi@raspberrypi ~ $ sh camera_shot.sh
camera_shot.sh: 16: camera_shot.sh: convert: not found
403 Forbidden
Forbidden
You don’t have permission to access /
on this server.
Apache/2.4.9 (Win64) PHP/5.5.12 Server at 192.168.1.20 Port 80
Pourriez vous m’aidez.
Merci
Merci pour ce super tuto.
Cependant, j’ai encore quelques petits souci. Je réceptionne enfin les images, mais impossible de les afficher sur la page web.
A l’aide …
Quel est le souci ?
Je n’arrive pas à avoir les images sur la page index.php alors que les images sont bien dans le dossiers egeon. Merci d’avance pour votre aide
Problème de droits sur les fichiers ?
Apparemment non, j’ai le contrôle total sur les fichiers. Est il possible que vous m’aidiez directement en message privé. Merci
Vous oui, mais Apache peut etre pas… Je ne peux pas vous aider en directe pour le moment navré
C’est peut être que les droits d’accès aux images ne sont pas bons. Quels sont les droits sur les images et le dossier egeon ?
Merci pour votre aide. Je suis novice, comment puis je accéder aux droits apache ?
Dans le repertoire où se trouve le dossier egeon, que donne la commande « ls -al »
J’utilise wamp sous windows pour le controlleur.
et je ne sais pas comment modifier les droits
Ahhhhh dans ce cas il faut changer le chemin qui pointe vers les images
tout est bien qui fini bien. tout fonctionne merci pour votre aide. C’etait bien les droit qui empêchaient les images de s’afficher.
Aujourd’hui, j’essai de capturer plus d’images j’en voulais une toute les 30 secondes. j’ai changer le refresh=5 en refresh=0,5 mais ça ne le prend pas. Ensuite J’ai essayé avec une seconde mais j’ai l’impression que l’enregistrement est bridé. je n’obtiens pas une image par seconde sur la raspberry. Peut être est ce la raspberry qui n’est pas assez puissante, sinon, ai-je oublié une subtilité. Je voulais essayer de capture plus d’images car si on bouge devant le capteur, les photos sont floues.
Joyeux noel
On peut tout a fait capturer plysieurs images par secondes 🙂 Pas de souci 🙂 Il faut simplement écrire 0.5 et non 0,5 et il faut changer les paramètre de timeout qui a pour but de laisser le temps à la camera de gérer la lumière et le contraste 🙂
Joueux Noël à toi aussi 🙂
🙂
Bonjour,
Tout d’abord merci pour le tuto, tout a fonctionné assez rapidement !
Savez vous quels sont les réglages pour avoir un rafraichissement des images plus rapide, pour une visualisation un peu plus fluide?
J’ai réglé mes caméras pour prendre une photo chaque seconde, j’ai modifié la valeur du var refresh, mais l’affichage ne correspond toujours pas.
Merci d’avance !
Bonjour,
Pour prendre des photos chaque seconde, il convient d’utiliser le paramètre -tl « timelapse ». Toutefois, cette méthode sera toujours limitée par le transfert de l’image. Pour avoir un affichage fluide, vous pouvez essayer mjpg-streamer : http://sourceforge.net/projects/mjpg-streamer/
Je suis moi même en train de tester mjpg-streamer et j’écrirai bientôt un article à ce sujet 🙂
Si la caméra est de type GigE vision Comment puis-je obtenir une image à l’aide d’une carte raspberry.
En utilisant le GigE Vision Stream Protocol (GVSP) en principe :/
Bonsoir
J’ai une petite question
J’ai des caméras analogiques
Pensez vous que je puisse les connecter et si oui peut on envisager une solution type encodeur vidéo où je pourrais y concentrer plusieurs caméras
En effet je souhaiterais me servir du raspberry comme une encodeur
Merci d’avance
Hum… Il faut une carte d’acquisition video pour faire cela :/
Merci pour votre réponse Qui me cconfirme bien que c’est possible
Donc via un raspberry doté d’une carte d’acquisition analogique (et connecté sur un réseau Ip)
et une application je peux diffuser ou consulter et enregistrer via un réseau Ip mes caméras analogiques
En principe c’est faisable oui 🙂
Merci pour vos réponses
C’est sympa
Je vais bosser sur mon projet et je reviendrai très certainement vers vous
Avec plaisir 🙂
Salut, super projet! Mais à cause de mes actuelles très petites connaissances en php, je bloque…
Pour l’instant je voudrai utiliser mon pc sous ubuntu comme contrôleur, j’ai mon serveur lampp d’installé. Quand j’accède à index.php j’ai les 4 cadres mais rien ne s’affiche. Et je n’ai pas l’impression que ma camera usb prenne des photos…
dans camera_shot j’ai mis mon ip
Help please,
Bonjour Baptiste,
Pas de souci, l’intérêt de la chose est justement d’apprendre et d’approfondir ses connaissances 🙂
Pour savoir d’où vient le problème, le mieux est de lancer chaque étape l’une après l’autre.
Commencez par voir si vous parvenez bien à récupérer vos photos en utilisant cette commande (si vous utilisez bien une webcam en USB) :
Si cela fonctionne correctement, testez ensuite l’envoi de l’image à votre serveur contrôleur, et ainsi de suite 🙂
Bon courage, et bonne continuation 🙂
Merci!
Après avoir compris qu’il fallait exécuter le camera_shot.sh, et changer la ligne comme tu m’a dis pour le test ça prenait une photo *__*
j’ai ensuite remis le code comme il fallait j’ai installer streamer et curl. Je suis maintenant confronté à un problème de permission, j’ai déjà tout essayé sauf ce qu’il faut apparemment… :'(
voila ce que le terminal m’affiche (pour l’instant mon pc est mon contrôleur):
files / video: JPEG (JFIF) / audio: none
ax fill: audio 0/0, video 1/16, convert 1/16
Warning: move_uploaded_file(camera/egeon/cam_egeon_1433171230.jpg): failed to open stream: Permission non accordée in /opt/lampp/htdocs/collect.php on line 17
Warning: move_uploaded_file(): Unable to move ‘/opt/lampp/temp/phpOzPgpU’ to ‘camera/egeon/cam_egeon_1433171230.jpg’ in /opt/lampp/htdocs/collect.php on line 17
help please
C’est bien, on avance 😉
Ce problème de droit est courant, il suffit de changer les droits sur le répertoire dans lequel tu souhaites stocker les photos :
Résolu avec chmod -R 777 sur le dossier *__*
Dire que hier j’y connaissais rien, encore merci!
Ah bah voilà ^^ Nos messages se sont croisés 🙂
Ouais apparemment!
Ok, donc maintenant mon dossier se remplie de photos lorsque je lance le .sh
mais les carrés noir sont toujours vides… :'(
lorsque je fais inspecter l’élément sur la case j’ai ca :
src= »index2.php?get_cam_img=egeon&1433179409256″
alors que le nombre suivant le nom de mes photos n’arrive pas a 1433179409256
Je ne sais pas s’il y a un rapport?
j’ai aussi voulu réduire l’intervalle entre 2 prises, le mettre a 0.3, ca fonctionne (sauf que ca marque pas le date etc sur la photo) mais ca me met dans le terminal:
./camera_shot.sh: ligne 20: -undercolor : commande introuvable
files / video: JPEG (JFIF) / audio: none
convert.im6: l’option a besoin d’un argument `-pointsize’ @ error/convert.c/ConvertImageCommand/2159.
Pourrais-je te joindre en pv par email par exemple pour éviter de surcharger le forum? au cas ou j’aurai d’autres questions? 😀
bonjour, j ai le meme probleme que baptiste j ai bien 4 carré mais pas de photo
j ai bien les photos qui arrive dans /var/www/camera/egeon
j ai fai un sudo chown -R www-data:www-data //var/www/camera/egeon && sudo chmod -R 777 /var/www/camera/egeon mais ca ne fais rien
il y a quelque chose a modifier dans le fichier collect et index?
Bonjour,
j’ai effectivement le même problème.
Je ne comprends d’ailleurs pas comment cela peut fonctionner pour les autres car les images sont générées toutes les x secondes par camera_shot.sh ce qui n’est pas forcément synchro avec la requête de récupération de cam.php qui prend le résultat de la fonction Date().getTime().
Olivier, HELP !
Merci beaucoup
ce qui est bizarre c’est que le fichier généré affiche un timestamp sur 10 chiffres et celui recherché par cam.php sur 13 chiffres…
Hello,
Peu importe le nombre de chiffre dans le timestamp (d’autant que celui ci ne peut qu’augmenter avec le temps ;). Le timestamp est juste là pour être certain qu’en prennant le dernier fichier par ordre alphabétique, on tombe naturellement sur la dernière image en date 🙂
Si vos fichiers images sont bien présentes dans le bon répertoire et que tous vos chemins d’accès sont bons (y compris dans le script javascript), mais que vous ne voyez pas les images s’afficher à l’écran, c’est qu’il y a un pb de droit d’accès aux fichiers. Essayez un petit chmod -R 777 sur le répertoire parent qui contient les répetoires par caméra, puis éventuellement redémarrez Apache 🙂
Le mieux pour débugger est d’utiliser une extension pour votre navigateur, type FireBug, qui vous permettra de voir ce qui coince. On peut également consulter les logs PHP au cas où il y aurait une erreur dans le script PHP.
Bon courage et bonne continuation à vous, et n’oubliez pas : « Si on ne se compliquait pas un peu la vie, ce serait beaucoup moins drôle » 😉
Merci beaucoup pour la réponse Olivier,
le fameux redémarrage d’Apache !!!!
j’ai donc « tout redémarré » et cela fonctionne !!
Bonne journée.
😉
Bonsoir Olivier,
J’ai une petite idée concernant ce projet vraiment très intéressant, j’aimerais savoir si il ne serait pas possible de mettre un tel système, non pas en local, mais par exemple à l’intérieur de plusieurs maison ? Par exemple, la camera n°1 chez Mamie, la seconde chez Papa/Maman et la dernière chez Tatie; le tout relier au contrôleur se trouvant chez Bibi.
Bon certes vu comme ça, on dirait de l’espionnage mais bon l’idéal est à creuser, non ?
Oui c’est tout à fait possible 🙂 Il n’y a même pas grand chose à faire ^^ Il suffit d’ouvrir le port qui va bien sur les différentes box internet 🙂
Ping : Prolonger la durée de vie de vos cartes SD sur Raspberry Pi
Instead of motion you can also use Kerberos.io, it’s also open-source and a lot more user friendly to install and configure. You can find more information on the website.
Excellent ! Thanks a lot for the tips 🙂 I wasn’t aware of that kerberos soft 🙂
Ping : Kerberos.io : vidéosurveillance pour Raspberry Pi - MagdiBlog
Bonsoir Olivier,
merci pour ce tutoriel très complet. J’aimerais déclencher les photos prises par les Pi depuis l’ordinateur de contrôle depuis Processing par exemple, pas de time-lapse donc, que faudrait-il changer dans le script camera_shot.sh?
Bonjour,
L’avantage du montage avec mjpeg-streamer c’est qu’on peut faire les deux en même temps 🙂
Que souhaitez vous faire exactement ?
Merci de me poser la question, ça me permet d’y réfléchir 🙂
Pour les besoins d’un performance, je dois installer une dizaine de caméras autour d’un plateau. Deux danseurs évolueront sur le plateau. J’aimerai pouvoir
1. Prendre des photos d’eux à des moments précis et ce sur une seule caméra à la fois.
2. Enregistrer les images sur un ordinateur central via wifi ou ethernet
3. Les monter automatiquement en GIF animés et les projeter via un Beamer.
Je n’ai donc pas besoin d’un flux continu d’images provenant de toutes les caméras. Déclencher la prise de photos et pouvoir les enregistrer sur un ordinateur central distant serait la solution qui me permettrait de préserver la bande passante et bénéficier du format HD des photos.
Dans ce cas vous pouvez utiliser directement la commande raspistill, sans avoir besoin d’un logiciel annexe.
Un petit script bash ou Python sur chaque caméra pour déclencher la prise de photo à distance et hop, le tour est joué 🙂
Merci, je t’invite à la première à Genève, si tu habites pas Québec la Martinique ou l’île Maurice ,-)
Pour la création de gif, vous pouvez le faire facilement avec imagemagik
Ping : Webcam | Pearltrees
Ping : Raspberry - Remote things | Pearltrees
j’ai reçut un camera IP qui lui fonctionne sur VLC avec un flux RTSP sous l’adresse suivante rtsp://user:mdp@192.168.xx.xx:80/0
merci de m’aider pour trouver le flux avec motion 3.2.12 sur un raspberry pi b+
Bonjour,
Merci pour l’article qui m’a été très utile.
Cependant je n’arrive pas à le faire fonctionner avec des clients Android. J’ai testé sur un smartphone et une tablette, la page se charge mais les rafraichissements ne semblent pas se faire => Pas de requêtes régulières vers le serveur. J’ai testé à chaque fois sur 2 navigateurs web différents (Chrome et Navigateur natif).
En revanche, sur un poste Windows classique ainsi qu’une Debian je n’ai pas le problème.
Si tu as une idée je suis preneur.
Merci.
Bonjour à tous
Super tuto 🙂
Mais j’ai une erreur lors du lancement du camera-shot.sh
—————————————————————————————————–
# sh ./camera_shot.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 33140 100 33140 0 0 1975k 0 –:–:– –:–:– –:–:– 2157k
417 – Expectation Failed
417 – Expectation Failed
—————————————————————————————————–
Le probème viens de cette ligne « curl –form camera_image=@$img_name –form camera_name=$camera_name –form token=azerty $dst_url »
malheurement, je ne trouve pas de solution ….
Si quelqu’un peux m’aider, svp
Merci d’avance
Bonsoir,
Oui très intéressant comme tuto, mais Idem, je n’arrive pas à faire fonctionner la dernière comande curl: « curl –form camera_image=@$img_name –form camera_name=$camera_name –form token=azerty $dst_url
En fait je ne comprends pas le rôle de cette fonction et ce qui ne fonctionne pas
j’obtiens les erreurs suivantes:
404 – Not Found
404 – Not Found
Bonjour, j’ai regardé votre tuto mais j’arrive à un problème que je n’arrive pas à régler tout seul (je suis débutant). J’aimerai réaliser presqu’éxactement la même chose que dans ce tuto à quelques détails près :
J’aimerai que mon raspberry fasse la captation d’image (à l’aide d’une webcam usb) + le traitement et l’affichage de l’image sur le site web stocké sur le raspberry.
Cependant j’ai essayé de comprendre un peu vos codes mais je n’arrive pas bien à les comprendre donc à faire les modifications nécessaires.
De plus, je ne suis pas sûr d’avoir tout les programmes nécessaires pour réaliser cela (je n’ai pas compris si on a besoin de mjpg-streamer ou non ?).
J’espère être compréhensible 🙂
Si ce n’est pas trop demandé, pourriez-vous m’éclairer un peu s’il-vous-plaît ? Merci
Ping : Vidéo surveillance avec l’existant – matdomotique
Merci beaucoup pour cet article complet et bien expliqué, c’est très didactique !
Bonjour et merci pour cette article très intéressant.
J’ai un problème concernant le script de capture d’image.
Je possède actuellement un serveur apache fonctionnement avec le module SSL et dans le paramètre dst_url du script, j’ai donc rentré l’adresse sous cette forme « https://domaine.fr/collect.php ».
Au lancement du script un message d’erreur apparaît :(Curl:(60) Problème de certificat SSL : impossible d’obtenir le certificat d’émetteur local)
J’ai essayé divers commandes pour désactiver la vérification (-k, –insecure) mais en vain.
Pourriez vous m’éclairer sur ce point ? En vous remerciant.
Bonjour,
Lorsque je lance le script camera_shot.sh , il m’affiche le message suivant:
mmal: main: Error opening output file: cam_img.jpg~
No output file will be generated
Jai beau cherché dans le forum, je ne vois pas de réponse à ce genre de problme.
Merci d’avance pour votre aide.
Ping : Raspberry Pi | Pearltrees
bonjour ou bonsoir, je suis Guyto,de port-au -prince.c’est tres interessant d’ etre capable d’ installer un systeme d’une telle utilite,mais en terme de cout si on veut l’installer.combien on peut depenser pour le realiser.
Ping : Passerelle réseau sécurisée | Pearltrees
Bonjour
Je souhaiterais envoyer des images d’un pi à un autre pi en wifi, sans réseau internet.
Le sens d’envoi des images doit être dans les deux sens, avec le son si possible.
Avez vous une idée de comment faire ?
I’image devra être accessible par un programme perso en c++
CDL