Création d’une Cabine photo (« photomaton » ou Photobooth) avec un Raspberry Pi
Le but est de créer une cabine photo (photobooth en anglais) avec un Raspberry Pi.
Cette cabine photo doit être le plus autonome possible et demander une maintenance minimum une fois en marche. Les seules opérations physiques seront la mise en route, l’arrêt et le changement de clef usb lorsque celle-ci est pleine.
Pour agrémenter l’objet, j’ai décidé de lui ajouter une matrice LCD. Cette matrice va permettre d’indiquer qu’une photo va être prise et va aussi afficher des animations d’attente entre les déclenchements.
Je pars du principe qu’une version de Raspbian a déjà été installée. Si ce n’est pas le cas, on trouve des tutoriaux partout, en particulier celui-ci.
Configuration matérielle et budget
Raspberry Pi B+(ou version supérieure, Pi zéro inclus) + Raspbian | ![]() ![]() | entre 5 € et 40 € |
Camera (v1 ou v2) | ![]() | v1 : 20 € v2 : 30 € |
pHat Pimoroni | ![]() | 10 € |
Un bouton | ![]() ![]() | 1,5 € pour un bouton type « arcade » 10,5 € pour le gros bouton rouge |
Clef usb | Dépend de la taille |
Le budget minimum est inférieur à 40 €. Auquel il faut rajouter l’habillage de la cabine.
Configuration Raspbian
Un des moyens pour effectuer les opérations suivantes est d’accéder au Raspberry via ssh. Cette méthode est bien documentée (voir là par exemple), je ne vais pas entrer dans les détails.
Personnellement, j’utilise MobaXterm.
Pour activer la caméra, une fois connecté au Rapsberry Pi, dans une console, taper la ligne de commande suivante :
[cc lang= »bash »]sudo raspi-config
[/cc]
Puis choisir d’activer la camera (« Enable Camera »).
Il faut aussi charger le module SPI : « Interfacing Options » puis « P4 SPI Enable/Disable automatic loading of SPI kernel module (needed for e.g. PiFace) ».
Montage auto de la clef usb
Il faut pouvoir changer de clef usb lorsque celle utilisée est pleine (ou a atteint un certain seuil de remplissage) sans devoir se connecter au Raspberry Pi. Les clefs usb doivent être détectées et montées automatiquement.
Création d’un répertoire /media/usb
Les clefs usb seront montées dans le répertoire /media/usb. Cela peut être n’importe quel répertoire, il faudra juste modifier le fichier « main.py » à la ligne [cc lang= »python »]usbPath = « /media/usb/taface »[/cc]
Dans une console, taper les lignes de commande :
[cc lang= »bash »]sudo mkdir /media/usb
chown -R pi:pi /media/usb[/cc]
Récupérer l’uuid de la clef puis ajouter une entrée dans fstab
Il faut répéter les actions suivantes autant de fois qu’il y aura de clefs.
Taper la commande suivante et noter l’identifiant de la clef usb.
[cc lang= »bash »]sudo blkid -o list[/cc]
Puis éditer le fichier fstab pour lui ajouter la ligne suivante. Il faut modifier « YOUR_UUID » par l’identifiant de la clef.
[cc lang= »bash »]sudo nano /etc/fstab[/cc]
Puis ajouter la ligne suivante
[cc lang= »bash »]UUID=[YOUR_UUID] /media/usb vfat auto,nofail,noatime,users,rw,uid=pi,gid=pi 0 0[/cc]
Ainsi, les clefs usb référencées seront montées dès le démarrage. Il ne faut pas brancher toutes les clefs en même temps.
Code Python3
Le code source est écrit en Python3.
Il faut charger les librairies pour la caméra et le pHat :
[cc lang= »bash »]sudo apt-get install python3-picamera
sudo apt-get install python3-pip python3-dev
sudo pip3 install unicornhat[/cc]
Le code pour la cabine photo est disponible sur GitLab: Taface
Il suffit de récupérer la dernière version et de copier l’ensemble dans un répertoire.
Exécution au démarrage
Toujours dans le but d’avoir le moins de manipulations à devoir effectuer lors de l’utilisation, l’application doit se lancer dès le démarrage du Raspberry Pi.
Si besoin, modifier le fichier « taface.service » pour prendre en compte le chemin vers le code (il faut modifier ce qui se trouve derrière les balises « ExecStart » et « WorkingDirectory »).
Puis
[cc lang= »bash »]sudo cp taface.service /etc/systemd/system
sudo chmod u+rw /etc/systemd/system/taface.service
sudo systemctl enable taface[/cc]
Rédamarrer le Raspberry puis vérifier que le service est lancé avec la commande suivante (si la matrice lcd est correctement branchée, elle devrait s’illuminer) :
[cc lang= »bash »]sudo systemctl is-active taface.service[/cc]
Si « inactive » s’affiche, c’est qu’il y a un problème de configuration.
Branchements
Caméra
Il n’y a rien de particulier à faire, pas besoin de long discours.
pHat
Seules 3 pins sont utiles pour le pHat (pin 2, pin 12 et pin 6), voir les indications.
Bouton de déclenchement
Pour le moment, j’ai juste deux fils branchés sur les pins 14 et 16.
Avec un Pi Zero
Le Pi Zero a la particularité d’être tout petit, mais aussi de n’avoir aucune connexion réseau. A moins de rajouter une clef wifi. Se pose alors le problème de configurer Raspbian pour se connecter au réseau.
PiBakery
PiBakery répond à ce problème. Ce logiciel permet de configurer, entre autre, la configuration de connexion au wifi. Tout se fait simplement, à la manière du logiciel Scratch.
Une fois la configuration faite, il suffit de lancer l’écriture sur une carte SD.
Pour la suite, rien de particulier. Tout fonctionne comme avec un Raspberry Pi classique.
Autre méthode
Créer un fichier « wpa_supplicant.conf » à la racine de la partition boot.
[cc lang= »bash »]
country=FR
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid= »wifi_ssid »
psk= »wifi_password »
}
[/cc]
Utilisation
La mise en place et l’utilisation de la cabine est très simple. Il suffit de brancher une clef usb (qu’on aura auparavant déclarée, voir le paragraphe expliquant comment faire) et de démarrer le Raspberry Pi en le branchant à l’alimentation.
Lorsque la clef usb est pleine, le pHat affiche un signal lumineux et il n’est plus possible de prendre de photos. Il faut alors débrancher le Raspberry Pi, changer de clef usb et re-brancher le Raspberry Pi.
Améliorations possibles
- Ajouter une imprimante
- Détection de visages (openCV)
- Remplacer la matrice LCD par l’écran officiel (75 € environ)
- Créer un montage type photomaton pour chaque série de photos
- L’api qui permet de commander la caméra permet de gérer l’activation automatique d’un flash lors de la prise de vue. (https://picamera.readthedocs.io/en/release-1.12/recipes2.html#rapid-capture-and-processing)
19 juin 2017 at 17 h 45 min
Bonjour
J’aimerais faire un photomaton à base de raspberry. J’ai trouvé un programme tout fait mais j’aimerai le modifier.
Pourriez-vous m’aider? Je suis novice
20 juin 2017 at 9 h 50 min
Bonjour,
Je n’aurai pas forcément beaucoup de temps, mais je peux essayer 🙂
As tu des notions de programmation ?
20 juin 2017 at 10 h 04 min
Pas beaucoup je débute vraiment.
Je peux te donner le liens du programme.
Il est très court ça doit être une petite modification à faire.
J’aimerai que la caméra soit active pendant le compte à rebours car je n’ai environ qu’une seconde après le compte à rebours pour me voir avant que la photo soit prise.
Merci d’avance
20 juin 2017 at 15 h 52 min
voila le lien du programme
http://ecolefabien.free.fr/pibooth/pibooth.py
20 juin 2017 at 16 h 28 min
Je n’ai pas d’écran, donc je ne peux pas affirmer que ce que je vais dire va fonctionner.
Il y a peut être une autre manière de faire en utilisant les méthodes de pygame, mais je ne connais pas pygame.
Dans la première partie du fichier (les imports), il faut ajouter la ligne suivante :
from picamera import PiCamera
Et juste avant l’appel à « minuterie() » :
camera.start_preview()
La documentation de PiCamera est bien faite. Il y a pleins d’exemples :
https://picamera.readthedocs.io/en/release-1.12/install.html
20 juin 2017 at 16 h 41 min
Je dois sûrement mal m’y prendre
Parce que je programme ne démarre plus quand je met
Caméra.start_preview()
Je ne suis pas sûr de l’avoir mis au bon endroit
20 juin 2017 at 16 h 43 min
Enfin quand je met les imports le logiciel ne démarre plus
20 juin 2017 at 16 h 48 min
Il faut d’abord installer Picamera comme indiqué dans la doc
https://picamera.readthedocs.io/en/release-1.12/install.html