From c2b6b01f4feab00e86d3b72fc49a4ab92b1b820c Mon Sep 17 00:00:00 2001 From: Jules Date: Tue, 7 Apr 2026 20:05:24 +0200 Subject: [PATCH] Auto-detection DSLR: bascule automatique quand branche/rebranche - Verification toutes les 5s si un DSLR est disponible - Bascule auto de webcam/simulation vers DSLR - Reconnexion auto si le DSLR est deconnecte Co-Authored-By: Claude Opus 4.6 (1M context) --- backend/main.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/backend/main.py b/backend/main.py index 5e053cf..91053de 100644 --- a/backend/main.py +++ b/backend/main.py @@ -13,7 +13,11 @@ from backend.config import ( RACINE, DOSSIER_PHOTOS, DOSSIER_EXPORTS, DOSSIER_OVERLAYS, DOSSIER_FONDS, DOSSIER_ANIMATIONS, charger_config, sauvegarder_config, mettre_a_jour_config, ) -from backend.camera import camera +from backend.camera import camera, GPHOTO2_DISPONIBLE +try: + import gphoto2 as gp +except ImportError: + gp = None from backend.gallery import lister_photos, compter_photos, supprimer_photo, vider_galerie from backend.effects import appliquer_filtre, appliquer_overlay, chroma_key, lister_overlays, lister_fonds, FILTRES from backend.collage import creer_strip, creer_collage, creer_impression_strip @@ -29,12 +33,35 @@ log = logging.getLogger("photobooth") clients_ws: list[WebSocket] = [] +async def surveiller_dslr(): + """Verifie periodiquement si un DSLR est branche et bascule dessus.""" + while True: + await asyncio.sleep(5) + try: + if camera.mode != "gphoto2" and GPHOTO2_DISPONIBLE: + dslrs = gp.Camera.autodetect() + if len(dslrs) > 0: + log.info(f"DSLR detecte : {dslrs[0][0]}, bascule automatique") + camera.connecter(source="gphoto2") + elif camera.mode == "gphoto2": + # Verifier que le DSLR repond encore + try: + camera.camera.get_summary() + except Exception: + log.warning("DSLR deconnecte, reconnexion...") + camera.connecter() + except Exception: + pass + + @asynccontextmanager async def lifespan(app: FastAPI): """Demarrage et arret de l'application.""" log.info("Demarrage du photobooth") camera.connecter() + task = asyncio.create_task(surveiller_dslr()) yield + task.cancel() log.info("Arret du photobooth") camera.deconnecter()