Application Flask pour photobooth tactile avec flux vidéo temps réel, capture instantanée, effets IA et intégration Telegram
Cette application transforme votre Raspberry Pi en un photobooth professionnel avec :
- Flux vidéo temps réel en MJPEG 1280x720 (16:9)
- Support multi-caméras : Pi Camera ou caméra USB
- Interface tactile optimisée pour écran 7 pouces
- Capture photo instantanée directement depuis le flux vidéo
- Effets IA via l'API Runware pour transformer vos photos
- Diaporama automatique configurable après période d'inactivité
- Bot Telegram pour envoi automatique des photos sur un groupe/canal
- Impression thermique avec texte personnalisable
- Interface d'administration complète
- Caméra :
- Raspberry Pi Camera (v1, v2, v3, HQ)
- Caméra USB standard (webcam)
- Écran tactile : Écran 7 pouces recommandé
- Imprimante thermique Serie : Compatible avec le script
ScriptPythonPOS.py
Voici une liste de matériel compatible. Les liens sont affiliés et aident à soutenir le projet.
- Raspberry Pi & Accessoires :
- Caméras :
- Imprimantes Thermiques :
- Écran :
L'installation peut se faire de deux manières : automatiquement via un script (recommandé sur Raspberry Pi) ou manuellement.
Un script setup.sh
est fourni pour automatiser l'ensemble du processus sur un système basé sur Debian (comme Raspberry Pi OS).
-
Rendre le script exécutable :
chmod +x setup.sh
-
Lancer le script d'installation :
./setup.sh
Ce script s'occupe de :
- Mettre à jour les paquets système.
- Installer les dépendances système (
libcamera-apps
,python3-opencv
). - Créer un environnement virtuel
venv
. - Installer les dépendances Python de
requirements.txt
dans cet environnement. - Creer un mode kiosk automatique au demarrage du systeme.
Suivez ces étapes pour une installation manuelle.
-
Créer et activer un environnement virtuel : Il est fortement recommandé d'utiliser un environnement virtuel pour isoler les dépendances du projet.
# Créer l'environnement python3 -m venv venv # Activer l'environnement source venv/bin/activate
Pour quitter l'environnement virtuel, tapez simplement
deactivate
. -
Sur Raspberry Pi, installer les dépendances système : Si vous ne l'avez pas déjà fait, installez les paquets nécessaires pour les caméras.
sudo apt update sudo apt upgrade sudo apt install libcamera-apps python3-opencv
-
Installer les dépendances Python :
pip install -r requirements.txt
- Lancer l'application :
python3 app.py
-
Accéder à l'interface :
- Ouvrir un navigateur sur
http://localhost:5000
- Ou depuis un autre appareil :
http://[IP_RASPBERRY]:5000
- Ouvrir un navigateur sur
-
Administration :
- Accéder à
/admin
pour configurer l'application
- Accéder à
L'application supporte deux types de caméras, configurables depuis la page d'administration :
- Utilise le module
libcamera-vid
pour capturer le flux vidéo - Idéal pour les Raspberry Pi avec caméra officielle
- Aucune configuration supplémentaire requise
- Utilise OpenCV (
cv2
) pour capturer le flux vidéo - Compatible avec la plupart des webcams USB standard
- Configuration dans l'admin :
- Sélectionner "Caméra USB" dans les options de caméra
- Spécifier l'ID de la caméra (généralement
0
pour la première caméra) - Si vous avez plusieurs caméras USB, essayez les IDs
1
,2
, etc.
Note : Si vous rencontrez des problèmes avec la caméra USB, vérifiez que :
- La caméra est bien connectée et alimentée
- Les permissions sont correctes (
sudo usermod -a -G video $USER
)- La caméra est compatible avec OpenCV
Le projet est organisé de manière modulaire pour une meilleure maintenance :
SimpleBooth/
├── app.py # Application Flask principale (routes, logique)
├── camera_utils.py # Utilitaires pour la gestion des caméras (Pi Camera, USB)
├── config_utils.py # Utilitaires pour charger/sauvegarder la configuration
├── telegram_utils.py # Utilitaires pour l'envoi de messages via le bot Telegram
├── ScriptPythonPOS.py # Script autonome pour l'impression thermique
├── setup.sh # Script d'installation automatisée pour Raspberry Pi
├── requirements.txt # Dépendances Python
├── static/ # Fichiers statiques
│ └── camera-placeholder.svg
├── templates/ # Templates HTML (Jinja2)
│ ├── index.html # Interface principale du photobooth
│ ├── review.html # Page de prévisualisation et d'action post-capture
│ ├── admin.html # Panneau d'administration
│ └── base.html # Template de base commun
├── photos/ # Dossier pour les photos originales (créé au lancement)
├── effet/ # Dossier pour les photos avec effets (créé au lancement)
└── config.json # Fichier de configuration (créé au lancement)
La configuration est sauvegardée dans config.json
:
footer_text
: Texte en pied de phototimer_seconds
: Délai avant capture (1-10 secondes)high_density
: Qualité d'impression haute densité
slideshow_enabled
: Activer/désactiver le diaporama automatiqueslideshow_delay
: Délai d'inactivité avant affichage du diaporama (10-300 secondes)slideshow_source
: Source des photos pour le diaporama ('photos' ou 'effet')
effect_enabled
: Activer/désactiver les effets IAeffect_prompt
: Description textuelle de l'effet IA souhaitéeffect_steps
: Nombre d'étapes de génération IA (1-50, plus = meilleure qualité mais plus lent)runware_api_key
: Clé API Runware pour l'accès au service IA
telegram_enabled
: Activer/désactiver le bot Telegramtelegram_bot_token
: Token du bot obtenu via @BotFathertelegram_chat_id
: ID du chat/groupe/canal de destinationtelegram_send_type
: Type de photos à envoyer ('photos', 'effet' ou 'both')
-
Créer un bot :
- Contactez @BotFather sur Telegram
- Envoyez
/newbot
et suivez les instructions - Notez le token fourni (format:
123456789:ABCdefGHIjklMNOpqrsTUVwxyz
)
-
Obtenir l'ID du chat :
Pour un chat privé :
- Envoyez un message à @userinfobot pour obtenir votre ID
Pour un groupe :
- Ajoutez le bot au groupe d'abord!
- ID format:
-123456789
(notez le signe négatif) - Utilisez @GroupIDbot pour trouver l'ID
Pour un canal :
- Ajoutez le bot comme administrateur du canal
- Format canal public:
@nom_du_canal
- Format canal privé:
-100123456789
-
Configurer dans l'admin :
- Activez l'option Telegram
- Entrez le token du bot et l'ID du chat
- Choisissez le type de photos à envoyer (originales, effet, ou les deux)
- Caméra non détectée : Vérifier que la caméra est activée dans
raspi-config
- Erreur d'impression : Vérifier la connexion de l'imprimante thermique et TX/RX
- Effets IA ne fonctionnent pas : Vérifier la validité de la clé API Runware
- "Chat not found" dans Telegram :
- Vérifier que le bot est bien membre du groupe/canal
- Format correct de l'ID (numérique pour privé, commence par
-
pour groupe) - Le bot doit être admin pour les canaux
- Dossier effet manquant : L'application le crée automatiquement au démarrage