fix: 优化射箭拍照慢问题

This commit is contained in:
2026-08-10 12:06:01 +08:00
parent 80e780b931
commit 27f96d8bce
4 changed files with 8 additions and 23 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
id: t11 id: t11
name: t11 name: t11
version: 2.16.2 version: 2.16.3
author: t11 author: t11
icon: '' icon: ''
desc: t11 desc: t11
+4 -14
View File
@@ -278,8 +278,6 @@ def cmd_str():
logger.info("系统准备完成...") logger.info("系统准备完成...")
last_adc_trigger = 0 last_adc_trigger = 0
_latest_frame = None # 预读的最新帧缓存,供射箭触发时减少延迟
_frame_read_counter = 0 # 相机预读计数器,避免每帧都读拖慢CPU
# 气压采样:减少日志频率(每 N 个点输出一条),避免 logger.debug 拖慢采样 # 气压采样:减少日志频率(每 N 个点输出一条),避免 logger.debug 拖慢采样
PRESSURE_BATCH_SIZE = 100 PRESSURE_BATCH_SIZE = 100
@@ -391,8 +389,7 @@ def cmd_str():
_flush_pressure_buf("before_trigger") _flush_pressure_buf("before_trigger")
try: try:
process_shot(adc_val, pre_frame=_latest_frame) process_shot(adc_val)
_latest_frame = None
except Exception as e: except Exception as e:
logger = logger_manager.logger logger = logger_manager.logger
if logger: if logger:
@@ -402,18 +399,11 @@ def cmd_str():
time.sleep_ms(100) time.sleep_ms(100)
continue continue
else: else:
# 每3次循环预读一次相机帧(~15ms间隔),平衡buffer新鲜度与CPU占用 if config.SHOW_CAMERA_PHOTO_WHILE_SHOOTING:
_frame_read_counter += 1
if _frame_read_counter >= 3:
_frame_read_counter = 0
try: try:
_latest_frame = camera_manager.read_frame() camera_manager.show(camera_manager.read_frame())
if config.SHOW_CAMERA_PHOTO_WHILE_SHOOTING and _latest_frame is not None:
camera_manager.show(_latest_frame)
except Exception as e: except Exception as e:
logger = logger_manager.logger pass
if logger:
logger.error(f"[MAIN] 预读/显示异常: {e}")
time.sleep_ms(5) time.sleep_ms(5)
except Exception as e: except Exception as e:
+2 -7
View File
@@ -311,21 +311,16 @@ def analyze_shot(frame, laser_point=None):
return _build_circle_result(cdata, roi_xyxy) return _build_circle_result(cdata, roi_xyxy)
def process_shot(adc_val, pre_frame=None): def process_shot(adc_val):
""" """
处理射箭事件(逻辑控制部分) 处理射箭事件(逻辑控制部分)
:param adc_val: ADC触发值 :param adc_val: ADC触发值
:param pre_frame: 主循环预读的最新帧(可选),传入则跳过拍照以减少延迟
:return: None :return: None
""" """
logger = logger_manager.logger logger = logger_manager.logger
try: try:
# 优先使用预读帧(零延迟),否则实时拍照 frame = camera_manager.read_frame()
if pre_frame is not None:
frame = pre_frame
else:
frame = camera_manager.read_frame()
# 网络事件移到拍照之后,避免阻塞拍照 # 网络事件移到拍照之后,避免阻塞拍照
network_manager.safe_enqueue({"shoot_event": "start"}, msg_type=2, high=True) network_manager.safe_enqueue({"shoot_event": "start"}, msg_type=2, high=True)
+1 -1
View File
@@ -4,6 +4,6 @@
应用版本号 应用版本号
每次 OTA 更新时,只需要更新这个文件中的版本号 每次 OTA 更新时,只需要更新这个文件中的版本号
""" """
VERSION = '2.16.2' VERSION = '2.16.3'