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) <noreply@anthropic.com>
This commit is contained in:
2026-04-07 20:05:24 +02:00
parent 0f83c7a6b7
commit c2b6b01f4f

View File

@@ -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()