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:
@@ -185,14 +185,6 @@ class Camera:
|
|||||||
log.error("Camera None pendant capture")
|
log.error("Camera None pendant capture")
|
||||||
self.preview_dslr_ok = False
|
self.preview_dslr_ok = False
|
||||||
return None
|
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)")
|
log.info(f"Déclenchement capture DSLR (tentative {attempt+1}/3)")
|
||||||
chemin_camera = self.camera.capture(gp.GP_CAPTURE_IMAGE)
|
chemin_camera = self.camera.capture(gp.GP_CAPTURE_IMAGE)
|
||||||
fichier_camera = gp.CameraFile()
|
fichier_camera = gp.CameraFile()
|
||||||
@@ -201,8 +193,7 @@ class Camera:
|
|||||||
)
|
)
|
||||||
tmp_path = str(chemin_dest) + ".tmp"
|
tmp_path = str(chemin_dest) + ".tmp"
|
||||||
fichier_camera.save(tmp_path)
|
fichier_camera.save(tmp_path)
|
||||||
self.activer_viewfinder()
|
threading.Thread(target=self._post_capture_warmup, daemon=True).start()
|
||||||
self._chauffer_liveview()
|
|
||||||
from PIL import ImageOps as PILImageOps
|
from PIL import ImageOps as PILImageOps
|
||||||
img = PILImageOps.exif_transpose(PILImage.open(tmp_path))
|
img = PILImageOps.exif_transpose(PILImage.open(tmp_path))
|
||||||
if img.width > 4000:
|
if img.width > 4000:
|
||||||
@@ -225,6 +216,10 @@ class Camera:
|
|||||||
self.preview_dslr_ok = False
|
self.preview_dslr_ok = False
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def _post_capture_warmup(self):
|
||||||
|
self.activer_viewfinder()
|
||||||
|
self._chauffer_liveview()
|
||||||
|
|
||||||
def _chauffer_liveview(self, tentatives: int = 8, pause: float = 0.15):
|
def _chauffer_liveview(self, tentatives: int = 8, pause: float = 0.15):
|
||||||
"""Consomme les premieres frames LiveView juste apres la remontee du miroir
|
"""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
|
(souvent en erreur ~1-2s le temps que l'AF/capteur se stabilise), pendant
|
||||||
|
|||||||
@@ -917,7 +917,7 @@
|
|||||||
|
|
||||||
<script src="/js/websocket.js?v=16"></script>
|
<script src="/js/websocket.js?v=16"></script>
|
||||||
<script src="/js/app.js?v=18"></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/effects.js?v=4"></script>
|
||||||
<script src="/js/gallery.js?v=3"></script>
|
<script src="/js/gallery.js?v=3"></script>
|
||||||
<script src="/js/share.js?v=8"></script>
|
<script src="/js/share.js?v=8"></script>
|
||||||
|
|||||||
@@ -253,7 +253,6 @@ async function lancerCapture() {
|
|||||||
lancerPreview(); // Miroir live pendant le compte à rebours
|
lancerPreview(); // Miroir live pendant le compte à rebours
|
||||||
await compteARebours();
|
await compteARebours();
|
||||||
arreterPreview();
|
arreterPreview();
|
||||||
await pause(150);
|
|
||||||
|
|
||||||
const promesseCapture = apiPost('/api/capturer').catch(() => null);
|
const promesseCapture = apiPost('/api/capturer').catch(() => null);
|
||||||
let resultat = await promesseCapture;
|
let resultat = await promesseCapture;
|
||||||
|
|||||||
Reference in New Issue
Block a user