代码优化
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user