This commit is contained in:
limengnan 2025-12-02 15:56:47 +08:00
commit 73191de5b8
4 changed files with 34 additions and 18 deletions

View File

@ -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

View File

@ -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
}