Accélérer la capture : viewfinder warmup en arrière-plan

- Supprime sleep(0.2) avant capture et viewfinder off inutile
- Déplace activer_viewfinder + chauffer_liveview dans un thread
  daemon après le save, pour retourner la photo immédiatement
- Supprime pause(150ms) frontend entre fin countdown et capture

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-27 15:54:17 +02:00
parent 5614be8c6e
commit d31c2cc811
3 changed files with 6 additions and 12 deletions

View File

@@ -185,14 +185,6 @@ class Camera:
log.error("Camera None pendant capture")
self.preview_dslr_ok = False
return None
try:
cfg = self.camera.get_config()
vf = cfg.get_child_by_name("viewfinder")
vf.set_value(0)
self.camera.set_config(cfg)
time.sleep(0.2)
except Exception:
pass
log.info(f"Déclenchement capture DSLR (tentative {attempt+1}/3)")
chemin_camera = self.camera.capture(gp.GP_CAPTURE_IMAGE)
fichier_camera = gp.CameraFile()
@@ -201,8 +193,7 @@ class Camera:
)
tmp_path = str(chemin_dest) + ".tmp"
fichier_camera.save(tmp_path)
self.activer_viewfinder()
self._chauffer_liveview()
threading.Thread(target=self._post_capture_warmup, daemon=True).start()
from PIL import ImageOps as PILImageOps
img = PILImageOps.exif_transpose(PILImage.open(tmp_path))
if img.width > 4000:
@@ -225,6 +216,10 @@ class Camera:
self.preview_dslr_ok = False
return None
def _post_capture_warmup(self):
self.activer_viewfinder()
self._chauffer_liveview()
def _chauffer_liveview(self, tentatives: int = 8, pause: float = 0.15):
"""Consomme les premieres frames LiveView juste apres la remontee du miroir
(souvent en erreur ~1-2s le temps que l'AF/capteur se stabilise), pendant

View File

@@ -917,7 +917,7 @@
<script src="/js/websocket.js?v=16"></script>
<script src="/js/app.js?v=18"></script>
<script src="/js/camera.js?v=15"></script>
<script src="/js/camera.js?v=16"></script>
<script src="/js/effects.js?v=4"></script>
<script src="/js/gallery.js?v=3"></script>
<script src="/js/share.js?v=8"></script>

View File

@@ -253,7 +253,6 @@ async function lancerCapture() {
lancerPreview(); // Miroir live pendant le compte à rebours
await compteARebours();
arreterPreview();
await pause(150);
const promesseCapture = apiPost('/api/capturer').catch(() => null);
let resultat = await promesseCapture;