From 2b7c5b90e96b144a91e5e7bb9eeec9335c7916fe Mon Sep 17 00:00:00 2001 From: root <13910913995@163.com> Date: Tue, 2 Dec 2025 10:34:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=BA=86=E5=BD=95=E5=83=8F?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/config.ini | 4 +-- backend/devices/screen_recorder.py | 48 ++++++++++++++++++++---------- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/backend/config.ini b/backend/config.ini index b5a47c44..70efd622 100644 --- a/backend/config.ini +++ b/backend/config.ini @@ -19,7 +19,7 @@ path = D:/BodyCheck/file/ [CAMERA1] enabled = True -device_index = 2 +device_index = 0 width = 1280 height = 720 fps = 30 @@ -29,7 +29,7 @@ backend = directshow [CAMERA2] enabled = True -device_index = 0 +device_index = 2 width = 1280 height = 720 fps = 30 diff --git a/backend/devices/screen_recorder.py b/backend/devices/screen_recorder.py index 161bdd8c..bc7eb6c9 100644 --- a/backend/devices/screen_recorder.py +++ b/backend/devices/screen_recorder.py @@ -74,15 +74,19 @@ class RecordingManager: self.feet_recording_thread = None self.screen_recording_thread = None self.femtobolt_recording_thread = None + self.camera1_recording_thread = None + self.camera2_recording_thread = None # 独立的录制参数配置 self.screen_fps = 25 # 屏幕录制帧率 - self.camera_fps = 20 # 相机录制帧率 + self.camera1_fps = 20 # 相机1录制帧率 + self.camera2_fps = 20 # 相机2录制帧率 self.femtobolt_fps = 15 # FemtoBolt录制帧率 # 录制区域 self.screen_region = None - self.camera_region = None + self.camera1_region = None + self.camera2_region = None self.femtobolt_region = None # 屏幕尺寸 @@ -98,7 +102,8 @@ class RecordingManager: # 独立的帧率控制参数 self.screen_current_fps = self.screen_fps - self.camera_current_fps = self.camera_fps + self.camera1_current_fps = self.camera1_fps + self.camera2_current_fps = self.camera2_fps self.femtobolt_current_fps = self.femtobolt_fps # 区域大小阈值配置 - 根据实际录制场景优化 @@ -159,11 +164,12 @@ class RecordingManager: 根据录制区域大小设置自适应帧率 Args: - recording_type: 录制类型 ('screen', 'camera', 'femtobolt') + recording_type: 录制类型 ('screen', 'camera1', 'camera2', 'femtobolt') region: 录制区域 (x, y, width, height) """ size_category = self._calculate_region_size_category(region) - target_fps = self.fps_config[size_category][recording_type] + lookup_key = 'camera' if recording_type in ['camera1', 'camera2'] else recording_type + target_fps = self.fps_config[size_category][lookup_key] # 计算区域面积用于日志 _, _, width, height = region @@ -171,8 +177,10 @@ class RecordingManager: if recording_type == 'screen': self.screen_current_fps = target_fps - elif recording_type == 'camera': - self.camera_current_fps = target_fps + elif recording_type == 'camera1': + self.camera1_current_fps = target_fps + elif recording_type == 'camera2': + self.camera2_current_fps = target_fps elif recording_type == 'femtobolt': self.femtobolt_current_fps = target_fps @@ -253,7 +261,7 @@ class RecordingManager: camera1_location: 相机1录制区域 [x, y, w, h] camera2_location: 相机2录制区域 [x, y, w, h] femtobolt_location: FemtoBolt录制区域 [x, y, w, h] - recording_types: 录制类型列表 ['screen', 'camera1', 'camera2', 'feet', 'femtobolt'],默认全部录制 + recording_types: 录制类型列表 ['screen', 'camera', 'feet', 'femtobolt'],默认全部录制 Returns: Dict: 录制启动状态和信息 @@ -280,7 +288,7 @@ class RecordingManager: return result # 设置默认录制类型 - recording_types = ['screen', 'camera1' ,'camera2'] + recording_types = ['screen', 'camera1',"camera2"] # 验证录制区域参数(仅对启用的录制类型进行验证) if 'screen' in recording_types: @@ -576,11 +584,11 @@ class RecordingManager: expected_frames = int(actual_recording_duration * self.screen_current_fps) self.logger.info(f' 屏幕录制预期帧数: {expected_frames}帧 (帧率{self.screen_current_fps}fps)') elif thread_name == 'camera1': - expected_frames = int(actual_recording_duration * self.camera_current_fps) - self.logger.info(f' 相机1录制预期帧数: {expected_frames}帧 (帧率{self.camera_current_fps}fps)') + expected_frames = int(actual_recording_duration * self.camera1_current_fps) + self.logger.info(f' 相机1录制预期帧数: {expected_frames}帧 (帧率{self.camera1_current_fps}fps)') elif thread_name == 'camera2': - expected_frames = int(actual_recording_duration * self.camera_current_fps) - self.logger.info(f' 相机2录制预期帧数: {expected_frames}帧 (帧率{self.camera_current_fps}fps)') + expected_frames = int(actual_recording_duration * self.camera2_current_fps) + self.logger.info(f' 相机2录制预期帧数: {expected_frames}帧 (帧率{self.camera2_current_fps}fps)') elif thread_name == 'femtobolt': expected_frames = int(actual_recording_duration * self.femtobolt_current_fps) self.logger.info(f' FemtoBolt录制预期帧数: {expected_frames}帧 (帧率{self.femtobolt_current_fps}fps)') @@ -808,12 +816,16 @@ class RecordingManager: return False self.screen_region = screen_region - self.camera_region = camera_region + # 兼容旧参数:如果传入单一camera_region,则同时设置为camera1与camera2区域 + if camera_region is not None: + self.camera1_region = camera_region + self.camera2_region = camera_region self.femtobolt_region = femtobolt_region self.logger.info(f'录制区域已设置:') self.logger.info(f' 屏幕区域: {screen_region}') - self.logger.info(f' 相机区域: {camera_region}') + self.logger.info(f' 相机1区域: {self.camera1_region}') + self.logger.info(f' 相机2区域: {self.camera2_region}') self.logger.info(f' FemtoBolt区域: {femtobolt_region}') return True @@ -828,6 +840,10 @@ class RecordingManager: 'screen_size': self.screen_size, 'screen_region': self.screen_region, 'screen_fps': self.screen_fps, + 'camera1_region': self.camera1_region, + 'camera2_region': self.camera2_region, + 'camera1_fps': self.camera1_fps, + 'camera2_fps': self.camera2_fps, 'feet_writer_active': self.feet_video_writer is not None and self.feet_video_writer.isOpened() if self.feet_video_writer else False, 'screen_writer_active': self.screen_video_writer is not None and self.screen_video_writer.isOpened() if self.screen_video_writer else False } @@ -990,4 +1006,4 @@ class ScreenRecorder: def get_status(self): """获取状态""" - return self.recording_manager.get_status() \ No newline at end of file + return self.recording_manager.get_status()