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:
@@ -13,7 +13,11 @@ from backend.config import (
|
|||||||
RACINE, DOSSIER_PHOTOS, DOSSIER_EXPORTS, DOSSIER_OVERLAYS, DOSSIER_FONDS, DOSSIER_ANIMATIONS,
|
RACINE, DOSSIER_PHOTOS, DOSSIER_EXPORTS, DOSSIER_OVERLAYS, DOSSIER_FONDS, DOSSIER_ANIMATIONS,
|
||||||
charger_config, sauvegarder_config, mettre_a_jour_config,
|
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.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.effects import appliquer_filtre, appliquer_overlay, chroma_key, lister_overlays, lister_fonds, FILTRES
|
||||||
from backend.collage import creer_strip, creer_collage, creer_impression_strip
|
from backend.collage import creer_strip, creer_collage, creer_impression_strip
|
||||||
@@ -29,12 +33,35 @@ log = logging.getLogger("photobooth")
|
|||||||
clients_ws: list[WebSocket] = []
|
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
|
@asynccontextmanager
|
||||||
async def lifespan(app: FastAPI):
|
async def lifespan(app: FastAPI):
|
||||||
"""Demarrage et arret de l'application."""
|
"""Demarrage et arret de l'application."""
|
||||||
log.info("Demarrage du photobooth")
|
log.info("Demarrage du photobooth")
|
||||||
camera.connecter()
|
camera.connecter()
|
||||||
|
task = asyncio.create_task(surveiller_dslr())
|
||||||
yield
|
yield
|
||||||
|
task.cancel()
|
||||||
log.info("Arret du photobooth")
|
log.info("Arret du photobooth")
|
||||||
camera.deconnecter()
|
camera.deconnecter()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user