pref: 拍照更快
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
id: t11
|
id: t11
|
||||||
name: t11
|
name: t11
|
||||||
version: 2.15.18
|
version: 2.16.1
|
||||||
author: t11
|
author: t11
|
||||||
icon: ''
|
icon: ''
|
||||||
desc: t11
|
desc: t11
|
||||||
|
|||||||
@@ -322,7 +322,7 @@ MAX_IMAGES = 1000
|
|||||||
# Stage2 调试目录(默认 PHOTO_DIR/stage2_roi)内 JPEG 最多保留张数;None 表示与 MAX_IMAGES 相同
|
# Stage2 调试目录(默认 PHOTO_DIR/stage2_roi)内 JPEG 最多保留张数;None 表示与 MAX_IMAGES 相同
|
||||||
TRIANGLE_BLACK_YOLO_STAGE2_ROI_MAX_IMAGES = None
|
TRIANGLE_BLACK_YOLO_STAGE2_ROI_MAX_IMAGES = None
|
||||||
|
|
||||||
SHOW_CAMERA_PHOTO_WHILE_SHOOTING = False # 是否在拍摄时显示摄像头图像(True=显示,False=不显示),建议在连着USB测试过程中打开
|
SHOW_CAMERA_PHOTO_WHILE_SHOOTING = True # 是否在拍摄时显示摄像头图像(True=显示,False=不显示),建议在连着USB测试过程中打开
|
||||||
|
|
||||||
# ==================== OTA配置 ====================
|
# ==================== OTA配置 ====================
|
||||||
MAX_BACKUPS = 5
|
MAX_BACKUPS = 5
|
||||||
|
|||||||
@@ -120,9 +120,9 @@ def cmd_str():
|
|||||||
|
|
||||||
# ==================== 第二阶段:软件初始化 ====================
|
# ==================== 第二阶段:软件初始化 ====================
|
||||||
|
|
||||||
# 1. 初始化日志系统
|
# 1. 初始化日志系统(WARNING级别,不打印/写入INFO和DEBUG日志,提高执行流畅度)
|
||||||
import logging
|
import logging
|
||||||
logger_manager.init_logging(log_level=logging.DEBUG)
|
logger_manager.init_logging(log_level=logging.WARNING)
|
||||||
logger = logger_manager.logger
|
logger = logger_manager.logger
|
||||||
|
|
||||||
# 补充:因为初始化的时候,激光会亮,先关了它
|
# 补充:因为初始化的时候,激光会亮,先关了它
|
||||||
@@ -278,6 +278,8 @@ 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
|
||||||
|
|
||||||
@@ -389,7 +391,8 @@ def cmd_str():
|
|||||||
_flush_pressure_buf("before_trigger")
|
_flush_pressure_buf("before_trigger")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
process_shot(adc_val)
|
process_shot(adc_val, pre_frame=_latest_frame)
|
||||||
|
_latest_frame = None
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger = logger_manager.logger
|
logger = logger_manager.logger
|
||||||
if logger:
|
if logger:
|
||||||
@@ -399,13 +402,18 @@ def cmd_str():
|
|||||||
time.sleep_ms(100)
|
time.sleep_ms(100)
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
if config.SHOW_CAMERA_PHOTO_WHILE_SHOOTING:
|
# 每3次循环预读一次相机帧(~15ms间隔),平衡buffer新鲜度与CPU占用
|
||||||
|
_frame_read_counter += 1
|
||||||
|
if _frame_read_counter >= 3:
|
||||||
|
_frame_read_counter = 0
|
||||||
try:
|
try:
|
||||||
camera_manager.show(camera_manager.read_frame())
|
_latest_frame = 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
|
logger = logger_manager.logger
|
||||||
if logger:
|
if logger:
|
||||||
logger.error(f"[MAIN] 显示异常: {e}")
|
logger.error(f"[MAIN] 预读/显示异常: {e}")
|
||||||
time.sleep_ms(5)
|
time.sleep_ms(5)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
+9
-2
@@ -311,17 +311,24 @@ 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):
|
def process_shot(adc_val, pre_frame=None):
|
||||||
"""
|
"""
|
||||||
处理射箭事件(逻辑控制部分)
|
处理射箭事件(逻辑控制部分)
|
||||||
: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:
|
||||||
|
# 优先使用预读帧(零延迟),否则实时拍照
|
||||||
|
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)
|
||||||
frame = camera_manager.read_frame()
|
|
||||||
|
|
||||||
# 调用算法分析
|
# 调用算法分析
|
||||||
analysis_result = analyze_shot(frame)
|
analysis_result = analyze_shot(frame)
|
||||||
|
|||||||
+1
-1
@@ -4,6 +4,6 @@
|
|||||||
应用版本号
|
应用版本号
|
||||||
每次 OTA 更新时,只需要更新这个文件中的版本号
|
每次 OTA 更新时,只需要更新这个文件中的版本号
|
||||||
"""
|
"""
|
||||||
VERSION = '2.15.18'
|
VERSION = '2.16.1'
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user