代码优化

This commit is contained in:
Kevin Wong
2026-01-05 09:08:40 +08:00
parent 8d725c2723
commit baf9e235a1
13 changed files with 1183 additions and 348 deletions

View File

@@ -88,14 +88,16 @@ class ProcessingResult:
class BlindPathNavigator:
"""盲道导航处理器 - 无外部依赖版本"""
def __init__(self, yolo_model=None, obstacle_detector=None):
def __init__(self, yolo_model=None, obstacle_detector=None, enable_crosswalk_detection=True):
"""
初始化导航器
:param yolo_model: YOLO分割模型可选
:param obstacle_detector: 障碍物检测器(可选)
:param enable_crosswalk_detection: 是否启用斑马线检测(室内模式可关闭)
"""
self.yolo_model = yolo_model
self.obstacle_detector = obstacle_detector
self.enable_crosswalk_detection = enable_crosswalk_detection
# 状态变量
self.current_state = STATE_ONBOARDING
@@ -184,6 +186,10 @@ class BlindPathNavigator:
f"持续模式={self.straight_continuous_mode}, "
f"限制次数={self.straight_repeat_limit}")
logger.info(f"[BlindPath] 方向播报配置: 间隔={self.direction_interval}")
# Day 26 优化: 可配置日志采样间隔
self.log_interval = int(os.getenv("AIGLASS_LOG_INTERVAL", "30")) # 每 N 帧输出一次日志
logger.info(f"[BlindPath] 日志采样间隔: 每{self.log_interval}")
# 缓存变量
self.prev_gray = None
@@ -258,8 +264,14 @@ class BlindPathNavigator:
self.last_crosswalk_mask = None
# 【新增】斑马线感知监控器
self.crosswalk_monitor = CrosswalkAwarenessMonitor()
logger.info("[BlindPath] 斑马线感知监控器已初始化")
# 【新增】斑马线感知监控器
if self.enable_crosswalk_detection:
self.crosswalk_monitor = CrosswalkAwarenessMonitor()
logger.info("[BlindPath] 斑马线感知监控器已初始化")
else:
self.crosswalk_monitor = None
logger.info("[BlindPath] 斑马线感知监控器已禁用 (室内模式)")
logger.info(f"[BlindPath] 盲道检测间隔: 每{self.BLINDPATH_DETECTION_INTERVAL}")
def init_traffic_light_detector(self):
@@ -489,16 +501,24 @@ class BlindPathNavigator:
# 【新增】检查近距离障碍物并设置语音
self._check_and_set_obstacle_voice(detected_obstacles)
# 【配置】如果禁用了斑马线检测强制置为None
if not self.enable_crosswalk_detection:
crosswalk_mask = None
# 【新增】斑马线感知处理
# 【Day 15 优化】减少每帧日志输出,只在每 30 帧输出一次
if crosswalk_mask is not None and self.frame_counter % 30 == 0:
# 【Day 26 优化】使用可配置的日志间隔
if crosswalk_mask is not None and self.frame_counter % self.log_interval == 0:
cross_pixels = np.sum(crosswalk_mask > 0)
if cross_pixels > 0:
logger.info(f"[斑马线] monitor: pixels={cross_pixels}, area={cross_pixels/crosswalk_mask.size*100:.2f}%")
elif crosswalk_mask is None and self.frame_counter % 30 == 0:
elif crosswalk_mask is None and self.frame_counter % self.log_interval == 0:
if self.enable_crosswalk_detection:
logger.info(f"[斑马线] crosswalk_mask为None")
crosswalk_guidance = self.crosswalk_monitor.process_frame(crosswalk_mask, blind_path_mask)
crosswalk_guidance = None
if self.crosswalk_monitor:
crosswalk_guidance = self.crosswalk_monitor.process_frame(crosswalk_mask, blind_path_mask)
if crosswalk_guidance:
logger.info(f"[斑马线感知] 检测结果: area={crosswalk_guidance.get('area', 0):.3f}, "
f"should_broadcast={crosswalk_guidance.get('should_broadcast', False)}, "
@@ -511,7 +531,7 @@ class BlindPathNavigator:
logger.info(f"[斑马线语音] 已设置待播报语音: {crosswalk_guidance['voice_text']}, 优先级{crosswalk_guidance['priority']}")
# 【新增】添加斑马线可视化
if crosswalk_mask is not None:
if crosswalk_mask is not None and self.crosswalk_monitor:
# 计算可视化数据
total_pixels = crosswalk_mask.size
crosswalk_pixels = np.sum(crosswalk_mask > 0)