Preview DSLR : resize 960px + base64 hors asyncio pour fluidifier liveview

This commit is contained in:
2026-04-09 01:36:20 +02:00
parent 8e7fb61e90
commit 94e3d68dd7
2 changed files with 15 additions and 3 deletions

View File

@@ -200,8 +200,19 @@ class Camera:
def _preview_gphoto2(self) -> bytes | None: def _preview_gphoto2(self) -> bytes | None:
try: try:
fichier = self.camera.capture_preview() fichier = self.camera.capture_preview()
donnees = fichier.get_data_and_size() donnees = bytes(fichier.get_data_and_size())
return bytes(donnees) # 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: except gp.GPhoto2Error as e:
log.error(f"Erreur preview DSLR : {e}") log.error(f"Erreur preview DSLR : {e}")
return None return None

View File

@@ -80,7 +80,8 @@ async def _pusher_preview():
await diffuser_ws({"type": "camera_erreur", "message": "DSLR ne repond pas au preview"}) await diffuser_ws({"type": "camera_erreur", "message": "DSLR ne repond pas au preview"})
_preview_actif = False _preview_actif = False
continue 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}"}) await diffuser_ws({"type": "preview", "image": f"data:image/jpeg;base64,{b64}"})
async def surveiller_dslr(): async def surveiller_dslr():