From 94e3d68dd71fcc5ebc995b59f6e81c15b1979f5f Mon Sep 17 00:00:00 2001 From: Jules Date: Thu, 9 Apr 2026 01:36:20 +0200 Subject: [PATCH] Preview DSLR : resize 960px + base64 hors asyncio pour fluidifier liveview --- backend/camera.py | 15 +++++++++++++-- backend/main.py | 3 ++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/backend/camera.py b/backend/camera.py index 5d41823..b3a1f79 100644 --- a/backend/camera.py +++ b/backend/camera.py @@ -200,8 +200,19 @@ class Camera: def _preview_gphoto2(self) -> bytes | None: try: fichier = self.camera.capture_preview() - donnees = fichier.get_data_and_size() - return bytes(donnees) + donnees = bytes(fichier.get_data_and_size()) + # Redimensionner pour alléger le WebSocket + img = cv2.imdecode( + __import__("numpy").frombuffer(donnees, dtype=__import__("numpy").uint8), + cv2.IMREAD_COLOR, + ) + if img is not None: + h, w = img.shape[:2] + if w > 960: + img = cv2.resize(img, (960, int(h * 960 / w)), interpolation=cv2.INTER_LINEAR) + _, buf = cv2.imencode(".jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 75]) + return buf.tobytes() + return donnees except gp.GPhoto2Error as e: log.error(f"Erreur preview DSLR : {e}") return None diff --git a/backend/main.py b/backend/main.py index 72178db..e7adb39 100644 --- a/backend/main.py +++ b/backend/main.py @@ -80,7 +80,8 @@ async def _pusher_preview(): await diffuser_ws({"type": "camera_erreur", "message": "DSLR ne repond pas au preview"}) _preview_actif = False continue - b64 = base64.b64encode(donnees).decode("ascii") + loop = asyncio.get_event_loop() + b64 = await loop.run_in_executor(None, lambda d=donnees: base64.b64encode(d).decode("ascii")) await diffuser_ws({"type": "preview", "image": f"data:image/jpeg;base64,{b64}"}) async def surveiller_dslr():