From 1fd99100e64f97389b47f42188b7d388528f92eb Mon Sep 17 00:00:00 2001 From: jerinpeter Date: Fri, 12 Jun 2026 12:32:11 -0700 Subject: [PATCH] Enable dynamic exposure framerate for camera input and handle subprocess errors --- .../face_recog_stream/camera_reader.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/om1_vlm/anonymizationSys/face_recog_stream/camera_reader.py b/src/om1_vlm/anonymizationSys/face_recog_stream/camera_reader.py index 21c8a0d..3e789e3 100644 --- a/src/om1_vlm/anonymizationSys/face_recog_stream/camera_reader.py +++ b/src/om1_vlm/anonymizationSys/face_recog_stream/camera_reader.py @@ -1,6 +1,7 @@ from __future__ import annotations import logging +import subprocess from typing import Optional import cv2 @@ -79,6 +80,31 @@ def open_capture( self.cap.set(cv2.CAP_PROP_BUFFERSIZE, 1) self.cap.set(cv2.CAP_PROP_AUTO_EXPOSURE, 3) + try: + subprocess.run( + [ + "v4l2-ctl", + "-d", + device, + "--set-ctrl=exposure_dynamic_framerate=1", + ], + check=True, + capture_output=True, + text=True, + ) + logging.info("Enabled exposure_dynamic_framerate on %s", device) + except FileNotFoundError: + logging.warning( + "v4l2-ctl not found; install v4l-utils to enable " + "exposure_dynamic_framerate" + ) + except subprocess.CalledProcessError as e: + logging.warning( + "Failed to set exposure_dynamic_framerate on %s: %s", + device, + (e.stderr or e.stdout or "").strip(), + ) + if not self.cap or not self.cap.isOpened(): raise RuntimeError(f"Failed to open camera device {device}")