Borne à Selfies – Borne Photos autonome avec galerie Web intégrée (Raspberry Pi)

Ou, mon « Photomaton* ultime de la mort qui tue »

Photo de la borne à selfies en condition d'utilisation
Ma première Borne à Selfies

Note de Septembre 2022 :
Attention, article ayant plus de 2 ans, ce qui est une éternité en informatique.
Les versions logicielles et matérielles sont actuellement différentes.


Aussitôt la fin du confinement validée, j’ai été de plus en plus sollicité par des Internautes pour de l’aide ou de simples échanges vis à vis de « conception » de scripts de bornes photos ou « Bornes à Selfies » à base de Raspberry Pi et de python.
Une de ces personnes, réalisant une série de vidéos sur la réalisation de son propre « photobooth » basé sur un de mes articles, m’a donné envie de retravailler le vieux script cité dans ses vidéos. Ceci doublé au fait qu’un de mes collègues m’a annoncé son mariage, je me devais de finir, en vrai, ma borne photos personnelle afin de passer du prototype à l’objet réel.
Je remercie donc Sébastien L et Serge R pour cette source de motivation externe. Évidemment, je remercie mon épouse et mes enfants pour leur patience …

Le cahier des charges n’a pas été fixé par Sébastien, mais émane des divers cahiers des charges des Internautes sur ces derniers mois. Évidemment, il est imprégné de mon propre cahier de charges puisque mon but était de réaliser une borne photos de type professionnelle, c’est à dire pouvant être mise en place pour autrui comme dans le cadre d’une vente ou d’une location car cela ajoutait de la difficulté et donc un aspect plus professionnel à cette expérience.

 

  • Les principes généraux :
    • Il faut que le système démarre dès la mise sous tension et que le programme soit en lancement automatique sans intervention humaine (ni clavier, ni souris). Pour autant, il est indispensable de pouvoir garder la main avec possibilité de fermer le programme.
    • Les photos disposant de données EXIF utilisées par certains programmes, il faut soit les conserver, soit les créer. Donc le système doit rester à l’heure et à la date du jour.
    • La sécurité impose la duplication des images en cas de corruption du support système et cela tout au long de l’utilisation, mais sans la moindre intervention des utilisateurs.
    • L’utilisation doit se résumer à appuyer sur un bouton pour réaliser une action sans autre dispositif d’entrée
    • Le respect de la confidentialité des données impose de purger les images du système sans perdre l’aspect « sécurité des images ».
    • L’arrêt du système doit être enfantin tout en étant limité en accès et manipulation.
    • L’objet fini doit être léger et peu onéreux à produire.
Photo de ma deuxième Borne à selfies (plus petite)
Ma deuxième Borne Photos
  • Les fonctions principales du script :
    • Un écran d’accueil avec une image personnalisée (pas de prévisualisation continue) et n’afficher l’image de la caméra (prévisualisation) qu’une fois une photo demandée.
    • Afficher le flux vidéo en mode miroir (mouvements et positionnement plus aisés) durant quelques secondes avant prise du cliché.
    • La prise d’une photo avec ajout d’un tampon à l’effigie de l’événement.
    • La prise de 3 photos à suivre avec mise en page sous forme d’une image en grille de 4 : les 3 photos et un logo en lieu et place du 4ème espace disponible.
    • La prise de 8 photos à suivre avec mise en page sous forme d’une image en grille de 9 : les 8 photos et un logo en lieu et place du 9ème espace disponible.
    • Dans tous les cas, retourner la photo pour la remettre à l’endroit (dans le cas où les gens écrivent un message sur une ardoise ou portent un tee-shirt avec du texte par exemple).
    • Afficher l’image finale quelques secondes avant de retourner à l’accueil.
    • Un arrêt sécurisé par « poweroff » et synchronisation finale des images sur des clefs USB

 

  • Les fonctions additionnelles au script :
    • La copie synchronisée des images sur deux clefs USB de sauvegarde toutes les X minutes.
    • La diffusion des images sur un réseau privé ; images accessibles via téléphone et/ou tablette et/ou ordinateur donc grâce à une interface Web.
  • Les petits plus :
    • Lors du branchement, le Raspberry Pi démarre sous Rasbian ou Raspberry Pi OS (selon le dernier nom en vigueur) puis ne lance pas le script python mais exécute une instance de Lxterminal qui va lancer ledit script. Cela permet de reprendre la main en faisant simplement un pkill lxterminal soit en se connectant en SSH (accès distant) soit en passant en mode console (accès physique via un clavier).
    • Deux images imprimées peuvent être collées sur la borne afin de permettre aux gens de « flasher » le QR Code de connexion au HotSpot ainsi que le QR code d’accès au site.
    • Le curseur de la souris disparaît au lancement du script.

Ajout du 01/01/2021 : Et en suivant cet article vous pourrez ajouter un flash à votre PhotoBooth

Les caractéristiques ci-dessus ne l’exigent pas, mais l’usage du Raspberry Pi s’impose presque d’emblée pour ses qualités intrinsèques : il démarre à la mise sous tension, peut faire tourner un système d’exploitation ayant des bases réputées (base Debian), est facilement programmable et améliorable (ajout des boutons sur les ports GPIO ; ajout d’une Horloge Temps Réel, …), dispose d’un coût d’achat et d’exploitation très faible. Un avantage indéniable est également son facteur forme permettant de le glisser presque partout.
A titre personnel, j’ai utilisé le Raspberry Pi 3B+ en ma possession. Un Raspberry Pi 4 serait plus véloce, mais le but n’est pas d’en faire un produit commercialisable « pour de vrai ».

  • Le matériel utilisé :
    • Mon Raspberry Pi 3B+ et son alimentation 5V et 3A.
    • Une PiCaméra V1 (5 Mpx) utilisant l’interface DSI (Display Serial Interface)
    • Un module RTC DS3231
    • Quatre boutons (de type bouton poussoir)
    • Un écran 4/3 (le module photo V1 fait nativement du 2592×1944 soit du 4/3 ; datasheet) (pour celles et ceux qui ont un écran 16/9, j’ai adapté le script le dimanche 27 décembre 2020 pour Yohan et il est intégré à ce tutoriel. Cela permet d’avoir un écran 16/9 en 1920×1080 et d’avoir le photobooth au milieu de l’écran ; merci qui ? 😉 )

Au sommaire :

01 – Installation du système d’exploitation

La première étape, si nous partons de zéro, est de télécharger la dernière image de « Raspberry Pi OS ». Cela se passe sur le site de « The Raspberry Pi Foundation » qui dispose de plusieurs images (et diverses manières de les obtenir).
Habitué à la chose, je préfère télécharger la version intermédiaire (version « Raspberry Pi OS (32-bit) with desktop » c’est à dire la version avec bureau, mais qui ne comprend pas tous les logiciels conseillés) via Torrent (afin de participer à la charge serveur) puis l’écrire avec Etcher.

02 – Configuration initiale

Une fois cela réalisé, il faut configurer le Raspberry Pi en suivant les indications qui apparaissent les une après les autres à l’écran.
L’étape suivante consiste à réaliser les modifications supplémentaires : activation du module caméra, du SSH, de la prise en main à distance (VNC) et du I2C via les « Préférences » afin de pouvoir utiliser la caméra et le module RTC mais aussi de piloter le système via le réseau.

03 – Configuration et modifications « physiques » additionnelles

Lors de cet arrêt du Rasperry Pi, il faut ajouter le module caméra (RaspiCam), le module RTC ainsi que les 4 boutons (3 boutons « photo » ; un bouton « Arrêt »).
Les boutons « photo » sont en position 18, 21 et 24 ; le bouton « arrêt » est en position 5.
Voir le site https://pinout.xyz ; je suis en numérotation BCM.

Au redémarrage, il convient de s’assurer que la caméra est fonctionnelle (et bien branchée) en tapant raspistill -o test.jpg afin de vérifier que la prise de photos est possible. Cela va lancer le programme raspistill qui prendra une photo. Celle-ci sera nommée test.jpg et placée dans le répertoire /home/pi puisque la ligne ne comporte aucun argument ou option de plus.
On peut aussi tester avec hauteur et largeur spécifiées.

Capture d'écran avec lignes de commandes pour tester la Caméra avec Raspistill
Test du module RaspiCam

04 – Ajout et configuration du module RTC

La borne photos n’ayant pas vocation à disposer du réseau (pas de sortie RJ45 prévue), il faut ajouter et configurer un module RTC (Real Time Clock) qui permet de garder la mémoire du temps qui passe. Par défaut, le Raspberry Pi ne dispose pas de cet outil (le faible prix de vente entraîne des choix de fonctionnalité de la part de la Fondation) et perd donc la mémoire du temps lors de son extinction, comme quand «  la pile Bios » ou « pile CMOS » d’un ordinateur ne fonctionne plus. Ce module est aisé à trouver et se connecte facilement sur les ports GPIO.

L’installation n’est pas compliquée … une fois que la bonne méthode a été trouvée. Pour ma part, j’applique le tutoriel que j’ai écrit en avril 2020 sur le sujet après bien des déboires et qui s’intitule très simplement : Ajout d’un module RTC DS3231 au Raspberry Pi

05 – Installation des logiciels additionnels

Une fois tout cela réalisé, il reste à installer les logiciels complémentaires indispensables au fonctionnement du script et qui ne sont pas fournis par défaut.

Pour simplifier, il faut :

  • vérifier* d’avoir les prérequis relatifs au fonctionnement des divers modules python
    sudo apt install python3-picamera -y python3-dev python3-rpi.gpio -y
  • puis, installer les logiciels de modification dont j’ai l’usage dans le script ; soit :
    sudo apt install imagemagick jhead exiftool -y

* : Sur la dernière image de Raspberry Pi OS utilisée, tout était déjà implémenté. (voir capture d’écran ci-dessous)

Capture d'écran avec le Terminal en mode installation à la Linuxien ;-)
Installation des logiciels additionnels

06 – Transfert du dossier « Photomaton »

Le script de la borne photos est « installé » par transfert d’un dossier contenant le script, le fichier son utilisé (bruit de déclencheur d’appareil photo) ainsi que la police d’écriture spécifique.
En effet, le travail de codage ou plutôt de modification et d’adaptation d’un code python existant a été réalisé sur un Raspberry Pi me servant de test pour différents « programmes » et scripts (dont plusieurs « PhotoBooth ») et ces fichiers sont conservés au sein de ce raspberry Pi ainsi que dans le NAS décrit en activité précédente, mais aussi sur le disque dur de la FreeBox.
Il suffit donc d’injecter le dossier voulu pour activer l’application désirée. En général, je transfère un dossier ZIP qui est décompressé au sein du dossier /home/pi.
Le script est disponible en ligne à cette adresse : Photomaton_x1x4x9_fond.zip

07 – Configuration d’un serveur Web (Apache2)

Avant de tester le script, il faut installer un serveur Web au sein de Raspberry Pi en installant apache2 avec la commande sudo apt install apache2 puis modifier le propriétaire (chown) et les droits (chmod) relatif au dossier html (pi doit devenir propriétaire du dossier html et on donne les droit (propriétaire et groupe) afin être autorisé à écrire dans ce dossier pour y stocker les photos) :
sudo chown -R pi:www-data /var/www/html
sudo chmod -R 770 /var/www/html

La vérification se fait avec un accès à http://localhost qui doit nous répondre avec la page Apache2 Debian Default Page bien connue des WebMasters en herbe.

Capture d'écran de la page "Apache2 Debian Default Page"
Apache2 Debian Default Page

08 – Installation de PHP et de la galerie Web

Évidemment, il faut installer PHP nécessaire au fonctionnement de la galerie Web avec
sudo apt install php php-mbstring php-gd -y

Mon contenu du dossier html fraîchement créé est modifié par récupération d’un dossier de sauvegarde déjà paramétré lors des tests (le mien est déjà personnalisé). Vous, vous pouvez récupérer votre copie de Single File PHP Gallery ici : http://sye.dk/sfpg/ qu’il faudra paramétrer de la bonne manière (voir son fichier « read-me ») en éditant le fichier index.php. Évidemment, créez un dossier « photos », un dossier « logs » et mettez vos fichiers « 4logo » et « 9logo »

Puisque les droits de /var/www/html viennent d’être modifiés, il est possible de coller le contenu de Single File PHP Gallery dans le dossier /var/www/html de manière graphique (par copier/coller). La galerie est donc opérationnelle.

Et on réapplique les demandes de modification des droits
sudo chown -R pi:www-data /var/www/html
sudo chmod -R 770 /var/www/html

Pssssit ! N’oubliez pas d’effacer le fichier index.html (ou de le renommer en index.htmlAAA) ; cela permet de charger directement le fichier index.php et ainsi d’accéder automatiquement à la galerie. (Oui, Laurent, cette ligne est une spéciale dédicace 😉 )

Le test de http://localhost est maintenant satisfaisant (voir ci dessous). Si la page est noire, c’est du fait de l’absence de photo à afficher. Cela va changer avec la prise de photos.

Capture d'écran de la galerie web ... qui est ... vide !
La galerie Web est vide pour le moment

Il est donc temps de lancer le script avec le terminal en tapant la commande :
(attention, vous devez taper cette commande directement sur le Rpi et pas en ssh ; merci Yohan pour cette remarque)
python3 /home/pi/Photomaton_x1x4x9_fond/Photomaton_x1x4x9.py
Pour celles et ceux qui ont un écran 16/9 en 1920×1080, vous pouvez taper cette commande :
python3 /home/pi/Photomaton_x1x4x9_fond/Photomaton_x1x4x9_1920x1080.py

Autant tester les 3 boutons maintenant pour vérifier que tout fonctionne !

  • Bouton Blanc pour 1 photo
  • Bouton Noir pour 3 photos en grille de 4
  • Bouton Rouge pour 8 photo en grille de 9

Pour vérifier le bon fonctionnement de la galerie, il faut sortir du script. Je propose la solution manuelle avec « Ctrl » + « Alt » + « F2 » afin de basculer en TTY2.
(C’est le mode ‘consoles virtuelles’ ; TTY vient de l’anglais teletypewriter)

Il suffit de renseigner son identifiant et son mot de passe puis de taper la commande magique pkill lxterminal qui aura pour conséquence de couper le processus (ça ferme le terminal).
Un « Ctrl » + « Alt » + « F7 » permet de repasser en mode graphique.

Sinon, il existe la connexion ssh avec ssh pi@ip-du-raspberry qui sera nettement plus pratique une fois clavier et souris retirés ! On en reparlera plus tard.

La visite du site http://localhost confirme le bon fonctionnement puisque les miniatures sont bien présentes et consultables en plein écran.

Capture d'écran de la galerie Web qui se peuple peu à peu ...
Les miniatures apparaissent

Capture d'écran de la galerie web avec fonction zoom sur une image
Et le zoom type LightBox est opérationnel

09 – Modification de l’autostart

Après cette vérification du bon fonctionnement du script, des dispositifs d’entrée (et de sortie) ainsi que de la galerie, il faut modifier le fichier de démarrage pour lancer l’application de manière automatisée.

Je commence par lancer la commande
chmod +x /home/pi/Photomaton_x1x4x9_fond/Photomaton_x1x4x9.py

Ensuite, j’édite le fichier autostart avec sudo nano /etc/xdg/lxsession/LXDE-pi/autostart pour, théoriquement, insérer python3 /home/pi/Photomaton_x1x4x9_fond/Photomaton_x1x4x9.py

Cependant, ma préférence très personnelle, et sans doute peu conventionnelle, consiste à lancer le terminal qui exécutera lui-même la commande désirée. Le but est de pouvoir couper le script en tuant le processus « lxterminal » avec un simple pkill lxterminal comme lors des tests.
Cela permet de reprendre la main très facilement.
La ligne python3 /home/pi/Photomaton_x1x4x9_fond/Photomaton_x1x4x9.py devient donc lxterminal --command="/home/pi/Photomaton_x1x4x9_fond/Photomaton_x1x4x9.py"

Évidemment, pour ceux qui sont en 1920×1080 (hein Yohan 😉 ) … la ligne sera lxterminal --command="/home/pi/Photomaton_x1x4x9_fond/Photomaton_x1x4x9_1920x1080.py"

A ce stade, tout est parfaitement opérationnel. Mais, l’intérêt de la borne Photos tient également dans ses fonctionnalités additionnelles : la sauvegarde et la diffusion en temps réel.

10 – Mise en place de taches cron pour les sauvegardes

La sauvegarde repose sur la copie via Rsync(1) des images toutes les 3 et 5 minutes sur 2 clefs USB(2) via une tache cron créée avec crontab -e et enrichie avec
*/3 * * * * rsync -av /var/www/html/photos/ /media/pi/PHOTOS01/
*/5 * * * * rsync -av /var/www/html/photos/ /media/pi/PHOTOS02/
(1) Rsync signifie remote synchronization, soit, en français , synchronisation à distance
(2) Formatez vos clefs en PHOTOS01 et PHOTOS02 😉

11 – Installation du HotSpot

La partie diffusion nécessite l’installation d’un serveur web avec stockage des images dans un dossier photos au sein de ce serveur web (ce qui explique le chemin /var/www/html/photos/ dans la ligne de copie via Rsync), mais aussi la configuration du Raspberry Pi en Point d’accès Wifi (ou HotSpot) afin de se connecter au site Web interne (Point d’accès Wifi sans trafic Internet).

En deux mots, l’idée est que le Raspberry Pi fonctionne sans le réseau, mais génère son propre réseau Wifi permettant (si on décide de leur offrir l’accès) aux convives de se connecter au serveur Web interne afin de regarder les images.s
Surtout, cela offre à un administrateur la possibilité de piloter le Raspberry en ligne de commande. En effet, à mon sens l’outil informatique doit toujours rester sous le contrôle possible avec une sortie de secours en cas de nécessité.
Grace à ce point d’accès, je peux prendre la main sur le Raspberry Pi en SSH depuis le terminal de mon téléphone portable fonctionnant sous Ubuntu ou depuis mon PC LinuxMint.

Cela permet, par exemple, de faire une démonstration avant l’événement sans laisser les images de test dans la galerie : depuis le mariage, j’ai prêté la Borne Photos pour une soirée chez une amie d’un de mes enfants.
Le rassemblement étant en extérieur, inutile de compter sur le réseau et je ne voulais pas m’embêter avec clavier et souris (il faut ouvrir la borne).
Une fois les photos de démonstration réalisées, l’accès en SSH permet de purger les dossiers /var/www/html/photos/ ; /media/pi/PHOTOS01/ et /media/pi/PHOTOS02/.

La commande peut tenir en une ligne rm /var/www/html/photos/2020* && rm /media/pi/PHOTOS01/2020* && rm /media/pi/PHOTOS02/2020*

Un exemple en image depuis un PC avec purge du dossier /var/www/html/photos/ de manière sélective : suppression des images du 12/09/2020 (captures réalisées a posteriori) :

Capture d'écran avec affichage de la Galerie et listage du répertoire /var/www/html/photos (connexion HotSpot)
Affichage de la Galerie et listage du répertoire /var/www/html/photos (connexion HotSpot)

Capture d'écran de la suppression de certaines photos et un nouveau listage du répertoire /var/www/html/photos
Suppression de certaines photos et nouveau listage du répertoire /var/www/html/photos

La première installation du HotSpot a été grandement facilitée par un tutoriel sur un site anglais. Malheureusement, celui-ci n’est plus accessible. Cependant, voici la procédure émanant de diverses recherches et notes afin d’expliciter les choses sans « bêtement » les appliquer :

Installation de hostapd (Hostapd permet la création d’un point d’accès Wi-Fi) et de dnmasq (dnmask est un serveur de cache DNS) avec : sudo apt install hostapd dnsmasq -y

Puis passage en mode arrêt de ces services pour pouvoir les configurer :
sudo systemctl stop hostapd
sudo systemctl stop dnsmasq

Édition des paramètres de configuration du point d’accès :
sudo nano /etc/hostapd/hostapd.conf

Et il faut coller ce bloc (SSID et wpa_passphrase à personnaliser)

interface=wlan0
driver=nl80211
ssid=Borne_Photos
hw_mode=g
channel=6
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=Borne_Photos
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

L’explication :

# Interface wlan du Wi-Fi --> interface=wlan0
# Drivers Linux --> driver=nl80211 
# Nom ou SSID du spot --> ssid=Borne_Photos 
# Mode Wi-Fi utilisé (ici : IEEE 802.11g soit 2,4GHz) --> hw_mode=g 
# Canal (chanel) de fréquence --> channel=6 
# Activation (1) ou non (0) de WMM (amélioration flux audios, vidéos et voix sur le réseau 
# par gestion de la qualité de service (QoS). Inutile pour nous. --> wmm_enabled=0 
# Filtrage par adresse MAC ? (ici=non) --> macaddr_acl=0 
# Wi-Fi ouvert (0) ou sur autorisation (1) --> auth_algs=1 
# Obliger les clients à connaître le nom du réseau --> ignore_broadcast_ssid=0 
# Utilisation de WPA2 (Wi-Fi Protected Access) --> wpa=2 
# Mot de passe d’accès au réseau --> wpa_passphrase=Borne_Photos
# Utiliser une clé existante --> wpa_key_mgmt=WPA-PSK 
# Modes de chiffrage autorisés (AES et TKIP autorisés) --> wpa_pairwise=TKIP 
# Utiliser AES, au lieu de TKIP -->rsn_pairwise=CCMP

Édition des paramètres de configuration du point d’accès :
sudo nano /etc/default/hostapd

Ajout de la ligne (à la fin du fichier) disant de prendre en compte notre fichier hostpad.conf ci-dessus.
DAEMON_CONF="/etc/hostapd/hostapd.conf"

Édition des paramètres de configuration du proxy :
sudo nano /etc/dnsmasq.conf

A la fin du fichier, il faut ajouter ce bloc

# Borne_Photos configuration sans accès à Internet :
# Le nom de l’interface utilisée
interface=wlan0
# Ne transmet pas les requêtes avec nom de domaine incomplet
domain-needed
# Ne retourne pas toutes les requêtes DNS inverses
bogus-priv
# plage d'adressage IP, masque et durée du bail
dhcp-range=192.168.50.150,192.168.50.200,255.255.255.0,12h

Édition des paramètres de configuration des adresses IP fixes en forçant le daemon DHCPCD à utiliser une adresse IP précise :
sudo nano /etc/dhcpcd.conf

En fin de fichier, ajouter ceci :

nohook wpa_supplicant
interface wlan0
static ip_address=192.168.50.10/24
static routers=192.168.50.1

Pour éviter une erreur lors de l’activation de hostapd, on le rend « unmask » :
sudo systemctl unmask hostapd

12 – Redémarrage (sudo reboot) et utilisation finale

Au redémarrage du Raspberry Pi, la borne Photos est totalement opérationnelle :

  • Dés le lancement de l’interface graphique, le script est en cours d’exécution,
  • Maintien du système à la bonne date/heure,
  • Le serveur Web est fonctionnel et le HotSpot est actif.

Et les vérifications le confirment :
• Les photos sont bien sauvegardées de manière récurrentes sur les 2 Clefs USB selon les délais voulus. (Toutes les 3 minutes pour l’une et toutes les 5 minutes pour l’autre).
• Enfin, elles sont sauvegardées une dernière fois lors de la pression sur le bouton d’arrêt. Puis les images sont également supprimées de la carte SD. (Oui, je le prête à mon collègue, mais je n’ai pas à voir les images de son mariage. Principe de base de respect de la vie privée).

⇒ Ce projet est donc maintenant totalement finalisé et opérationnel.

Conclusion :
Cette activité est rapide à réaliser … après expérience. La partie conception théorique de la borne (objet) et des fonctionnalités est un travail de longue haleine pour un non professionnel.
Au final, le temps de codage de ce script a été assez rapide. Cependant, le travail sur le scripting au sens large a été très long du fait de mes nombreuses recherches dans diverses directions ! Et a même donné lieu à de nombreux autres scripts dans diverses variantes dont je ne parlerai pas ici.
La partie conception physique s’est déroulé sur un laps de temps important, sans plan précis. J’ai surtout opté pour « des choix de situation ». Le but étant d’acheter le moins possible et de s’adapter ! Choix de vie ; je préfère le détournement et le ré-usage plutôt que jeter et acheter.

Bon, si le temps passé à la réalisation de tout ce script et ce tutoriel vous semble mériter un petit merci, vous pouvez me soutenir en me faisant un petit don via PayPal



Post Scriptum :
1 – Selon la décision prise, il est possible de positionner sur la borne (ou sur l’image d’accueil) le QR code de connexion au Wi-Fi et le QR code d’accès à la Galerie.
C’est un choix personnel selon l’événement. Ça peut être marrant, mais les gens sont-ils pas déjà suffisamment la tête dans leurs SmartPhones ???

2 – En bonus, une commande sympathique à taper sous Linux. Elle sert à sauvegarder sa carte SD sur son NAS avant de recommencer tout à zéro. Pour vérifier que tout fonctionne parfaitement j’applique toujours, au minimum, la triple vérification. Réalisation de deux installations avec prises de notes avant l’écriture de l’article. Puis je refais une (voire plus) réinstallation à zéro en suivant uniquement la procédure après sa rédaction.
La commande prend la carte SD en fichier d’entrée (if pour Input File). Ensuite, elle l’injecte avec gzip via un pipe dans le dossier tmp. Puis, elle réalise une copie ssh (scp) vers le NAS.

sudo dd if=/dev/mmcblk0 | gzip -c > /tmp/image_borne_photos.img && scp /tmp/ image_borne_photos.img root@192.168.0.111:/srv/dev-disk-by-label-RaidMiroir500WD/partage/alban/ image_borne_photos.img

Ce qui donne une image de 3,7 GB pour une carte SD de 16GB.

* : Je rappelle que Photomaton est une marque déposée

Deuchematon réalisé par Franck pour l’association Musée de la 2cv
Anonymisation de principe ; le but est de montrer les voitures 😉

A propos de Alban

Papa de 4 enfants étant lui-même resté un enfant. Diététicien-Nutritionniste 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. Lassé de l'évolution du Monde de la Santé dans lequel les patients sont de plus en plus à traiter comme des clients (je suis un soignant !!!), j'ai opté pour une reconversion en repartant en Alternance... à... 44 ans D'abord dans le cadre d'un BTS SIO option SISR (Solutions d’Infrastructure, Systèmes et Réseaux) en Septembre 2019. Après l’obtention du BTS, j'ai décidé de poursuivre (toujours en alternance) en Bac+3 avec un Bachelor Concepteur de Systèmes d'Information. Depuis septembre 2022, je suis donc encore plus vieux, mais un jeune diplômé "Administrateur Systèmes et Réseaux". Citation personnelle : « Si la réussite facile flatte l’égo, C’est de la persévérance que nait le plaisir de la réussite. »

104 commentaires à propos de “Borne à Selfies – Borne Photos autonome avec galerie Web intégrée (Raspberry Pi)”

    • Yep, parfois, l’évolution est un obstacle.
      Perso, je suis resté sur une version ancienne sur mon Booth et il est parfaitement fonctionnel.
      Comme je manque cruellement de temps et de compétences, je n’ai pas une version sur la dernière mouture de RaspberryPiOS (et le modulke caméra V3).
      Par contre, si tu a des compétences en la matière, un article commun ou à ton nom est évidemment possible.

  1. Bonjour, je suis en train de tester ton excellent tuto, tout se déroule correctement sauf que j’ai juste un problème pour le câblage des boutons, je suis novice et je souhaiterais savoir quand tu dis 18, 21 et 24 ; le bouton « arrêt » est en position 5, quel est le couple de connexion 18 et ?,21 et ? ….
    Sans doute une question bête, mais bon c’est mieux que se tromper ou tout flasher.
    Merci et bon dimanche.

    • Hello Fredo,

      Je dis que je suis en BCM.
      Donc « GPIO 18 » sera « la pin physique 12 »

      Bon, avec ton commentaire, j’ai vu que le lien merdait ; j’ai mis à jour pour pointer sur https://pinout.xyz/
      Cela devrait t’aider.

      Donc,
      Pour le GPIO18, tu branches sur la pin12 et la pin14 (le ground)
      Pour le GPIO21, tu branches sur la pin40 et la pin39 (le ground)
      Etc
      L’idée est de choisir une pin qui est à côté d’une pin « ground » à chaque fois pour faciliter les branchement.
      J’utilisais alors des connecteurs issus de PC donc je devais me faciliter la vie 😀

      ++

      Exemples pour les GPIO

      • bonjour alban,
        super projet , félicitation
        javais une question et ce qu’il serait possible de rajouter une fonction.
        pour le changement d’orientation portrait / paysage en appuyant sur un bouton
        merci

        • Bonjour Olivier,

          A priori, il suffit d’envoyer une demande de photo sur d’autres dimensions.
          Donc prévoir les dimensions voulues puis ajouter un boucle dans la boucle de chaque fonction photo pour que le système pose la question de l’orientation.
          En fonction de cette orientation, il prendra la photo avec les valeurs liées à la variable qu’il suffira d’appeler « Orientation ».

          Bon dimanche,

  2. Bonjour Alban,
    Tout d’abords, BRAVO !!!
    Tu as réussi à rendre un produit hors de prix et sous « secret militaire » (impossible de trouver des DIY complet) accessible pour tous !
    Tes tutos sont hypers complet et ça correspond tout à fait a ce que je veux faire mais avec 2 ajouts si possible !
    Je voudrais rajouter la fonction d’impression avec une HITI P520L et la prise de vue par un Nikon D3100 (DSLR).

    J’attends avec impatience tes conseils ou avis !!!

    Bien à toi…

    • Hello Joch,
      Merci pour ton message.
      Alors, pour l’impression, j’ai réussi une version modifiée pour un événement pour l’asso d’une amie l’année dernère.
      En gros, j’avais mes 3 boutons pour photo 1x ou x3 ou x8, mais, à chaque action, la boucle contenanit une boucle secondaire qui restait en attente avec un aperçu de la photo et le message « on imprime ? ».
      Le bouton x1 devenait « oui » et le bouton x8 devenait « non ».
      Ensuite, ça repartait sur la boucle principale.
      Les instructions d’impression (lp) étaient adaptées à l’imprimante que j’avais acheté pour l’occasion (oui, cet événement m’a coûté de l’argent) à savoir une Selphy CP1300.
      Pour le module caméra, si tu veux le remplacer par un module PiCam3 ou un Reflex = il va falloir TOUT revoir car le script actuel ne le permet pas (d’ailleurs cet article est qualifiable d’obsolète car non utilisable avec les dernières versions de raspberryPiOS et le dernier module photo).
      Mes compétences étant quasi nulles dans le domaine, je ne vais pas pouvoir tout réécrire avec succès (je sais déjà, selon mes recherches, que le preview et le module V3 = c’est une horreur à gérer).

      Bref, si tu pars de cet article,
      Va falloir ne pas utiliser la dernière version de raspberryPiOS,
      Va falloir ne pas utiliser ni le module V3 ni un appareil photo
      Par contre, l’adaptation du script pour implémenter l’impression devrait être « assez facile » (j’y ai passé de nombreuses heures, mais c’est parce que je ne suis pas très bon et bosse par tâtonnement).

      Bon courage ! 😉

  3. Bonjour!
    J’ai une difficulté sur la galerie…
    Il me semble lire dans le readme du php qu’un lien de téléchargement des images doit être crée…
    Mais je ne parviens pas à charger depuis un navigateur les images de la galerie (je parviens au mieux à charger les thumbs).
    Est-il possible que chacun puisse charger les images en pleine résolution depuis le navigateur de son téléphone?
    Je ne sais pas si ma question est claire…
    En tous cas merci et grand bravo pour la mise en place technique!
    Jérémie

  4. Bonjour Alban,

    Tout d’abord, un grand merci pour votre site et ces tutos.
    Je regarde depuis plusieurs semaines pour faire un photobooth pour mon futur mariage et je suis tombé sur votre site!
    Le bonheur pour apprendre, comprendre et s’amuser.
    Merci !

    Je profite de ce message pour savoir si le script a évolué?
    Quand je regarde les vidéos qui se sont inspirés de votre site, il y a un décompte, un effet miroir avant la prise de la photo, des messages avant/après les photos,…
    Je pense que j’ai bien installé les prérequis, les scripts et les composants hardware sur mon raspberry 3 modèle B. Lorsque je lance le script, j’ai la page d’accueil et en appuyant sur un des 3 boutons, je n’ai rien pendant quelques secondes puis j’ai la photo qui apparait (fonctionne en 1/3/9 photos) mais pas d’effet miroir avant, pas de message, rien… Le reste fonctionne (c’est disponible dans la galerie Web, le tampon est bien posé,…).
    J’ai bien la commande :  » camera.start_preview() » mais c’est comme si elle ne se lançait pas…

    Avez-vous une idée?

    Je vous remercie par avance pour votre aide et tout ce travail.

    • Salut Georges,
      Mon script perso a énormément évolué depuis cet article mais reste ce que tu décris.
      Et la dernière fois que j’ai réinstallé en suivant ce tuto, j’avais bien le « preview » avec effet miroir.
      Depuis cet article, les choses ont bcp évoluée avec une gestion de la caméra qui est différente.
      Je suis avec une V2 installé en legacy et pas selon la dernière manière native ; c’est sûrement la différence.
      EN tous cas, merci pour les compliments 😀
      ++

      • Bonjour Alban, un énorme merci à toi pour ce tuto de dingue. J’essaye de le mettre en place sur un Raspberry Pi 4 avec le module 2 picamera, mais la gestion via picamera ne fonctionne plus car obsolète. Je suis une bille et je débute, comment remplacer tout cela par des choses plus à jour ? Merci par avance

        Vincent

  5. Bonjour,
    Je suis au stade de la réflexion et du regroupement du matériel !!!
    Ce qui est sûr, c’est que ça tournera avec RPI 3B+, une cam V2 pour la prévisualisation et un appareil photo pour la prise de vue.
    Par contre, une chose que je vois nul part, c’est la commande sans fil (type telecommande bluetooth avec un bouton avec quelques euros sur amazon)
    Etant (très) débutant dans le monde de la prog, pourrais-tu m’aider ou du moins me dire si c’est faisable ?
    Voici la telecommande que j’ai commandé :
    https://www.amazon.fr/gp/product/B09DK5FG5G/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1

    En attendant je continue de lire avec attention tes posts…

    Merci d’avance

    • Hello Joch,
      Tu vas rire.
      En tant que vieux un brin chelou, je n’utilise jamais le Bluetooth qui est le premier truc que je désactive sur un Rpi.
      Désactivation du WiFi ensuite. Idem sur mon (vieux) Smartphone (de récup) … qui n’a pas internet non plus. 😀
      Bon, je pense très sincèrement (je suis sûr) que c’est possible, mais je n’ai jamais essayé car tu as dû comprendre que je n’aime pas acheter/dépenser (j’ai énormément de matos de récup et/ou détourné) et je n’aime pas le « sans fil ».
      Bref, je n’ai pas la moindre piste pour le moment.
      Pssssiiit ; question : Comment fonctionne le PhotoBooth si pile HS ou télécommande perdue/volée ???
      ++

      P.S. : un ami l’a fait avec une télécommande de Wii = c’est possible !!!

  6. Salut Alban,

    Je retombe sur ton site en recherchant une info pour mon PhotoBox.
    J’en profite pour te laisser un commentaire.

    Mon PhotoBox réalisé en grande partie avec ce que tu as fait fonctionne parfaitement!
    Il a déjà servi pas mal de fois!

    J’ai ajouté quelques options comme des boutons supplémentaires pour faire des arrêts propres ou des reboots, une synchro automatique sur une clé USB pour la sauvegarde, etc.

    Maintenant je me pose la question de la caméra j’ai une caméra 1080p en CSI ça marche bien si on ne bouge pas sinon ça a vite tendance à capturer du flou.

    Je me demandais si il existait un autre produit? Ou des paramètres à affiner?

    Voir … une caméra USB ? Mais là, je ne saurais pas comment modifier le script.

    Encore bravo pour ton travail. Tu n’imagines pas à quel point les gens sont fou quand ils voient ce produit!

    Anthony

    • Hello Anthony,
      Merci pour le commentaire.
      Mon bouton d’arrêt lance des synchro sur volumes externes puis poweroff propre en plus des synchro récurrentes ; principe de sécurité 😉
      Pour ta question de la caméra,
      – Je suis avec une caméra V2, mais j’ai acquis une V3 avec l’aide d’un internaute.
      Cependant, faute de temps, je n’ai pas encore adapté mon script.
      – Le faire avec une WebCam obligerait également à modifier tout le script et je crains de perdre la prévisualisation.
      – J’ai pour projet de tenter avec G2photo car on m’a donné un vieux reflex, mais sans connaissances/compétences, pas facile de s’y mettre (faute de temps).
      Franchement, je pense que la V2 (8mpx) sur un Rpi4 (plus rapide) avec de bonnes conditions de lumière = c’est déjà pas mal.
      Maintenant, j’avoue, la V3 ou le reflex ; j’espère trouver le temps et les solutions 😉
      ++

        • Salut Fred,
          Je n’ai pas du tout eu (pris) le temps de travailler sur le module V3.
          J’ai un peu honte de laisser du matériel sans utilisation, mais je manque cruellement de temps (j’essaye aussi d’être plus dispo pour la famille qu’autrefois).
          Je suis toujours sur une version V2 et sur le V3 est resté en désuétude (mais je viens de le sortir de la caisse où il avait été rangé à la hâte il y a quelques mois)
          J’ai bien joué au loto pour ne plus avoir à travailler et pouvoir m’occuper des tas de projets qui traînent/trottent dans ma tête mais la FDJ refuse de me faire gagner 🙁

  7. Hello Génial tuto!!! Merci bcp… Superbe travail.

    J’ai un raspberry bi3b, installé dessus un ancien OS compatible avec raspistill.

    Laissé au placard depuis quelques temps, j’ai repris le projet en cours…

    Deux bugs apparaissent…

    Au démarrage du photobooth, il commence par prendre une série de 9 photos et une série d’une photo (ceci automatiquement).
    Pour info, je n’ai qu’un bouton sur le GPIO pour prendre 3 photos. Les autres ne sont pas mis. Quand j’avais mis tous les boutons ça redémarrait en boucle. Et je n’ai besoin que des 3 photos avec la 4eme qui reste fixe.

    Pour le mixage des 3 photos avec la photo fixe, elle ne s’affiche jamais. Une idée d’où ça pourrait venir?

    • Salut Benjamin,
      Ho un Belge ; je suis donc Mondialement connu (ok, je m’emballe un peu) 😀
      Merci pour les compliments ; ça fait plaisir !
      Tu peux faire le ménage dans le script pour virer les définitions des actions non désirées 😉
      Sinon, là, comme ça, je pense à un souci électrique ; tu n’as pas un câblage qui déconne ?
      Perso, je n’ai aucun souci, mais mon photobooth est une version largement améliorée de celle de cet article.
      Si ton image finale concaténée ne s’affiche pas, c’est simplement une histoire de chemin non trouvé.

      ++

      P.S. : vendredi, j’avais un souci de photo x8 en boucle car le bouton restait bloqué ; j’ai simplement démonté et nettoyé ledit bouton 😉

      • Star mondiale 😉

        Un problème de résolu. J’ai solutionné l’affichage de la photo4 en donnant le chemin complet et non en partant du principe qu’elle est dans le même dossier que le reste. Ca fonctionne.

        Reste les boutons, je vais trouver.

        Seul le bouton 3 prises est connecté les autres non, mais je vais vérifier avec les autres connexions qui sont venues s’ajouter.

  8. Salut Alban,
    j’ai enfin pris le temps de me servir d’une partie de ton tuto pour l’utilisation hotspot+galerie php…
    par contre j’ai rapidement rencontré un problème… nous n’arrivions plus à nous connecter… je pense que c’est du fait du grand nombre de personne voulant recuperer les images…
    as tu deja assisté à cela ? le pi limite t il le nombre de connexion en mode hotspot ?

    merci d’avance.

    • Salut fred,
      Je n’utilise le point d’accès qu’à titre perso pour la gestion du Rpi que je gère depuis mon PC sous Linux.
      Mais 2 explications :
      – Tu as une partie de la réponse dans la configuration :
      # plage d'adressage IP, masque et durée du bail
      dhcp-range=192.168.50.150,192.168.50.200,255.255.255.0,12h

      Ta plage d’adressage réseau ne comporte que 51 adresses disponibles et le bail est attribué pour 12h.
      Tu pourrais modifier ces paramètres pour permettre un nombre de connexion plus grand et/ou un temps de bail plus court.
      – Une autre explication serait que les appareils modernes (moi, je n’ai que du vieux matos donc ne suis pas impacté) ont horreur des points d’accès n’offrant pas un routage vers le Net.
      Bref, tu peux adapter la config interne au Rpi, mais tu ne pourras rien contre ces géants du Web qui « savent mieux que tout le monde » ce que le monde doit devenir 😉
      ++

      P.S. Évidemment, en sus de cela : tout dispositif peut se retrouver saturé s’il est l’objet de multiples connexions. Exemples concret : quand tes 4 enfants te sollicitent en même temps = tu ne peux pas répondre à tout le monde 😀

    • Salut Benoît,
      Je n’ai pas de module Caméra V3, donc … It’s not possible currently.
      Mais si une âme charitable m’en prête/offre/donne/fournit une, je pourrais essayer 😀
      ++

  9. Bonsoir,

    Tout d abord bravo, pour cet excellent boulot.
    Je suis bluffé.
    Sans avoir la prétention de faire aussi bien, j ai un vieux rp1b qui traîne, est il compatible….

    Cordialement
    Fred

    • Hello Fred,
      Si tu es prêt à attendre 5 minutes entre chaque action, c’est possible. 😀
      Sinon, tu n’essayes même pas !
      J’ai tenté sur RpiZero (et RpiB) ; Rpi3 ; Rpi3B+ et Rpi4.
      Le Rpi4 = confortable,
      Les Rpi3 et 3B+ = utilisable,
      Les autres = une misère !!!
      ++

  10. Bonjour,
    Je voudrais savoir si lors de l’appuie sur les boutons le script est ultra réactif ? Car pour moi ça prend 4 à 5 secondes après l’appuie pour prendre la photo.
    Si ce n’est pas un comportement normal je vais chercher.
    Merci

    • Salut Ririwin,
      Sur un Rpi3, le lancement de l’aperçu se fait directement après avoir appuyer sur le bouton.
      Les différences sur Rpi3, Rpi3B puis Rpi4 porte juste sur le temps de traitement des images.
      ++

    • Salut Romain,
      Tu as donc un problème avec le script à l’extinction et avec les taches cron.
      – Pour l’extinction, je suis sûr que tu n’as pas adapté. 😉
      Le script étant vieux (et mal fait), il précise l’année en cours.
      rm /var/www/html/photos/2020*
      (ça supprime tout ce que commence par 2020 … mais … nous sommes en 2023 😀 donc rm /var/www/html/photos/20* peut paraître plus pertinent)

      Pour les taches crontab, ça peut être simplement un truc du même genre.
      Tes clefs s’appellent bien PHOTOS01 et PHOTOS02 ?
      Ton user est bien pi ?
      Sinon, si tu lances ça dans un terminal, tu as quoi comme réponse ?
      (il faut que des fichiers soient présents dans /var/www/html/photos/)
      rsync -av /var/www/html/photos/ /media/pi/PHOTOS01/
      et
      rsync -av /var/www/html/photos/ /media/pi/PHOTOS02/
      ++

      • Salut, merci alban super il s’agissait bien de la crontab. Cependant un nouveau problème est apparu, au démarrage du fichier une fois sur l’écran d’accueil la boucle d’extinction se lance toute seul, je pensais à un pro le du raspberry et non du programme tu en pense quoi ?

  11. Bonjour,
    Merci beaucoup pour votre travail! Petite question :o)
    Cela fonctionne parfaitement! En revanche une fois le hotspot activer je perds le wifi quand je suis a la maison.
    Est-il possible de désactiver le hotspot (pour recup ma connexion wifi ? si oui comment (quelle ligne de commande)? et quelle procédure pour le re-activer (ligne de commande)?
    Merci d’avance.
    Bonne soirée

    • Bonjour Philippe,
      Perso, je n’aime pas le WiFi.
      Donc mon PC est en filaire sur le réseau (j’ai câblé la maison).
      J’ai le HotSpot sur le PhotoBooth.
      Je me connecte sur le WiFi du Booth avec mon PC portable et je prends la main en ssh.
      Comme ça, j’ai internet (en filaire pour avoir tout ce que je veux) et je bosser en WiFI sur le Booth.
      Et, si j’ai besoin d’Internet sur le Boot, je lui colle un câble RJ45.

      Cependant, pour le fun, je vais te pondre un script pour activer et désactiver.
      Mais ça va me prendre un peu de temps car je ne suis pas un génie malheureusement.
      Je poste ça ce soir je pense.

      ++

        • Hello,

          Pas facile pour un blaireau, mais comme je suis sur Linux depuis un moment et que je suis têtu = j’ai pondu une solution (de blaireau, mais qui semble fonctionner 😀 …)

          –> Script pour désactiver le HotSpot

          #!/bin/bash
          
          sudo systemctl disable hostapd dnsmasq
          
          sed '{s/nohook wpa_supplicant/#nohook wpa_supplicant/g;
          s/interface wlan0/#interface wlan0/g;
          s/static ip_address=192.168.50.10/#static ip_address=192.168.50.10/g;
          s/static routers=192.168.50.1/#static routers=192.168.50.1/g;
          }' /etc/dhcp.conf > /etc/dhcp2.conf
          
          mv -f /etc/dhcp2.conf /etc/dhcp.conf
          
          sudo reboot

          –> Script pour résactiver le HotSpot

          #!/bin/bash
          
          sudo systemctl enable hostapd dnsmasq
          
          sed '{s/#nohook wpa_supplicant/nohook wpa_supplicant/g;
          s/#interface wlan0/interface wlan0/g;
          s/#static ip_address=192.168.50.10/static ip_address=192.168.50.10/g;
          s/#static routers=192.168.50.1/static routers=192.168.50.1/g;
          }' /etc/dhcp.conf > /etc/dhcp2.conf
          
          mv -f /etc/dhcp2.conf /etc/dhcp.conf
          
          sudo reboot
          1. Tu dois créer 1 fichier bash pour chaque script
          2. Tu dois les rendre exécutable (chmod)
          3. Tu dois les appeler avec sudo.

          Je n’ai pas testé sur ma borne, mais c’est OK sur un fichier /etc/dhcp.conf créé pour l’occasion sur mon poste Linux.

          ++

  12. Bonjour Alban, je souhaiterais réaliser ce photobooth mais avec impression directe. Serait il possible de m’indiquer la procédure svp. Merci pour ces tutos très pratiques pour des divertissements sympathiques.

    • Salut Philippe,
      – Réponse très courte :
      En concaténant les 2 articles :
      Photomaton* ultime de la mort qui tue
      Photomaton à base de Raspberry Pi – Choix 1 ou 4 ou 8 photos et impression directe.
      – Réponse courte :
      Tu installes CUPS et ses dépendances.
      Tu ajoutes, dans le script, à chaque définition de prise de photo, le fonction d’impression avec os.system(‘lpr -h -P....
      – Réponse plus didactique :
      En lisant les 2 articles sus-cités, tu verras que c’est l’ajout de la fonction impression avec os.system(‘lpr -h -P... qui poursuit la prise de photo par son impression.

      Maintenant, il semble plus « écologique/économique » de scripter la fonction pour que tu puisses afficher une confirmation avant d’imprimer.
      Sinon, tu vas rapidement regretter ce choix d’impression inconditionnelle 😀

      A bientôt,

      • Bonsoir, je suis scotchée par la rapidité de la réponse… En tout cas merci beaucoup. Si tu as une « ligne magique » a me faire ajouter au script pour la confirmation d’impression je suis preneur. Encore merci pour tes explications.

        • Re,
          Il faut déjà que tu installes et testes ton imprimante.
          Mon article est un peu vieux, mais devrait fonctionner.
          Ensuite, tu adaptes cette ligne :
          lpr -h -PNom-de-ton-imprimante -#1 -o media=A4 -o scaling=25 '/home/pi/chemin/photos/ta-photo-test.jpg'
          pour qu’elle fonctionne avec ton imprimante.
          A tester dans le terminal directement ; pas dans le script.
          Une fois que tu seras sûr que ça imprime, alors,
          Ensuite, tu injecteras ça dans un os.system(‘xxxxx’).
          Puis tu variabiliseras '/home/pi/chemin/photos/ta-photo-test.jpg' pour que ton script imprime non pas un fichier en particulier mais LA photo qui vient d’être prise.
          C’est la logique à suivre.
          Après, si j’étais sur place avec toutes les infos, ça serait sans plus facile. 😉
          ++

    • Félicitation pour ce beau Photomaton !, j’ai 2 questions, est-il possible d’utiliser une webcam genre BRIO de Logitech plutot que la camera decrite ?

      j’ai une imprimante DNP RX1HS, puis je la connecter sur le systeme ?

      • Salut Benoît,

        Pour utiliser une WebCam, il faudra revoir le script qui utilise PiCamera.
        En gros, Picamera est la version Python de Raspistill et Raspivid ce qui signifie que cela est prévu pour être utilisé avec le module RaspiCam (sur nappe CSI).
        Les caméras USB utilisent d’autres voies comme le V4L2.
        J’utilise des WebCam avec ffmpeg (voir mon article Sonnette connectée à base de Raspberry Pi), mais dans ce cas, je ne sais pas gérer le preview et l’overlay.

        L’ajout d’une imprimante est possible.
        Tu devras installer CUPS et ses dépendances puis ton imprimante et la tester à part (je n’ai jamais sauté le pas d’acheter une DNP en raison du coût donc je n’ai pas testé).
        Ensuite, tu regardes l’article Photomaton à base de Raspberry Pi – Choix 1 ou 4 ou 8 photos et impression directe qui utilise une impression directe.
        En gros, tu ajoutes, dans le script, à chaque définition de prise de photo, le bout de la fonction d’impression avec os.system(‘lpr -h -P….

        ++

  13. Merci pour l’inspiration,

    Suite à la question de tout-à-l’heure j’ai continué à grenouiller et réussi à trouver la solution (créer le dossier logs).
    Mais maintenant le fichier photo ne se sauvegarde pas.
    Je poursuivrais cette nuit mais je sens qu’un peu de communication avec le Concepteur pourrait aplanir une partie des difficultés du débutant que je suis (en dehors de la réalisation d’un téléphone à poèmes avec arduino).

    Merci quoi qu’il en soit.

    Julien

    • Oups 😀

      Dans ma réponse, je n’ai pas noté que mkdir /var/www/html/logs servait à créer le dossier « logs » dans /var/www/html

      D’ailleurs, si on veut créer tous les dossiers (là, on avait déjà l’arborescence), on peut faire
      mkdir -p /dossier_1/dossier_1_A/dossier_1_A_1/dossier_1_A_1_a
      voire même
      mkdir -p /dossier_1/dossier_1_A/dossier_1_A_1/dossier_1_A_1_a/sous-dossiers{1..4}

      Pour échanger, tu peux passer par mon courriel (je t’ai écrit) ou la page « contact ».

      ++

  14. Bonjour Alban,
    Formidable boulot, merci. Il y a des tas de propositions avec imprimante, mais le hotspot c’est vraiment une idée qui simplifie l’usage. Merci derechef.

    Ceci dit je rame sur le point 8 avec une litanie de messages d’erreur au lancement du script final Photomaton_x1x4x8.py
    Chaque block de traceback abouti à une erreur n°2 : un fichier de debug en .log n’est pas trouvé dans le dossier /var/www/html/logs. De fait il n’y est pas.

    Y aurait-il moyen d’échanger directement sur cette question? Cela doit être un problème tout bête mais là je me bloque depuis des heures.

    • Salut Julien,

      Tu peux tenter ça ?

      sudo chown -R pi:www-data /var/www/html && sudo chmod -R 770 /var/www/html && mkdir /var/www/html/logs

      Je t’envoie un courriel en parallèle.

      ++

  15. Bonjour Alban et merci pour toutes vos explications!!!
    Désireux de réaliser un photobooth suivant vos instructions mais avec quelques modifications et surtout des connaissances limitées en informatique, est il possible d’échanger par mail ou téléphone ?
    Je souhaiterais vous exposer mon idée .
    Merci de votre disponibilité, dans l’attente.
    Nicolas

  16. Bonjour,

    Tout d’abord, super Tuto.
    Novice dans le domaine, je suis en train de faire une borne photo pour mon mariage et grâce à vous, j’ai quasiment fini.
    J’aurai juste une question. Mon écran est au format 1920×1080 et la page d’accueil et la prise de vue de la photo ne prenne pas la totalité de l’écran. Comment faut-il faire pour agrandir l’affichage de la page d’accueil de la borne et de la prise de vue de la photo pour que ca prenne la totalité de mon écran. J’ai essayé en modifiant les valeurs « LARGEUR_ECRAN » et « HAUTEUR_ECRAN » avec mes valeurs mais ça ne fonctionne pas.
    Merci d’avance.

    • Salut Christophe,
      J’avais réalisé une version 1920×1080.
      Cependant, étant uniquement en 1280×1024, je ne sais plus exactement comment se faisait l’affichage :-s
      Mais le truc sûr, c’est que (faute de compétences en la matière) j’en avais vraiment bavé pour trouver des configurations qui passait en affichage.
      Je vais voir si j’arrive à y jeter un œil mais en fin de reconversion (à mon âge, avec 4 enfants, franchement ; est-ce sérieux …) je t’avoue que je manque cruellement de temps.
      Désolé pour cette réponse qui n’en ai pas une 🙁
      ++

  17. Bonjour Alban,

    Après avoir fait un tour récemment par ici je me suis aperçu qu’on était bien loin de mon photomaton réalisé (grâce à ton aide très précieuse) avec une simple prévisualisation qui a tout de même fait un carton il y a plus de 2 ans pour mon mariage….
    Tout ça pour dire que tu m’as donné envie de me lancer dans ce magnifique projet qui déchire mais arrivé à l’étape 8 les logos ne s’affiche pas au montage, en revanche le tampon oui.
    Ou me suis-je planté?
    Merci d’avance

    • Hello Guillaume,

      Oups, pas vu ; hier, en rentrant de mes cours, j’ai rebossé plus de 2h30 sur un projet de développement Web et je n’ai pas vu ton commentaire.
      C’est dingue, à 47 ans et en formation Bac+3 Concepteur de Système d’Information, ce qui m’amuse la plus est en lien avec le code 😀

      En effet, après avoir aidé les autres durant des heures et des heures, mes collègues m’ont poussé à bossé pour « moi et ma reprise d’études » … et … je me suis pris au jeu de l’amélioration continue.
      – As-tu mis les logos au bon endroit ?
      – As-tu nommé les logo avec le bon nom ?
      – Ont-il le bon format ?
      A priori, ces 3 pistes sont les raisons du plantage.

      ++

      • Salut Alban,

        Pour le moment je n’ai pas encore créé mes propres logos, je préfère partir sur ceux que tu nous fournis dans le fichier Zip afin d’éviter toute erreur justement. j’ai donc récupérer le fichier 4logo.jpeg et le 9logo.jpeg.
        J’ai ensuite mis un dossier photo et logs dans /home/pi/Photomaton_x1x4x9_fond et ajouter les 2 logos dans logs…. puis par la suite j’ai également tenté la même opérations dans différentes arborescence mais rien ‘y fait….
        Merci encore pour tes dipso au TOP.
        ++

        • Yo,

          Tu dis

          ajouter les 2 logos dans logs

          Mais :
          Logos = logos
          Logs = Logs
          Logos != Logs
          😀

          Bref,
          Tu mets les logos dans /var/www/html/ et tout ira très bien 😉

          Quand je dis :

          Évidemment, créez un dossier « photos », un dossier « logs » et mettez vos fichiers « 4logo » et « 9logo »

          Cela signifie que tu dois créer un dossier photos et un dossier logs dans /var/www/html/ et mettre les fichiers 4logo.jpg et 9 logo.jpg dans /var/www/html/.

          Tu dois avoir ça :

          pi@raspberrypi:~ $ ls /var/www/html/ -1
          4logo.jpg
          9logo.jpg
          index.php
          logs
          photos
          readme.txt
          _sfpg_data
          pi@raspberrypi:~ $ 

          ++

          • Bonjour Alban,

            Effectivement la magie opère une nouvelle fois et tout fonctionne normalement…au TOP comme d’habitude. Etape suivante au programme de ce soir!
            Merci encore

            A++++

  18. Bonjour, je n’arrive pas a installer le module RTC. Il est connecté correctement sur le GPIO et le i2c est bien activé. Mais il n’est pas détecté. Peut etre un modèle défaillant. Mais ça m’embête un peu d’en acheté un autre car il y a un délai assez long xD
    Est-il obligatoire ?

    • Autre chose : Je ne comprends pas ce qu’il faut éditer dans la partie 8. C’est vraiment trop obscure pour moi. Désolé, je suis vraiment débutant dans le domaine raspberry.

        • Mais du coup que doit on changer ? Car j’ai beau lire (avec traducteur) le read me mais je ne comprends pas grand chose. C’est des lignes à commenter ?
          Mise à part d’avoir un fichier photo, logs et mes propre logos.

          • Re,
            Tout tient dans cette partie.
            option(‘GALLERY_ROOT’, ‘./’);
            C’est à toi de dire à la galerie où sont tes photos.
            Je te conseille donc de donner le path final.
            Et je crois savoir que tu veux mettre tes images dans le dossier « photos » 😉
            ++
            (et regarde tes courriels ; une aide concrète est déjà arrivée)

    • Salut Florian,
      Non, le module RTC n’est pas obligatoire.
      C’est juste terriblement pratique pour nommer les images avec date et heure 😀
      Deux options s’offrent à toi :
      – Tu peux (tenter de) modifier le script pour que les photos soient nommées Photo_0001 puis Photo_0002 pour t’y retrouver.
      – Tu peux aussi, le connecter en filaire au réseau pour qu’il chope l’heure et ne pas l’éteindre pour qu’il reste à l’heure le temps de son utilisation.
      ++

      • Salut Alban, je suis bloqué egalement à l étape du RTC, je souhaiterais zapper cette option dans le script que faut il modifier dans le script pour qu’il les nommes comme photo_1 photo_2 photo_3 ect ect..
        merci de ton retour.

  19. Bonjour Alban et merci pour le partage de ton chouette projet.
    Je me questionne sur l’éclairage. Mon photobooth sera utilisé dans un recoins sombre pendant la soirée de mariage. Plutôt que d’utiliser ta fonction flash, je pense qu’il sera plus pertinent de mettre un éclairage permanent avec une projecteur led intégré à mon photobooth.
    Alban ou d’autres utilisateurs qui passeraient par là (coucou), avez vous des retours d’expérience à me faire sur ce point ?

    Remarque : j’ai adapté le code afin que le programme et l’image d’accueil s’affichent en 1920×1080 plein écran.
    Merci 🙂

    • Hello,
      Franchement ?
      Le flash, ça fait son petit effet et style « je suis trop fort ».
      Mais, ça ne sert à rien in fine.
      Je trouve personnellement que l’éclairage permanent (par le photobooth ou un éclairage additionnel) est une meilleure solution (la caméra n’a pas à s’adapter aux changements de luminosité).
      Cela ne reste évidemment que mon avis … mais c’est aussi celui d’un ami internaute (ou d’un internaute devenu un ami en réalité).
      ++

  20. Bien le Bonjour

    Tout d’abord, « Good Job » super projet avec un super tuto.
    Cela fait 2 ans que je me suis mis au Rpi pour faire une box domotique puis une console rétrogaming; mais j’ai décidé de me lancé dans le Photo Booth pour faire des souvenirs lors de notre Sainte Barbe en caserne.
    Actuellement je bloque lors du test localhost qui m’affiche le dossier html avec tout les dossier photo, logo etc.
    Je pense avoir fait une boulette au collage du dossier ou avoir oublié quelques choses. je ne veux pas aller plus loin tant que je n’ai pas la solution qui doit certainement être toute bête mais peux servir à quelqu’un d’autre.

    Merci

    Mickael

  21. Bonjour,
    merci pour le tuto, ça à l’air génial ….mais que je n’arrive pas à le mettre en place …
    Je ne comprend pas comment faire l’étape 8, « Installation de PHP et de la galerie Web » et je suppose que sans cela le reste ne marche pas.
    J’ai téléchargé « Download latest version here: Single File PHP Gallery 4.8.0 (40kB) » à partir du lien mais je ne sais pas quoi en faire, je ne comprend pas comment il faut le paramétrer et « l’ami » google ne me propose aucune vidéo de démo… le traitre il me laisse tomber 🙂
    Si tu as 5 minutes pour m’expliquer ?? merci
    Duael

  22. Bonjour ,

    Votre article est tout simplement formidable. Etant novice , je pêche encore sur quelques points ( les branchements par exemple mais mon ami google va surement m’apporter la solution).

    Il y a un point que je n’arrive pas à comprendre par contre. Est ce uniquement accessible par un équipement annexe ?
    Est-il possible de permettre la visualisation de la galerie des photos directement via le photomaton ?

    • Salut Julien,

      Merci !
      C’est vrai, il est formidable ; comme moi 😀

      Bon, sérieusement ; j’avoue, tu as raison ! L’ajout de détails et de photos vis à vis des ports GPIO pourrait aider les novices.
      Mais comme je l’ai déjà dit « Si la réussite facile flatte l’égo. C’est de la persévérance que naît le plaisir de la réussite. »
      Tu seras donc fier de toi après cette montée en compétences.

      Pour ta question, oui, la galerie est DANS le Raspberry, mais accessible VIA un périphérique TIERS.
      Tout comme mon site est hébergé dans une machine chez OVH, mais est accessible via ton navigateur sur ton PC (ou tel).
      Le serveur diffuse les données pour autrui.
      Ton Raspberry génère un réseau (serveur) et tu connectes un ou des appareils (PC ou tel) pour voir les images.

      Bien sûr, si tu coupes le script et lance ton navigateur sur le Rpi = tu pourras afficher cette galerie … mais tu n’auras plus le photobooth en fonction 🙂

      Avec mes reprises d’études, je suis « un peu » pris, mais si tu veux, tu peux essayer, (avec un Rpi4) de faire sortir le PhotoBooth sur un écran et d’afficher les images de la galerie sur un second écran.
      Si tu le fais, tu pourras écrire cet article ici même pour proposer cette amélioration.

      Bonnes bidouilles 😉

  23. Bonjour,
    Felicitation car je peux deja utiliser le photomaton dans son état simple mais j’ai un souci avec la web gallery
    a l’etape 08 – Installation de PHP et de la galerie Web
    Mes photos prisent par pibooth s’enregistrent dans le dossier /home/pi/Pictures/pibooth mais je n’arrives pas a les envoyer vers var/www/html pour les voir dans la web gallery
    Je débutes en Raspberry je sais mais j’ai longuement chercher sur internet avant de vous déranger.
    Merci d’avoir pris le temps de me lire et encore merci pour le programme que je trouve top.

    • Salut Matthieu,
      Merci pour les compliments 🙂
      Au début du script, tu as modifié cette ligne ?
      CurrentWorkingDir= "/var/www/html/"
      Chez moi, le concept, c’est d’enregistrer les images directement dans var/www/html
      Au pire, si tu veux les avoir dans ton dossier, tu devrais pouvoir faire un lien symbolique de /home/pi/Pictures/pibooth vers var/www/html.
      Tu testes et on en recause ? (je ne fais que passer en coup de vent)
      ++

      • Mille merci….. et la rapidite de la reponse est exceptionnel. Vous etes investi et franchement je trouve ca excellent
        Bonne soiree et encore merci

        • Re,

          Comme la pelouse est tondue et le repas presque prêt, je prends 30 secondes 😀
          On peut aussi faire un truc « con ».
          Tu gardes ton dossier /home/pi/Pictures/pibooth et tu copies tout dans var/www/html via une tache crontab.
          Mais bon, ça prend le double de place sur la microSD 😉

          ++

  24. Bonjour,
    Super boulot qui m’a donné envie de me lancer même si je n’y connais pas grand chose.
    Je suis quelque peu ennuyé par la résolution d’écran.
    J’ai souhaité faire un appareil mini et donc acheté un mini écran résolution 1024*600.
    Le problème est que l’image est coupée dans tous les menus et que je n’arrive pas à la faire voir de manière complète.
    J’ai tenté des modifications de scripts mais je suis trop…mauvais… pour cela.;-(
    Pourriez vous m’aiguiller ?

    Merci et encore bravo.

    Jonathan

      • Hello,
        Faut que je regarde si je n’avais pas aidé Jonathan en privé (je passe pas mal de temps à aider en direct aussi) 🙂
        En gros, l’idée est de faire des maths et des tests pour modifier le script avec les bonnes dimensions.
        Faute de compétences dans le domaine, j’ai utilisé la « méthode singe » (tester plein de solutions) pour arriver à mes fins.
        Mais j’avoue, c’est à devenir (encore plus) dingue 😀
        ++

          • Voilà, c’est ça !
            Et demain soir,après avoir passé plus de 12h sur le code, tu comprendras mon :
            « Bienvenue douce folie » 😉
            Je tente de regarder, mais comme je n’ai pas d’écran 1024×600, ça ne sera pas facile.
            T’es pas proche de Rennes des fois ?
            (sinon, j’accepte les cadeaux aussi 😀 …)

  25. Bonjour,
    Il serait intéressant que l’écran affiche un QR code après la prise des photos, afin de permettre à l’utilisateur de la télécharger directement depuis un web server,

    Cordialement

    • Bonjour Xavier,
      C’est en effet ce qui était prévu dans la version précédente.
      Dans « le temps », j’avais réalisé un projet où je générais des QR-Codes qu’un Rpi lisait ensuite avec sa caméra donc j’ai pensé à cette solution il y a quelques mois.
      Mais, faute de temps, cette idée est restée dans les placards et … ressortira … un jour 😀
      Au plaisir,

  26. bonjour et encore merci pour cette excellent travail
    cela m’aide énormément pour mon futur mariage
    j’aurai des petit question
    comment faire pour qui le photo maton prennent tous l’écran car je suis sur un écran 22 pouces mais les image et la cam sont en 4:3 merci de votre aide

    • Bonjour Jean-Michel,

      Il faut modifier les valeurs d’affichage, de photos et d’écran dans le script.
      Selon mon expérience, la photo sera cependant « décalée » d’où mon choix de forcer un affichage « carré » même sur écran 1920×1080 (voir le script Photomaton_x1x4x9_1920x1080.py de mémoire)
      Mais tu verras que modifier les valeurs affichage/photo/écran relève de la galère 🙁
      (j’ai passé des heures et des heures, voire des jours et des jours sur ce problème)
      Tiens nous au courant,

      ++

  27. Rétroliens : Photomaton* automatique à base de Raspberry Pi – TREVILLY.COM

  28. Rétroliens : Ajouter un flash à votre PhotoBooth – TREVILLY.COM

  29. Rétroliens : Photomaton avec prévisualisation (sous Raspberry Pi) – TREVILLY.COM

  30. Une fois de plus, excellent tuto rédigé par tes soins, simple de compréhension, c’est fluide, réaliser un photobooth devient un jeu d’enfant pour les moins aguéris grace a toi !
    Ma fille a eu avoir son photobooth pour son anniversaire, et comment te dire qu’elles en bien profités toute l’aprem !
    Aujourd’hui ma version « simple » de transformé en « connecté avec galerie en ligne » et c’est vraiment une excellente amélioration.

    Deux petites choses qui m’ont un peu fait galérer :
    – La longueur du mot de passe du hotspot qui doit impérativement faire Minimum 8 caractères (je n’avais pas lu les commentaires …)
    – le ‘/’ a la fin du chemin d’accès de la galerie dans le fichier index.php sans ce dernier affichage des vignettes mais pas des images (indiqué dans le readmi … Mais quand tu as un peu (beaucoup) de mal avec l’anglais … Tu as tendance a loupé ce genre de détail )

    Bonne continuation a toi l’ami, encore BRAVO pour tout ce travail partagé, et merci pour tout.

  31. Bonjour,
    Super tuto, félicitations pour le taf réalisé !!!
    Je recherche la possibilité d’avoir un bouton supplémentaire qui moyennant une imprimante raccordée au Raspberry, pouvoir réaliser l’impression de la photo ou de la composition
    Mais mes connaissances étant limitées je galère un peu
    Au cas ou l’idée vous paraissent intéressante 😉
    A+

    • Merci !
      Réponse rapide en mangeant :
      Pour l’impression, soit on lance « bêtement » à chaque fois (idiot à mon sens en terme de gaspillage), soit on fait une boucle d’attente au moment de l’afficahge de la photo prise avec 2 boutons : 1 pour oui, on imprime et on repart à l’accueil ; 1 pour non, on n’imprime pas et on repart à l’accueil.
      Bref, facile en théorie.
      J’avoue que ne connaissant pas le python, j’ai bien galérer à trouver l’astuce (plusieurs heures de recherches et tests).
      Un prochain tuto à venir ??? …

      ++

  32. La grande grande classe… Bravo Alban… tes explications sont très claires, et ton talent est à la hauteur de ta gentillesse… bravo pour ce que tu fais…

    • Yo Ju,

      Merci pour cette spontanéité.
      Pour expliquer le « ton talent est à la hauteur de ta gentillesse », je précise aux Internautes que j’aide, sur mon temps personnel (avec parfois un peu trop d’enthousiasme (selon ma femme et les enfants … :-s ) certaines personnes dans leurs projets (on passe en privé pour ne pas polluer inutilement les commentaires).
      Mais à moi de vous remercier tous car c’est cela le sens du partage : apporter aux uns ce que d’autres nous ont apporté ; mais aussi progresser avec et par les autres car les avis et les discussions aident à aller de l’avant dans ce type de projets.

      Au plaisir,

  33. Bonjour, Grand merci Alban pour tout ce travail !

    Superbe tuto très explicatif et précis !

    Pour info , à l’étape de l’installation du Hotspot , au choix du « wpa_passphrase » choisissez bien un mot de passe de plus de 8 caractères ( mini requis en WPA )… car à moins vous ne pourrez jamais voir/vous connecter a votre hot-spot.

    @+fred

    • Merci Fred

      Et merci pour cet ajout sur la longueur de champ PassPhrase ; je l’intègre dans l’article !
      De la à conseiller de noter « Alban-est-Grand » (15 caractères), il n’y a qu’un pas 😀

      @+

  34. Salut Alban, j’ai donc l’honneur de laisser le 1er commentaire sur ce photomaton de la mort, the photobooth, sans doute la prochaine référence pour les fans de DIU qui vont s’aventurer par ici. J’ai eu plaisir à lire l’avancée de ce travail et je ne doute pas une seconde que chacun y trouvera son bonheur, avec un script on ne peut plus complet, parfaitement abouti.
    Bravo et merci

    • Merci Yohan,
      Avec plaisir 😉
      Il est vrai que le temps investi dans ce projet est extrêmement important.
      Alors que, in fine, une fois tout le travail de recherche et conception passé, l’article semble presque trop facile, j’avoue y avoir passé des jours et des jours.
      Je vais tenter d’enrichir le tutoriel avec la partie conception du boîtier car ma seconde borne à Selphies et nettement mieux que la première alors que fabriquée en 3 jours sur annonce d’un autre mariage surprise !
      A bientôt,

Laisser un commentaire

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

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.