Photomaton à base de Raspberry Pi – Choix 1 ou 4 ou 8 photos et impression directe

Exemple avec 4 photos (en 1280×960) ; l’espacement est de 2 px

Page mise à jour le : 22 juin 2019

Bonjour,

A la suite de questions via les commentaires et par courriel au sujet de mon article Photomaton automatique à base de Raspberry Pi, j’ai travaillé un nouveau code. Le but était surtout de rendre service à Stéphane T, un étudiant qui se reconnaîtra.

(mise à jour le 13/06/2018 pour avoir l’option 8 photos en complément – Tutoriel retesté sur Rpi3B+ et Rpi3B avec succès)

L’idée est simple dans le principe :

  1. Allumer un Raspberry Pi connecté à un écran et une imprimante
  2. Démarrage automatique dès la mise sous tension avec lancement direct du mode Photomaton ou PhotoBooth pour parler “Anglish” (oui, j’ai mis un “A”)
  3. Avoir le choix de :
    • Appuyer sur un bouton Blanc pour prendre une photo puis la sauvegarder et l’imprimer
    • Appuyer sur un bouton Noir pour prendre 4 photos puis les sauvegarder en 1 seule image de 4 “miniatures” et imprimer l’image finale
    • Appuyer sur un bouton Rouge pour prendre 8 photos puis les sauvegarder en 1 seule image de 8 “miniatures” et imprimer l’image finale
    • (oui, les couleurs = c’est au choix et juste parce qu’il me restait des boutons utilisés pour mes bornes d’arcade)
  4. Retourner automatiquement sur l’écran de choix de 1 ou 4 ou 8 photos
  5. Voir en continue ce que renvoie la caméra même si aucune photo n’est demandée et même durant le décompte avant les clichés.
  6. Sécuriser la chose en mettant un lancement automatique avec impossibilité pour quiconque de manipuler le Raspberry Pi avec une souris ou un clavier.

N’ayant jamais appris le python (mais j’arrive un peu (la preuve) à le comprendre), je me suis énormément basé sur le travail de Kenneth Centurion dont le pseudo est zoroloco.
Il a publié son projet boothy sur GitHub ce qui permet d’accéder à tous les détails et de faire une sorte de retro-ingénierie.
Comme son travail est ancien (et en anglais) et ne répondait pas totalement à la demande, j’ai pas mal retravaillé son code pour le modifier/adapter/améliorer (selon moi, ce qui reste très subjectif).

Son code permettait de réaliser 3 photos puis de les combiner en 1 image avec les 3 miniatures + 1 logo. Cette image était ensuite imprimée. C’est clairement un photomaton orienté “mariage” ou “anniversaire” (l’image “logo” étant parfaitement logique dans le cadre de cette utilisation).
Dans mon code, j’ai désactivé le “logo” et prévu 4 photos, mais cela est modifiable aisément.

J’ai donc pas mal retravaillé le code d’origine, pour le passer en Python3 (fin 2019, le Python2 ne sera plus supporté) et pour apporter des améliorations/ajouts.
Mais l’idée de base reste SON idée. Il faut croire que je suis plus “Technicien” que “Créatif” … 😉

Pour vous rassurer :
Évidemment, ce tuto a été suivi à la lettre et appliqué sur un Rpi3B+ sur une clef USB vierge (3 fois depuis sa mise en ligne) = tout fonctionne parfaitement.
Ça m’a pris à peine 10 minutes sans compter l’installation de Raspbian. Avec Raspbian et la recherche du PPD ou du pilote de votre imprimante, je pense que vous pouvez prévoir 1h pour ce tuto complet (voire 1h30 si votre imprimante est “exotique”).
Suite à la mise à jour du 12/06/2019 pour intégrer la possibilité de 8 photos, j’ai retravaillé le script et modifié l’article en conséquence. Le tutoriel a évidemment été restesté “from scratch” avec un Rpi3B+ et un Rpi3B sans le moindre souci (il est vrai que je commence à savoir le faire les yeux fermés avec u bras attaché dans le dos 😉 à force de le faire et refaire).

 

1 – Tutoriel pour le Photomaton

Comme pour l’autre photomaton, les étapes sont assez simples.
Là, je pars du principe que vous démarrer de rien ; pour faire branché, on va dire “Réaliser un photomaton from scratch … mais en mode fainéant 😉 “.

Conseil : pour les lignes de commande, préférez faire des [copier/coller] dans le Terminal

  1. Vous connectez le module caméra (ou RaspiCam) au port CSI avant de démarrer le projet.
  2. Vous installez les boutons type “poussoir” sur les GPIO 18, 24 et 26 (+ 1 sur le GPIO 13)
  3. Vous installez Raspbian en suivant ce (superbe) tuto détaillé en images.
  4. Vous activez la Caméra et le SSH (et VNC si besoin) :
    Menu Framboise –> Préférences –> “Configuration du Raspberry Pi”.
  5. Vous testez la caméra avec : raspistill -o test.jpg
    (Vous devez obtenir une photo “test.jpg” dans le dossier “pi”)
  6. Vous installez les dépendances avec :
    sudo apt-get install cups cups-bsd python3-cups python3-picamera imagemagick python3-dev python3-rpi.gpio -y
  7. Vous installez votre imprimante en suivant mon autre tutoriel d’installation d’une imprimante sur le Raspberry Pi. (mon fichier PPD est dans le zip pour faciliter mes tests ; il faudra trouver le votre)
  8. Vous récupérez “mon” script en le téléchargeant puis en le dézippant dans le dossier “pi” (le dossier s’appellera “Photomaton_x1x4x8”)
  9. Vous éditez le script avec Geany pour modifier les 2 lignes (dans “play” + “play2” + “play3”) pour mettre le nom de votre imprimante et passer en 100% (je suis en 25% pour économie lors de mes tests répétés ; mes finances ne sont pas suffisantes + principe d’écologie)
    os.system(‘lpr -h -PSamsung_Samsung_CLX-3300_Series -#1 -o media=A4 -o scaling=25 “/home/pi/Photomaton_x1x4x8/photos/’+fileName+'”‘) doit devenir
    os.system(‘lpr -h -PVotre_imprimante -#1 -o media=A4 -o scaling=100 “/home/pi/Photomaton_x1x4x8/photos/’+fileName+'”‘)
  10. Vous mettez en place le script pour éteindre le Raspberry avec 1 simple bouton.
    Vous éditez le fichier rc.local avec sudo nano /etc/rc.local
    Vous y insérez sudo python3 /home/pi/Photomaton_x1x4x8/extinction.py& juste avant la ligne # Print the IP address
    Vous validez avec “Ctrl”+”x” puis “o” puis “Entrée”.

Bon, normalement, tout est OK.

On essaye ?
Facile :
Ouvrez un Terminal et tapez la ligne python3 /home/pi/Photomaton_x1x4x8/Photomaton_x1x4x8.py puis validez avec “Entrée”.
Là, le photomaton se lance et vous pouvez tester.
–> Si on appuie sur le bouton Blanc “1 photo”, ça fonctionne ? Oui ? Normal !
–> Si on appuie sur le bouton Noir “4 photos”, ça fonctionne ? Oui ? Normal !
–> Si on appuie sur le bouton Rouge “8 photos”, ça fonctionne ? Oui ? Normal !
–> Si on appuie sur le bouton “Éteindre”, ça fonctionne ? Non ? Normal ! C’était une blague ; faut redémarrer pour vérifier 🙂

Allez, on redémarre le Raspberry Pi

C’est bon ; c’est tout bien redémarré ?
Si vous voulez, vous pouvez essayer de relancer le script à la main pour vérifier.*
–> Si on appuie sur le bouton Blanc “1 photo”, ça fonctionne ? Yes !
–> Si on appuie sur le bouton Noir “4 photos”, ça fonctionne ? Yes !!
–> Si on appuie sur le bouton Rouge “8 photos”, ça fonctionne ? Yes !!
–> Si on appuie sur le bouton “Éteindre”, ça fonctionne ? Yes !!!

Cool ! … Enfin, “normal” faudrait-il dire –> C’est juste tout à fait normal avec un prof aussi bon, sympa, beau, didactique, intelligent, (vous pouvez y aller de vos propres compliments à ma personne) … 😉

* : Astuce = vous pouvez redimensionner la fenêtre noire avec la bordure bleu pour cliquer dans le terminal et faire “ctrl”+”c” pour tuer le script en cours et retrouver votre bureau afin de poursuivre.

Du coup, maintenant que vous êtes rassuré(e) +++, vous allez automatiser le photomaton en lançant le script dès le démarrage du Raspberry Pi.
Pour cela, vous modifiez l’autostart avec : sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
Et vous ajoutez python3 /home/pi/Photomaton_x1x4x8/Photomaton_x1x4x8.py à la dernière ligne (validez avec “Ctrl”+”c” puis “o” puis “Entrée”).

Comme tout s’est bien passé auparavant, cela signifie que tout fonctionne … donc … On y va pour de vrai !!!
C’est parti ! –> Lancez un redémarrage du Raspberry Pi et patientez.

Si tout se passe bien, le Photomaton se lancera automatiquement.

Bon, et bien, si tout est OK, maintenant, on va pouvoir « verrouiller » le système en rééditant mon script pour transformer le Rpi en photomaton « automatique et sécurisé » en modifiant très légèrement le script (redimensionner fortement la fenêtre noire avec la bordure bleu pour pouvoir accéder à votre bureau).
Ouvrez le script Photomaton_x1x4x8.py (/home/pi/Photomaton_x1x4x8/Photomaton_x1x4x8.py) avec Geany et changez :
pygame.init()
#screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
screen = pygame.display.set_mode((1920,1080),RESIZABLE)
width, height = screen.get_size()

en
pygame.init()
screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
#screen = pygame.display.set_mode((1920,1080),RESIZABLE)
width, height = screen.get_size()

En effet, cela permet que l’écran passe en noir complet (la fenêtre sera en “FullScreen”) avec rien de visible (juste l’image de la caméra et les messages sur-imprimés) + aucune action possible

Pour toutes les modifications ultérieures, vous passerez donc par SSH (d’où l’activation conseillée au début de l’article).

Comme tous mes tuto, je précise que celui-ci a été travaillé et essayé plusieurs fois avant rédaction.

Évidemment, ce tuto a été suivi à la lettre et appliqué sur un Rpi3B+ sur une clef USB vierge = tout fonctionne parfaitement.

A bientôt, (je pense déjà ajouter un autre bouton pour proposer une série de 8 images, mais chut, c’est un secret –> C’est fait au 12/06/2019 😉 )

(Pour toute correction/ajout/omission/amélioration = passez par les commentaires et/ou le formulaire de contact)

Petit rappel : il est possible de me soutenir pour le temps passé et les frais engagés en participant à une cagnotte de soutien

Exemple avec 4 photos (en 1280×960) ; l’espacement est de 2 px
Exemple avec 3 photos (en 960×960) + 1 logo ; l’espacement est de 20 px
Exemple avec 7 photos (en 960×960) + 1 logo ; l’espacement est de 2 px
Exemple avec 8 photos (en 1280×960) ; l’espacement est de 2 px

 

A propos de Alban

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

11 commentaires à propos de “Photomaton à base de Raspberry Pi – Choix 1 ou 4 ou 8 photos et impression directe”

  1. Un grand merci Alban 🙂 J’avais déjà utilisé le code pybooth pour un projet de digiscopie et je suis hyper content d’être tombé sur ce nouveau code hyper bien documenté. Du coup, ça m’a remotivé pour refaire un photomaton ! En revanche, je n’ai pas réussi à sortir du script sans redémarrer le pi, tu aurais une idée ? Ps : je tente en parallèle d’installer un serveur web sur le pi qui permettra de présenter les photos sur un site web accessible par wifi sur un réseau local. Je mettrai évidemment ce travail à la disposition de la communauté 🙂 Encore bravo pour ce tuto et merci d’avance pour ta réponse. @bientôt – David (39 ans et papa un poil geek)

    • Bonsoir David,
      Merci 🙂
      Perso, je triche pour quitter le script.
      Un vrai fainéant est un bosseur et un chasseur de l’inutile (oui, poète parfois).
      Tu redimensionnes la fenêtre pygame (si tu ne l’as pas encore rendu totale) puis tu lances l’émulateur de terminal et tu tapes pkill lxterminal et “Entrée”.
      Sinon, en connexion VNC, tu peux reprendre le terminal en cours (si tu as lancé le script à la main) et taper “ctrl”+”c” pour quitter le script.
      Évidemment, ces 2 solutions ne fonctionnent plus si tu as lancé pygame en plein écran et que tu as automatisé le photomaton.
      Là, un sudo reboot (vive le ssh) est indispensable (en l’état actuel de mes compétences, mais on pourrait (je pense) ajouter (encore) un bouton pour quitter le script).
      Au plaisir,

  2. Bonjour,

    En regardant le script j’ai vu une LED branchée sur le port 19. Pouvez-vous m’expliquer le branchement de celle-ci?

    Merci pour votre travail.

    • Bonjour Ugo,
      J’ai laissé la LED dans le script bien que je ne l’utilise pas … puisque le but de ce photomaton était de voir si je savais faire (et aussi d’aider un étudiant étranger situé à 4900 km de chez moi 🙂 )
      La LED était prévue par le concepteur d’origine.
      Je n’ai pas retravaillé cette partie, mais il me semble (en lisant de biais) que le but est que celle-ci fasse un effet flash au moment de la prise de photos.
      Et merci pour le merci 😉

      • Bonjour Alban,

        J’ai bien suivi toutes les étapes mais quand je lance le script j’ai une erreur sur pygame qui ne peut pas ouvrir un terminal. Sauriez-vous ce j’ai omis de faire.

        Je vais regarder si j’arrive à faire fonctionner la led comme un flash. Ça peut être pratique la nuit.

        Ugo

        • Bonjour Ugo,
          Il convient d’avoir un Raspbian Stretch avec interface graphique et pas une version Lite.
          L’erreur ne viendrait pas de là ?
          Je peux avoir la copie écran ou le [copier/coller] de l’erreur par courriel ?
          Merci,

          Edit : je viens d’y penser. Il ne faut pas passer par SSH pour lancer le script.
          C’est cette erreur ?
          pi@raspberrypi:~ $ python3 /home/pi/Photomaton_x1x4x8/Photomaton_x1x4x8.py
          Traceback (most recent call last):
          File "/home/pi/Photomaton_x1x4x8/Photomaton_x1x4x8.py", line 62, in
          screen = pygame.display.set_mode((1920,1080),RESIZABLE)
          pygame.error: Unable to open a console terminal

          Ça ne veut pas dire que pygame ne peut lancer de console, mais (je crois) ne peut pas se lancer dans une console.
          Je viens de l’avoir en lançant la commande en SSH depuis un PC Linux
          Pour lancer manuellement le script depuis un autre ordinateur, il faut passer via VNC et pas par SSH.

  3. J’ai réalisé le 1-4 cela fonctionne très bien, j’ai une imprimante canon cp1300 installer en USB.
    J’aurais juste voulu faire un bouton sortie qui ferme le programme sans éteindre le raspberry, afin de visualiser les photos rapidement après. Bon travail Mr le technicien.

    • Merci pour ce retour Guillaume.
      Il semble que cette imprimante rencontre un vif succès pour les photomatons
      Pour le bouton “sortie”, je vais y réfléchir 😉
      A bientôt,

    • Bonjour Stéphane,
      L’étape 8 est le téléchargement de mon archive contenant tout le nécessaire (un dossier avec script et sous-dossiers).
      Il te suffit de cliquer sur le lien “récupérez mon script” pour que ton navigateur lance le téléchargement.
      Ensuite, il faut dézipper cette archive à l’endroit voulu (je le dézippe dans /home/pi car je préfère).
      L’étape 9 est la modification du script python (avec Geany ou le programme de codage que tu souhaites utiliser) afin de changer le nom de l’imprimante (ce nom est donné par CUPS lors de l’installation ou par la commande lpstat -p).
      Pour que mes tests ne me coûtent pas trop cher, j’avais aussi passé l’impression en 25% (avec scaling=25)donc, après avoir testé que ton imprimante fonctionne, tu devras changer cette valeur en scaling=100 pour avoir une impression normale.
      @+

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

Laisser un commentaire

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

*