Affichage RaspiCam depuis serveur FTP

Photo prise par le RaspiBerry Pi en mode cron
Dernière image sauvegardée

Attention, page créée le 01/01/2017 à 02h15 du matin ; même si je ne bois plus du tout d’alcool depuis plus de 24 ans, la fatigue peut (insidieusement) aider à faire des fautes …

En trainant sur des forums pour apprendre et aider, j’ai testé un truc (plus ou moins essayé il y a qq années ; sans trop de succès à l’époque).

L’idée est de faire un script qui lance la prise d’une photo puis de la déposer (téléverser ou “uploader”) sur un serveur distant (en FTP) pour la voir depuis le Net.

En ces temps de joie, on joue avec des Raspberry Pi alors, on va faire ça avec la RaspiCam (la Caméra spécialement étudiée pour le Raspberry Pi) et un RaspBerry Pi3 piloté par SSH 😉

Histoire de jouer, je me suis dit “Ho, ben, depuis 20 ans que tu utilises GNU/Linux, tu devrais essayer ‘Cron’ tout de même“.

(oui, oui, on se parle lui et moi … ou moi et lui … enfin, nous 2 quoi. Grrr, ne nous énervez pas ; on a déjà du mal entre nous.)

Bref,

1 – On active le FTP

sudo apt-get install ftp

2 – Création du dossier

mkdir /home/pi/webcam/

3 – Se déplacer dans le dossier

cd /home/pi/webcam/

ou (puisque nous sommes nous sommes déjà dans /pi)

cd webcam

4 – Création d’un script pour prise de la photo et expédition sur le serveur FTP (merci ‘rbwebdev‘) :

sudo nano transfert.sh

puis

#!/bin/bash HOST='ftp.votre_domaine.truc' USER="username" PASSWD="password" FILE="photo_rasp.jpg" REMOTEPATH='/www/rasp' raspistill -w 648 -h 486 -o /home/pi/raspicam/photo_rasp.jpg -q 75

sleep 15
ftp -n $HOST <<END_SCRIPT quote USER $USER quote PASS $PASSWD cd $REMOTEPATH binary put $FILE quit END_SCRIPT exit 0

Je vous laisse adapter à votre situation.

Quelques explications rapidement
HOST=’ftp.votre_domaine.truc’ USER=”username” PASSWD=”password” correspond à votre connexion FTP ; vous avez ces informations par votre hébergeur si vous avez un hébergement.
FILE=”photo_rasp.jpg” est juste le nom de fichier que je veux utiliser pour mes images.
REMOTEPATH=’/www/rasp’ correspond au dossier où doivent être envoyées les images.
raspistill -w 648 -h 486 -o /home/pi/raspicam/photo_rasp.jpg -q 75 est “simplement” la ligne de commande pour que le Raspberry Pi prenne une photo de taille 648×486 enregistrée dans le dossier /home/pi/raspicam/ sous le nom photo_rasp.jpg avec une qualité abaissée à 75%
Ensuite, on fait une pause de 15 secondes (le Raspberry Pi en question est un Rpi2 donc on lui laisse le temps 😉 On est cool)
Et la suite ftp -n $HOST <<END_SCRIPT quote USER $USER quote PASS $PASSWD cd $REMOTEPATH binary put $FILE quit END_SCRIPT exit 0 est purement du codage 🙂

Mais vous verrez plus bas un script “encore plus mieux”

3 – Ensuite, j’ai ajouté une ligne dans le fichier crontab pour déclencher ce script toutes les 5 minutes si le RaspBerry est en route.

On édite le fichier crontab :

sudo nano /etc/crontab

Au début, je faisais :

*/5 * * * * /home/pi/webcam/transfert.sh

Mais ça ne fonctionnait pas.

Il faut faire :

*/5 * * * * cd/home/pi/webcam && bash transfert.sh

4 – Ensuite, j’ai rechargé  :

/etc/init.d/cron reload

Ouf ; es fonctionniert ! 😉

La preuve :

 

Photo prise par le RaspiBerry Pi en mode cron
Dernière image sauvegardée lorsque le Raspberry dédié est en fonctionnement

L’image affichée sera la dernière photo prise et envoyée sur le serveur.

En effet, une nouvelle photo est prise toutes les 5 minutes aussi longtemps que le Raspberry Pi tourne et les photos s’écrasent les unes les autres.

On ne garde donc que la dernière.

Ensuite, je vais voir pour trouver/modifier/adapter/compiler/concaténer des scripts pour “tagger” (annoter en Français ?) la photo avec des informations sur un bandeau comme je l’avais fait dans des tests de surveillance par vidéo dans le temps.

Donc … A bientôt,

Edit du 04/01/2017.

Ce soir, j’ai essayé et réussi le coup du tampon.

Alors, on va faire simple pour le moment.

On met à jour le système :

sudo apt-get update && sudo apt-get upgrade -y

On installe imagemagick :

sudo apt-get install imagemagick

On modifie le script transfert.sh :

#!/bin/bash HOST='ftp.votre_domaine.truc' USER="username" PASSWD="password" FILE="photo_rasp.jpg" REMOTEPATH='/www/rasp' raspistill -w 648 -h 486 -o /home/pi/raspicam/photo_rasp.jpg -q 75

sleep 15

time=$(date +"%d/%m/%Y -  %H:%M:00")

convert photo_rasp.jpg -font Bookman-DemiItalic -draw "text 20,20 '$time | Alban | https://dieteticien.eu' " photo_rasp.jpg
sleep 2

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd $REMOTEPATH
binary
put $FILE
quit
END_SCRIPT
exit 0

Et voilà !

(Ha, oui, Pour quitter nano, faites “Ctrl + x” puis “o” puis “Entrée” si vous voulez sauvegarder les modif”

Bon, je vais chercher comment placer les infos où je veux et faire une sorte de bandeau, mais comme je joue à tout ça juste pour le fun et que la grande famille impose, de fait, de ne m’y coller qu’en soirée … J’avoue que j’ai les yeux qui piquent !

Bonne Nuit 😉

Edit du 22/01/2017.

Depuis quelques jours (le 19/01/2017), après avoir compilé/retravaillé divers scripts trouvés sur le Net, j’ai bien modifié mon code.

En gros,

Je fais une photo nommée photo_rasp.jpg

Avec ImageMagick, j’ajoute un bandeau (rectangle) aux points de coordonnées 0,426 et 648,486 (déterminées en ouvrant l’image dans Gimp) puis j’inscris des informations.

L’image est sauvegardée sous un autre nom : photo_rasp2.jpg

Comme les photos s’écrasent les unes les autres, j’ai ajouté un bout de code pour enregistrer photo_rasp2.jpg sous un autre nom photo_rasp3.jpg qui sera elle même renommée selon ses données EXIF ; par exemple 2017-01-21-10h55mn06s.jpg

Ensuite le fichier photo_rasp2.jpg est balancé, par FTP, sur le serveur tandis que les autres images sont stockées dans le RaspBerry Pi.

Et, là, j’ai testé une fonction sympa de ImageMagick : transformer un lot d’image en fichier GIF pour en faire un fichier GIF animé.

Voilà le résultat :

Time Lapse en mode GIF tout simple
TimeLapse du 21/01/2017 en GIF animé (cliquez ici pour visualiser ; attention fichier de 15 MB ; soyez patient ; il faut laisser le temps au serveur de charger le fichier)
Un petit deuxième pour la route ; TimeLapse du 22/01/2017 en GIF animé via ImageMagick en ligne de commande
TimeLapse du 22/01/2017 en GIF animé via ImageMagick en ligne de commande (cliquez ici pour visualiser)

Bon, j’avoue, l’idée, c’est de faire une caméra extérieure qui prendrait, via tache cron une photo tous les jours à la même heure afin faire un time lapse basé sur 1 photo par jour durant toute une année …

Ho, ben, on dirait que j’ai encore un truc à ajouter à ma longue liste des “à faire” …

A bientôt,

A propos de Alban

Papa de 4 enfants étant lui même resté un enfant. Tombé par obligation dans l'informatique à 22 ans pour le boulot et s'étant "un peu" pris au jeu ... Pas un génie de l'informatique (loin de là), mais intéressé et carrément orienté Linux et entraide.

5 commentaires à propos de “Affichage RaspiCam depuis serveur FTP”

  1. Rétroliens : Afficher une image actualisée sur votre site – TREVILLY.COM

  2. Rétroliens : Afficher une image actualiser sur votre site – TREVILLY.COM

    • Bonsoir Julian,

      Il te faut un serveur distant (ou un site, comme ici trevilly.com), soit sur un hébergeur comme OVH (mon cas) soit sur une machine chez toi.
      Si on prend l’exemple de ‘trevilly.com’, alors je fais pointer vers ‘ftp.trevilly.com’

      Attention, il faut aussi, sur ton serveur, créer le dossier utile.
      Dans mon script, j’ai noté :
      REMOTEPATH=’/www/rasp’
      Donc, auparavant, je me suis connecté sur mon serveur avec un logiciel FTP (comme CyberDuck ou FileZilla), puis j’ai créé le dossier ‘rasp’ au sein du dossier “www” (c’est souvent le dossier ‘www’ qui est le dossier par défaut sur un site).

      Cordialement,


      Alban

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*