Webcam sur site

Photographie ultra-rapide, pilotage d'imprimante 3D ou de CNC, fabrication de bière.... Enfin tout ce que le Raspberry peut gérer trouvera sa place dans cette rubrique

Modérateur : Francois

nimportenawak
Messages : 17
Enregistré le : ven. 8 avr. 2022 15:43

Re: Webcam sur site

Message par nimportenawak » jeu. 21 avr. 2022 12:28

Bon là le up fonctionne, mais pas le bandeau qui indique la prise de vue et d'autres infos

Code : Tout sélectionner

#!/bin/bash

HOST='masque'
USER="masque"
PASSWD="masque"
FILE="image.jpg"
REMOTEPATH='/cam/images'

# On se place dans le bon répertoire
cd /home/pi/webcam

# Créer l'image et pause de 15 secondes
raspistill -w 800 -h 600 -o image.jpg -q 100
coderetour=$?
if [ $coderetour -ne 0 ]; then
   echo "Erreur dans la prise de photo"
   exit 1
fi

sleep 15


## Définition du format de la date à inscrire (en texte) sur l'image
time=$(date +"%d/%m/%Y - %H:%M:00")

# Choix automatique de la taille de la police de caractères
if [ $width -ge $height ]
then
pointsize=$(($width))
else
pointsize=$(($height))
fi

echo " Width: $width, Height: $height. Using pointsize: $pointsize"

# Script de transformation de l'image avec création du bandeau + ajout du texte puis enregistrement sous un autre nom (le nom du fichier à transférer)

convert "image.jpg" -fill '#DCDCDC' -draw 'rectangle 0,540,800,600' \
-gravity SouthEast -pointsize 18 -font Bookman-DemiItalic -fill '#7F7F7F' -annotate +$pointsize+10 "https://monsite" \
-gravity SouthEast -pointsize 15 -fill '#7F7F7F' -annotate +$pointsize+30 "@ " \
-gravity SouthWest -pointsize 18 -font Bookman-DemiItalic -fill '#7F7F7F' -annotate +$pointsize+10 "$time" \
-gravity SouthWest -pointsize 15 -fill '#7F7F7F' -annotate +$pointsize+30 "Réalisée avec un Raspberry Pi" \
-quality 100 \
"image2.jpg"

sleep 2


# Définition d'un autre format de date pour l'insérer dans le nom du fichier de sauvegarde

time=$(date +"%d-%m-%Y_%H-%M")



sleep 2

# On exécute le script d'upload
cd /home/pi/webcam
lftp sftp://$USER:$PASSWD@$HOST  -e "cd $REMOTEPATH; put $FILE; bye"

# On supprime l'image originale
rm -rf image.jpg
Resultat j'ai bien une image uplodée mais pas de marquage de la photo

Code : Tout sélectionner

pi@raspberrypi:~/webcam $ bash up.sh
 Width: , Height: . Using pointsize: 0
cd ok, cwd=/cam/images           
371586 octets transférés en 3 secondes (104.5 KiB/s)                           
pi@raspberrypi:~/webcam $
Il me manque un truc avec Width: , Height: c'est bien ça?

piper
Raspinaute
Messages : 343
Enregistré le : sam. 5 juin 2021 18:57

Re: Webcam sur site

Message par piper » ven. 22 avr. 2022 20:08

Bon
Voilà toute la 1ère partie, elle crée FILE avec ton bandeau
Pour l'envoi via sftp (ou ftps) ce va être bien plus compliqué. Ca dépend si ton provider exige une clé ou pas, du mot de passe (attention si ça convient un $ ou des espaces), des exigences ssl/tls de ton provider etc.....

Donc la 1ère partie (et qui fonctionne et s'arrête à la 1ère erreur rencontrée avec un beau message )

Code : Tout sélectionner

#!/bin/bash
#M'en branle pour le moment
HOST='toto'
USER="toto"
PASSWD="toto"
PORT="22"
REMOTEPATH='/toto/'
FILE="photo_camera2.jpg"
LOCALPATH='/home/pi/raspicam'
cd $LOCALPATH

raspistill -w 800 -h 600 -o /tmp/photo_camera.jpg -q 100
code_retour=$?
if [ $code_retour -ne 0 ]; then
   echo "Erreur prise de photo"
   exit 1
else
   echo "Photo prise !"
fi

#si ça fait plaisir
sleep 5

convert "/tmp/photo_camera.jpg" -fill '#DCDCDC' -draw 'rectangle 0,540,800,600' \
-gravity SouthEast -pointsize 18 -font Bookman-DemiItalic -fill '#7F7F7F' -annotate +810 "https://monsite" \
-gravity SouthEast -pointsize 15 -fill '#7F7F7F' -annotate +830 "mapage" \
-gravity SouthWest -pointsize 18 -font Bookman-DemiItalic -fill '#7F7F7F' -annotate +810 "$time" \
-gravity SouthWest -pointsize 15 -fill '#7F7F7F' -annotate +830 "@" \
-quality 100 \
"$FILE"

code_retour=$?
if [ $code_retour -ne 0 ]; then
   echo "Erreur insertion texte"
   exit 2
else
   echo "Texte insere !"
fi
1 Pi 4 Emby / Samba
1 Pi4 Librelec
1 Pi3 / Hifiberry OSMC
1 Pi0 : traker GPS et acquisitions de données moteur automobile
1 Pi 2 : pilotage de serrures / RFID
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

piper
Raspinaute
Messages : 343
Enregistré le : sam. 5 juin 2021 18:57

Re: Webcam sur site

Message par piper » sam. 23 avr. 2022 10:05

Je n'avais pas vérifié que le texte est bien inséré (en fait il l'était mais pas au bon endroit (en dehors de l'image)

Pour le texte : par exemple (on se fout de width/height, pointsize, le calcul etc...) puisque tu les mets en dur dans raspistill et que tu ne valorise pas ni width ni height

Image

Ca fait un rectangle noir (#000000) en bas allant du point (0,540) à (800,600) donc 60 pixels de haut et toute la largeur
Puis ça met 2 textes de couleur blanc (#FFFFFF) :
-https://monsite/ à (10,560) (début en haut à gauche : NorthWest)
et le contenu de time à à 10,560 à partir du haut à droite (NorthEast)
Tu peux adapter à ta convenance

Je te conseille aussi de mettre une purge des anciens fichiers pour ne pas surcharger ta carte SD :
Ex : si tu veux garder les 10 plus récents seulement :

Code : Tout sélectionner

cd $LOCALPATH
#nbe de fichiers à garder : 10
nb=10
i=0
for fic in `ls -t Raspicam*.jpg`; do   
   i=$((i+1))
   if [ $i -gt $nb ]; then
      echo "Purge de ""$fic"
      rm -f "$fic"
   fi
done
exit 0   
Explication du code :
On va dans LOCALPATH (cd)
on parcours la liste des fichiers classés par date de création descendant ( ls -l) pour tous les fichiers dont le nom débute par RaspiCam et se terminent par .jpg
On les numérote (i) si i est > que nb , alors on supprime (rm)

Pour le transfert, c'est pas simple à cause du mot de passe dans le script et du fait que le ftp sur le port 22, on ne sait pas si c'est du ftps ou du sftp (pas la même chose)
Si ça fonctionne déjà chez toi, parfait. Chez moi non (j'ai un serveur ssh qui accepte le sftp mais pas de ssl sur mon serveur ftp donc pas de ftps)
1 Pi 4 Emby / Samba
1 Pi4 Librelec
1 Pi3 / Hifiberry OSMC
1 Pi0 : traker GPS et acquisitions de données moteur automobile
1 Pi 2 : pilotage de serrures / RFID
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

nimportenawak
Messages : 17
Enregistré le : ven. 8 avr. 2022 15:43

Re: Webcam sur site

Message par nimportenawak » lun. 2 mai 2022 10:41

piper a écrit :
ven. 22 avr. 2022 20:08
Bon
Voilà toute la 1ère partie, elle crée FILE avec ton bandeau
Pour l'envoi via sftp (ou ftps) ce va être bien plus compliqué. Ca dépend si ton provider exige une clé ou pas, du mot de passe (attention si ça convient un $ ou des espaces), des exigences ssl/tls de ton provider etc.....

Donc la 1ère partie (et qui fonctionne et s'arrête à la 1ère erreur rencontrée avec un beau message )

Code : Tout sélectionner

#!/bin/bash
#M'en branle pour le moment
HOST='toto'
USER="toto"
PASSWD="toto"
PORT="22"
REMOTEPATH='/toto/'
FILE="photo_camera2.jpg"
LOCALPATH='/home/pi/raspicam'
cd $LOCALPATH

raspistill -w 800 -h 600 -o /tmp/photo_camera.jpg -q 100
code_retour=$?
if [ $code_retour -ne 0 ]; then
   echo "Erreur prise de photo"
   exit 1
else
   echo "Photo prise !"
fi

#si ça fait plaisir
sleep 5

convert "/tmp/photo_camera.jpg" -fill '#DCDCDC' -draw 'rectangle 0,540,800,600' \
-gravity SouthEast -pointsize 18 -font Bookman-DemiItalic -fill '#7F7F7F' -annotate +810 "https://monsite" \
-gravity SouthEast -pointsize 15 -fill '#7F7F7F' -annotate +830 "mapage" \
-gravity SouthWest -pointsize 18 -font Bookman-DemiItalic -fill '#7F7F7F' -annotate +810 "$time" \
-gravity SouthWest -pointsize 15 -fill '#7F7F7F' -annotate +830 "@" \
-quality 100 \
"$FILE"

code_retour=$?
if [ $code_retour -ne 0 ]; then
   echo "Erreur insertion texte"
   exit 2
else
   echo "Texte insere !"
fi
Hello

J'ai bien photo prise et texte insere sur le terminal.
Mais sur la photo je n'ai qu'un bandeau noir sans texte

J'ai enlevé le tmp de convert "/tmp/

J'ai fait des tests mais rien ne s'affiche

Code : Tout sélectionner

-pointsize 10 -fill '#FFFFFF' -annotate +670+590  "$time"  \
-pointsize 14 -fill '#FFFFFF' -annotate +670+590  "$date" \
-pointsize 14 -fill white -annotate +750+590  "$hour" \

Code : Tout sélectionner

convert "photo_camera.jpg" -fill '#000000' -draw 'rectangle 0,540,800,600' -font Bookman-DemiItalic \
-pointsize 10 -fill '#FFFFFF' -annotate +670+590  "$time"  \
-pointsize 14 -fill '#FFFFFF' -annotate +670+590  "$date" \
-pointsize 14 -fill white -annotate +750+590  "$hour" \
-gravity NorthWest -pointsize 10 -fill '#FFFFFF' -annotate +560 "https://monsite" \
-gravity NorthWest -pointsize 12 -fill '#FFFFFF' -annotate +530 "mapage" \
-gravity NorthEast -pointsize 10 -fill '#FFFFFF' -annotate +560 "$time" \
-gravity NorthEast -pointsize 12 -fill '#FFFFFF' -annotate +530 "@" \
-quality 100 \
"$FILE"

piper
Raspinaute
Messages : 343
Enregistré le : sam. 5 juin 2021 18:57

Re: Webcam sur site

Message par piper » lun. 2 mai 2022 20:15

Dans ton exemple, on ne sait pas ce que vaut date, hour et time
Donc voici un exemple qui fonctionne (alignement à adapter évidement)

Code : Tout sélectionner

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

convert "/tmp/photo_camera.jpg" -fill '#000000' -draw 'rectangle 0,540,800,600' -font Bookman-DemiItalic \
-pointsize 14 -fill '#FFFFFF' -annotate +620+590  "$date" \
-pointsize 14 -fill white -annotate +700+590  "$time" \
-gravity NorthWest -pointsize 10 -fill '#FFFFFF' -annotate +10+560 "https://monsite" \
-gravity NorthWest -pointsize 12 -fill '#FFFFFF' -annotate +10+580 "mapage" \
-gravity NorthEast -pointsize 12 -fill '#FFFFFF' -annotate +30+560 "@" \
-quality 100 \
"$FILE"
1 Pi 4 Emby / Samba
1 Pi4 Librelec
1 Pi3 / Hifiberry OSMC
1 Pi0 : traker GPS et acquisitions de données moteur automobile
1 Pi 2 : pilotage de serrures / RFID
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

nimportenawak
Messages : 17
Enregistré le : ven. 8 avr. 2022 15:43

Re: Webcam sur site

Message par nimportenawak » mar. 3 mai 2022 09:36

Yes ça fonctionne, plus qu'à adapter un peu, merci

Le up avec lftp fonctionne aussi.

Tu parlais de ne pas mettre le mot de passe directement. Mais là il est en local sur le rasp, c'est grave?

Avec ta purge c'est top et ça permet de garder un petit historique.
Du coup ça m'a donné une idée, serait-il possible d'uploader sur le ftp 3 photos prises par exemple hier à une certaine heure (matin - midi et soir) ou les photos des dernières 48h sous forme de mini historique? a savoir que le Raspberry prendra une photo genre toutes les 15min. C'est faisable?

piper
Raspinaute
Messages : 343
Enregistré le : sam. 5 juin 2021 18:57

Re: Webcam sur site

Message par piper » mar. 3 mai 2022 10:25

Bonjour,
Bon, normalement, on ne met pas le mot de passe dans un script.
Mais bon, ton projet n'est pas hyper sensible, ce n'est ni pour une banque, ni une agence gouvernemental. Alors bon.....la sécurité : oui (en plus c'est aussi mon job) mais la paranoïa du particulier ..... non.
Bref, si pour t'amuser tu veux tester et apprendre comment on fait , amuses toi sur le web à tester des solutions à part de ce projet. et une fois au point intègres le dans ce projet. Il y a plusieurs solutions, notamment des clés ssh mais pas que.
Pour info, la syntaxe que tu devrais utiliser ne sont pas propres aux raspberry mais à Linux , ça ouvre en grand ton champ de recherche sur google.

Pour ta deuxièmes question :
Tout est faisable, pour cela il faut toujours commencer par mettre les choses au clair, sur papier : définir une règle qui précise sans aucune ambiguité possible, quels images on garde, combien de temps etc..., est-ce qu'on créé une animation ? quel type ? comment ?

Ex : comme sur le raspberry tu as maintenant une liste des N toutes dernieres images (après la purge)
Tu pourrais en faire une animation gif avec Imagemagick et l'uploader sur ton serveur. (évidement tu aurais une perte de qualité entre jpg et sa transformation en gif)
Ou, utiliser ffmpeg pour transformer une liste d'images jpg en vidéo mp4 (c'est bien plus joli)
Le fichier vidéo porterait un nom unique, reconstruit à chaque fois et uploader (en écrasant le précédent s'il existe)
Ce sont quelques idées

Imagemagick et ffmpeg sont disponibles osus linux et wondows et exploitables sous la forme de scripts comme raspistill
1 Pi 4 Emby / Samba
1 Pi4 Librelec
1 Pi3 / Hifiberry OSMC
1 Pi0 : traker GPS et acquisitions de données moteur automobile
1 Pi 2 : pilotage de serrures / RFID
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

nimportenawak
Messages : 17
Enregistré le : ven. 8 avr. 2022 15:43

Re: Webcam sur site

Message par nimportenawak » mar. 3 mai 2022 13:37

piper a écrit :
mar. 3 mai 2022 10:25
Bonjour,
Bon, normalement, on ne met pas le mot de passe dans un script.
Mais bon, ton projet n'est pas hyper sensible, ce n'est ni pour une banque, ni une agence gouvernemental. Alors bon.....la sécurité : oui (en plus c'est aussi mon job) mais la paranoïa du particulier ..... non.
Bref, si pour t'amuser tu veux tester et apprendre comment on fait , amuses toi sur le web à tester des solutions à part de ce projet. et une fois au point intègres le dans ce projet. Il y a plusieurs solutions, notamment des clés ssh mais pas que.
Pour info, la syntaxe que tu devrais utiliser ne sont pas propres aux raspberry mais à Linux , ça ouvre en grand ton champ de recherche sur google.
Bonjour Piper

Merci pour les pistes je vais creuser de ce côté, c'est vrai que niveau sécurité y aura rien sur le Raspberry ou sur le ftp sauf le site héberger et le login et mdp sont des logs secondaires et non les principaux de mon compte.
Mais pour assouvir ma curiosité je vais fouiller un peu sur google les clés ssh :)
piper a écrit :
mar. 3 mai 2022 10:25
Pour ta deuxièmes question :
Tout est faisable, pour cela il faut toujours commencer par mettre les choses au clair, sur papier : définir une règle qui précise sans aucune ambiguité possible, quels images on garde, combien de temps etc..., est-ce qu'on créé une animation ? quel type ? comment ?

Ex : comme sur le raspberry tu as maintenant une liste des N toutes dernieres images (après la purge)
Tu pourrais en faire une animation gif avec Imagemagick et l'uploader sur ton serveur. (évidement tu aurais une perte de qualité entre jpg et sa transformation en gif)
Ou, utiliser ffmpeg pour transformer une liste d'images jpg en vidéo mp4 (c'est bien plus joli)
Le fichier vidéo porterait un nom unique, reconstruit à chaque fois et uploader (en écrasant le précédent s'il existe)
Ce sont quelques idées

Imagemagick et ffmpeg sont disponibles osus linux et wondows et exploitables sous la forme de scripts comme raspistill
Pour la partie animation je pensais plus uploader des fichiers en ftp et les récupérer et les mettre en forme sur ma page directement (Je m'y connais un peut plus coté web :D ) Pour ça il faudrait qu'ils aient un nom plus générique avec Photo1, Photo2...

Par exemple:
Je pensais faire plus simple en renommant les images et en gardant que celle de 8h 12h 16h et 20h par exemple car de nuit on ne verra rien. Du coup ma page piochera sur le ftp les photo1, Photos5...
Le but est d'avoir une vue des conditions météo, c'est tout.
Si on part du principe d'une photo prise toutes les 30 min à partir de 8h et jusqu'à 20h soit 20 photos
Et si on sait que la photo1 = 8h .... et ça sur 48h

D'ailleurs on peut programmer le Raspberry pour ne pas prendre de photo la nuit du moins entre telle et telle heure?

piper
Raspinaute
Messages : 343
Enregistré le : sam. 5 juin 2021 18:57

Re: Webcam sur site

Message par piper » mar. 3 mai 2022 17:34

OK, donc tu veux que l'animation se fasse côté web : très bien
En ce cas, tu ne peux qu'upload les jpg.
Donc tu as raisons, il y a une question de nommage
La solution que tu dois choisir doit répondre à plusieurs concepts :
1) est-ce que les nouveaux fichiers écraseraient les anciens ou est-ce que tu stockes par ajout de nouveaux fichier, si tu stockes : il faut prévoir une purge
2) de là, découlera une normalisation des noms (ou un parcours de tous les fichiers d'un dossier, si tu es bon en web, tu sais faire)

Il y a pleins de solutions en voici une très simple :
imaginons que tu nommes les fichiers (pas de muscules en web, ça évite les erreurs http 404 !) photoHHMM.jpg
où HHMM = l'heure et les minutes de la prise de vue genre HHMM=$(date +"%H%M") : les fichiers du jours écraseraient ceux de la veille : ça résout le pb de purge sur ton site
Et en les parcourant par ordre croissant, tu as l'ordre pour construire ton animation par un script web (js ou php ou ce que tu veux)

Après, pour qu'un script fasse qu'elle que chose toutes les 15 minutes, seulement de jours.
Simple : lances-le systématiquement toutes les 15 minutes et s'il fait nuit, sort tout de suite avec la commande

Code : Tout sélectionner

exit 0
Le problème est que tu ne sais pas quand il faut jour......ça dépend du lieu sur terre et de la date.
Tu as alors 2 options : la 1ère dire que voilà, je prends des photos entre telle heure et telle heure qu'il fasse jour ou nuit et c'est tout
Alors un truc genre (si la partie heure de la date/heure est > à 22 ou < à 6 alors on sort tout de suite (exit))

Code : Tout sélectionner

HH=$(date +"%H")
if [ $HH -gt 22 -o $HH -lt 6 ]; then
   echo "Il faut nuit"
   exit 0
fi
Inconvénient : en hiver, tu auras beaucoup d'images de nuit
Si tu mets d'autres valeurs, en mai, juin, juillet, il te manquera beaucoup d'images de jour.

Autre option : trouver quand il fait jours ou nuit (calcul des éphémérides) ça se calcul, c'est parfaitement documenté mais un peu complexe ... j'ai fais ça en bac+3 pour tout astre, pas seulement le soleil et la terre.
Heureusement, il y a des tas de passionnés qui ont mis tout ça en ligne

Regardes ici :
https://linuxconfig.org/how-to-obtain-s ... mmand-line

Le script donne, un fois que tu as paramétré ta géolocalisation (suivre les explications sur la page)

Code : Tout sélectionner

pi@piwifi:~/Sunrise-Sunset-Shell-Script# ./sunrise-sunset.sh
Sunrise for location FRXX0077: 06:25
Sunset for location FRXX0077: 21:08
Tu n'as alors plus qu'à adapter le test pour sortir s'il est plus de 21h08 ou moins de 06h25
Facile !
Ex : ton script commencerait par :

Code : Tout sélectionner

#Appel du script qui donne les heures de lever et de coucher du soleil
# et stockage du résultat dans /tmp/heures.txt
./sunrise-sunset.sh > /tmp/heures.txt
#Recuperation de l'heure du lever (dernier champ de la 1ere ligne de /tmp/heures.txt)
lever=$(awk 'NR==1 {print $NF}' /tmp/heures.txt)
#Recuperation de l'heure du coucher (dernier champ de la 2ieme ligne de /tmp/heures.txt)
coucher=$(awk 'NR==2 {print $NF}' /tmp/heures.txt)
#Affichage
echo "Lever du soleil a ""$lever"
echo "Coucher du soleil a ""$coucher"
#Quelle heure est-il ?
HHMM=$(date +"%H:%M")
#Affichage
echo $HHMM
#Si on est entre le lever et le coucher alors il fait jour (attention : je compare ici des chaînes de caractères, pas des nombres)
if [[ "$HHMM" > "$lever" ]] && [[ "$HHMM" < "$coucher" ]]; then
   echo "A ""$HHMM"", il faut jour"
#sinon il fait nuit, alors on sort
else
   echo "A ""$HHMMs"", il faut nuit"
   exit 0
fi
echo "Maintenant je vais prendre la photo et poursuivre le traitement"
C'est drôle ton projet ressemble à camaéro :
C'est un Rasperry qui équipé d'une caméra qu'on installe sur Aérodrome , qui prend des images et les mets sur un serveur web. Le site permettant de voir la dernière photo (avec incrustation des dernières infos météo) et le visionnage sous la forme d'animations des dernières images.
https://cam-aero.eu/
1 Pi 4 Emby / Samba
1 Pi4 Librelec
1 Pi3 / Hifiberry OSMC
1 Pi0 : traker GPS et acquisitions de données moteur automobile
1 Pi 2 : pilotage de serrures / RFID
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

nimportenawak
Messages : 17
Enregistré le : ven. 8 avr. 2022 15:43

Re: Webcam sur site

Message par nimportenawak » mer. 4 mai 2022 10:32

Hello Piper

Génial j'ai intégré le script et ça fonctionne nickel, merci. Ca évitera des photos toutes noires :)

Oui j'ai vu d'autres projets sur pleins de sites avant de poster ici. Je tombais souvent sur des scipts d'il y aplus de 15ans et plus toujours fonctionnel, d'où mon arrivée sur ce forum.

c'est pour voler aussi mais pas en avion, en parapente
Pour la petite histoire, j'habitais en face d'un décollage et du coup dès que je voulais voler avec de bonnes conditions il suffisaient de regarder par la fenêtre et de téléphoner aux amis.
J'ai déménagé mais j'ai la possibilité de placer une webcam au même endroit. Je me suis dit que ça pourrait servir à plus de monde du coup et de partager l'info pour faire de beaux vols dans de bonnes conditions

Bon faudra que j'équipe le Raspberry de l'autre module de caméra avec un petit zoom pour voir les manches à air.

Du coup pour la partie upload de plusieurs photos je sèches un peu. Le plus simple serait en plus de celle toutes les 30 min de garder celle de la veille et du jour même genre celle de 8h, 10h 12h, 14h, 16h, 18h.

pour la partie météo je vais la mettre directement sur le site, car j'ai tenté via le Raspberry mais ça devient compliqué

Répondre

Retourner vers « Les applications spécialisées du Raspberry Pi »