Photomaton

De Kernel Fablab Lannion
Un photomaton (Photo-Booth) pour animer des événements


Ce type d’équipement permet de s’amuser lors d’événements comme des mariages, fêtes diverses… Il permet de réaliser des photos où les personnes « se lâchent » ou pas d’ailleurs !

J’ai réalisé ce type d’équipement pour le mariage de ma seconde fille. Lors du mariage de la première, elle avait loué ce type d’équipement, cela est revenu à 300€ pour le week-end ! Je me suis dit que je devais pouvoir faire sinon mieux, au moins différent et pour un budget beaucoup plus modique, tout en restant disponible pour d’autres occasions.

Les photos sont loin d’avoir la qualité d’un appareil numérique récent, mais cela reste tout à fait viable pour ce type d’usage.

J’ai choisi délibérément un style rétro, mais ne vous y fiez pas, cet appareil permet d’imprimer 3 photos regroupées en direct, et permet également d’envoyer en direct les photos prises sur Google Drive pour les partager ensuite facilement. Ceci nécessite bien sûr une connectivité réseau, Wifi ou Ethernet.

Le logiciel permet relativement facilement de configurer le nombre de photos à imprimer (cela peut être 0), le compte Google Drive à utiliser, l’image de fond choisie...


FaceAvant.JPG


Matériel

  1. Du bois… J’ai utilisé du contreplaqué peuplier (très clair) pour le boîtier, du tasseau en pin pour les pieds, un peu de MDF pour le support d’objectif.
  2. Un Raspberry PI3 et sa caméra v2.
  3. Un petit niveau (acheté sur un site de camping car), non obligatoire, mais permet de mettre l’appareil à peu près à l’horizontale.
  4. Du papier noir épais pour le soufflet (acheté à Bureau Vallée).
  5. Un écran 9 pouces avec entrée HDMI, acheté chez Ali Express. La résolution est de 800 par 480 pixels. L’écran n’est pas de très bonne qualité, mais le prix (27€) est au rendez-vous.  :
  6. Un câble HDMI réalisé en circuit imprimé souple pour relier l’écran et permettre de mettre l’écran dans le couvercle du boîtier. https://www.amazon.fr/dp/B01EWSKVDQ/ref=pe_3044141_185740131_TE_item
  7. Une alimentation 5V USB, pour l’écran et le Raspberry. J’ai choisi de prendre deux alimentations différentes pour ne pas avoir de problème de consommation.
  8. Un petit amplificateur BF avec un haut parleur pour la partie son. https://www.gotronic.fr/art-kit-2165b-653.htm.
  9. Des boutons, issus d’un site de boutons de gamers… http://www.joystick-arcade.com/fr/
  10. Quelques vis de tailles diverses...

Boîtier

J’ai utilisé les boîtes générées par le site de Florian Festi pour cette occasion. Voir www.festi.info/boxes.py

Parmi toutes les formes de boîtes disponibles, j’ai utilisé une avec des charnières en bois intégrées qui permettent de replier l’écran une fois rangé. L’écran est ainsi au dessus de l’appareil, et permet une prise de vue correcte, avec un effet « faux jeton » à mon avis moins marqué que s’il était déporté sur le côté. Pour les meilleures prises de vue possibles, il faut néanmoins regarder l’objectif et pas l’écran !

La décoration est très ‘kitch’, j’en conviens mais si vous voulez en changer ne vous gênez pas !

Aujourd’hui, j’utiliserai plutôt le plugin inkscape que j’ai réalisé (on n’est jamais mieux servi que par soi-même pour se faire un peu de pub…), voir https://wiki.fablab-lannion.org/index.php?title=Generateur_de_boites. Je recommande ce plugin, car le dessin généré par le site de Florian Festi présente quelques défauts (mineurs) et surtout le fichier SVG généré incorpore de nombreux arrondis qui passent très mal avec RDWorks et notre découpeuse Laser. Les arrondis sont transformés encercles complets, et génèrent beaucoup de mouvements parasites pouvant conduire à des décalages.

Support écran

Le support d’écran est coincé dans le couvercle du boîtier. Il est constitué de 3 plaques permettant de fixer l’écran. La première plaque (gravée) est réalisée en CP5mm est la plaque externe. LA seconde plaque (MDF 3mm) permet de caler l’écran, la troisième plaque (visée sur la seconde empêche l’écran de bouger). Prendre du bois de 3mm d’épaisseur, c’est celle de l’écran. La carte contrôleur d’écran est vissée sur la 3ème plaque. Cet assemblage est ensuite inséré dans le couvercle, la profondeur est dans mon cas réglée par des tasseaux collés dans le couvercle. J’ai collé l’ensemble, ce n’est pas démontable, mais cela ne me paraissait pas nécessaire.

Voir fichier BoiteEcran.XXX dans le répertoire Decoupe.

Objectif photo

J’utilise la caméra du raspberry (v2) directement, mais il faut l’habiller.

Le soufflet

Tout bon appareil rétro qui se respecte doit avoir son soufflet ! Ici bien sûr il ne sert à rien. J’ai réalisé le mien en papier épais, genre papier canson en plus épais (noir). Je me suis basé sur cet article : http://www.galerie-photo.com/construire-soufflet-chambre-photo.html

Lisez l’article, il vous explique la méthode (non triviale) utilisée pour plier le soufflet.

J’ai découpé le papier au laser, j’ai également utilisé la découpeuse laser en mode ‘gravure’ pour marquer les lignes de pliage du soufflet.


Voir fichiers Decoupe/Soufflet2.XXX


Soufflet.png


Ce soufflet vient habiller (cacher) le support d’objectif.


Support d’objectif

C’est une petite ‘boite’ en MDF 3mm qui vient déporter vers l’avant l’objectif et qui est cachée par le soufflet.

Cette boite est encastrée sur une plaque en contreplaqué 5mm (dans mon cas). Voir les fichiers Decoupe/SupportObjectif.XXX

Le dessin utilise plusieurs couleurs car deux matériaux sont utilisés (MDF et CP), d’où la nécessité de faire la découpe en 2 fois.


Couvre Objectif camera Pi

Ce support réalisé en PLA (impression 3D) permet de faire tenir la caméra du Raspberry qui peut être vissé dessus. Voir fichiers dans le répertoire 3D.J’ai utilisé OpenSCAD et le plugin Inkscape path2OpenSCAD pour réaliser la pièce. La version courante d’OpenSCAD (2019) devrait permettre de le réaliser directement (possibilité d’importer des SVG).

Obj1.pngObj1.png


Les 4 petits trous permettent de fixer la caméra du Raspberry les 4 plus gros de fixer cette face avant au support d’objectif précédent.

Ce couvre objectif doit être fixé après le soufflet, il vient masquer les rebords du soufflet.


Le pied

Le pied (trépied) est réalisé en bois, à partir de tasseaux en pin, et de pièces en CP5 découpées laser pour permettre de régler la hauteur du pied.

[[Image:]]La ficelle évite au pied de trop s’écarter, pas très technologique, mais efficace ! Elle est coincée par les arrêts du bas du pied. Prendre des morceaux de même taille, a priori le triangle devrait être équilatéral.

La tête de pied est réalisée en bois, j’avais fait une première version imprimable en 3D, mais réalisée en ABS, elle s’est cassée immédiatement, les couches se sont décollées. Peut-être en nylon ? J’ai donc pris ma scie et mes deux mains gauches, le résultat n’est pas très joli, mais c’est caché sous le boîtier en fonctionnement. J’ai utilisé un morceau de tasseau en sapin épais de 30 mm je crois.

[[Image:]]

Le pied est réglable en hauteur, j’ai utilisé des petites cales découpées laser pour cela.

[[Image:]][[Image:]]

Boite des boutons

Les boutons sont logés dans une boîte séparée, qui peut être approchée des personnes posant devant l’appareil. Le fil doit être assez long à cet effet.

J’ai encore une fois utilisé une boîte provenant du site de Florian Festi, réalisée en MDF avec des coins arrondis. Mon nouveau Plugin, permet également de réaliser ce type de boîte.

Rien de spécial ici, le volume est assez conséquent, mais on peut appuyer sans crainte avec le pied sur le bouton principal.

[[Image:]]

Partie câblage

Il faut évidemment relier le Raspberry à la fois à la boîte des boutons et au divers éléments du boîtier.

Le schéma utilisé est le suivant

[[Image:]]Le transistor Q1 est logé dans la boîte des boutons, pas vraiment sûr qu’il soit obligatoire, mais il ne gêne pas non plus ! Les boutons S1, S2, S3 sont dans la boîte des boutons, le bouton S4 permet d’arrêter le logiciel ou le Raspberry proprement. S1 est le gros bouton vert, S2 le rouge et S3 le blanc.

[[Image:]][[Image:]]Pour relier la boîte des boutons, j’ai utilisé du fil de câblage téléphonique (4 paires), mais tout autre type de câble avec au moins 6 fils convient.

Logiciel

Le logiciel est écrit en python, le source est libre.

Les logiciels sont installés en tant que services au niveau du pi, ils sont lancés au démarrage du système.

Module Bouton

Le premier module très simple, sert à arrêter relancer le service photo lui-même. Si le bouton est appuyé pendant plus de 3s, le Raspberry s’éteint. Cette manipulation est obligatoire sous peine de gros problèmes au niveau de la carte SD qui supporte mal des arrêts brutaux, sans passer par un ‘shutdown’ propre.

Module Photo

C’est le module principal. J’ai choisi de travailler en demi résolution au niveau de la caméra PI, cela suffit largement, de toute manière l’optique est très loin de la qualité voulue pour la pleine résolution (pas d’auto focus…). Et même avec un Raspberry PI3, les traitements d’image sont conséquents.

Les divers fichiers png : Accueil.png, SecondePhoto.png, DernierePhoto.png, ApresPhoto2.png sont utilisés en sur impression au dessus de l’image ‘live’ de la caméra pour donner des instructions. Ils doivent être de la résolution de l’écran (800x480) mais peuvent être modifiés sans problème.

Le fichier Fond.png est utilisé pour compenser la différence de taille entre la caméra (format 4/3) et l’écran (format 16/10 800x480). La photo elle même est affichée en 640x480 pour respecter le format. Un écran 4/3 serait plus adapté, mais je n’en ai pas trouvé dans ces dimensions…

A chaque photo, un message sonore (du style Souriez, Cheese) est joué de manière aléatoire parmi 7 messages différents. Cela peut être évidemment modifié, aussi bien au niveau des messages que du nombre. Attention toutefois à coder les messages en .WAV, le décodage MP3 prend un peu trop de temps CPU, et provoque des craquements pendant la lecture. La bibliothèque son utilisée est assez simple et supporte mal la charge CPU (affichage des images en parallèle).

L’appareil prend 3 photos successivement, puis regroupe ces 3 photos en une quatrième. Le fond de la quatrième photo est paramétrable suivant l’événement considéré. La quatrième photo est imprimée en N exemplaires et est disponible rapidement. J’ai choisi de faire 2 exemplaires pour le mariage de ma fille, une photo pour les personnes, la seconde destinée au livre d’or du mariage.

Impression

Le logiciel est capable d’imprimer les photos réalisées, il faut pour cela avoir une imprimante (photo) connectée au Raspberry. La connexion peut être soit USB, soit Wifi.

Il vous faut tout d’abord choisir une imprimante qui possède un driver Linux, et où le source est disponible. Vous devrez en effet compiler le driver sur le Raspberry, les versions pour ARM n’étant généralement pas disponibles directement.

Une fois le driver disponible, vous pouvez installer l’imprimante via CUPS et faire des premiers test d’impression. Pensez à fixer le type de papier par défaut et sa taille via CUPS.

Il doit être également possible d’ajouter des drivers via Gutenprint (plus de choix de type d’imprimante) mais je ne l’ai pas testé, mon imprimante avait un driver disponible et n’était pas disponible via Gutenprint ! Mais je sais qu’il est possible de connecter des imprimantes photo Canon Selphy via Gutenprint.

Création des autorisations via Google drive API

Ceci est à faire, à chaque fois que vous souhaitez changer de répertoire Google Drive. Cela peut être réalisé, soit sur le PI soit sur votre PC, il faut alors télécharger les fichiers sur le PI...


  1. Se connecter sur son compte Google via le navigateur
  2. Aller sur https://developers.google.com/drive/api/v3/quickstart/python
  3. Cliquer sur Enable Drive API, cela génère un fichier credentials.json qui va être ensuite utilisé pour accéder au service.
  4. Si vous faites cela depuis votre PC, téléchargez le fichier ainsi obtenu dans le répertoire principal. Ce fichier doit être stocké dans le photo booth et référencé dans le fichier photoBooth.cfg par l’entrée SecretFile. Personnellement j’ai utilisé mon PC pour réaliser ces opérations, l’écran du PI (800x480) est vraiment tout petit...
  5. Dans la même page, le logiciel python QuickStart.py permet de générer la clef. Vous pouvez donc le faire « OffLine » et transférer ce fichier ensuite sur le PI (dans le répertoire ~/.credentials). Mais cette génération est également intégrée au logiciel PhotoBooth. Il faut néanmoins que le navigateur soit ouvert pour créer ce fichier (le navigateur ne se lance pas directement). Bien sûr ceci n’est nécessaire que la première fois, ensuite si le fichier est présent il sera utilisé. Identifiez vous avec votre compte Google et le fichier d’accès est créé, avec PhotoBooth il est directement stocké dans le répertoire ~/.credentials où il sera utilisé. Référencez le fichier créé dans le fichier photoBooth.cfg par l’entrée CredentialFile. Si vous créez ce fichier sur le Raspberry, il est possible que certaines des toutes premières photos ne soient pas envoyées vers le Google Drive, le temps que la procédure soit terminée.

Fichier de configuration

Les principaux paramètres de fonctionnement sont configurables via le fichier PhotoBooth.cfg

Exemple de fichier de configuration

[Printer]

PrinterName=YOUR_PRINTER

NbCopies=2

[Picture4]

PictureName=/home/pi/photobooth/YourBackGroundPicture.png

[Upload]

GoogleDrive=1

SecretFile=/home/pi/photobooth/YourSecretFile.json

CredentialFile=YourCredentialFile

[Directories]

WorkingDir=/home/pi/photobooth

PhotoDir=/home/pi/YourDirectory

La première section est dédiée à l’imprimante. Le nom est celui de l’imprimante pour votre système quand vous l’avez installée via CUPS. La seconde ligne indique le nombre de copies à imprimer, 0 si vous ne souhaitez pas d’impression.


La section Picture4 donne le chemin de l’image utilisée comme fond d’écran. Cette image doit avoir une résolution de 4096x2730 pixels pour que l’impression soit bien cadrée dans du papier 10x15 (4x6 pouces).

La section Upload fixe les paramètres utilisés pour l’Upload via google drive. Quand le premier est à 0, pas d’upload prévu. Pensez à la fixer à 0, si vous n’avez pas de connectivité réseau sinon, le logiciel va lancer de nombreux threads pour tenter l’upload, qui ne vont jamais aboutir et vont finir par surcharger le processeur.

La dernière section donne le répertoire ou seront stockées les photos.

Amélioration possibles

Il y en a certainement beaucoup, à vous de jouer et bien sûr de republier votre travail (licence GPL).

Crédits

Un grand grand merci à Jérôme pour sa version dont je me suis très largement inspiré.