1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| class DMSAlertDesign: """ 基于海事事故教训的 DMS 警报设计 核心原则: 1. 警报必须能唤醒疲劳驾驶员(桥楼警报失败教训) 2. 误报率必须可控(风电场警报静音教训) 3. 分级告警避免警报疲劳 4. 多模态告警确保感知 """ ALERT_LEVELS = { 'info': { 'trigger': '轻度疲劳迹象', 'modalities': ['视觉:仪表盘图标'], 'volume_db': 0, 'duration': '2s闪烁', 'max_per_hour': 3, }, 'warning': { 'trigger': 'PERCLOS 20-30% 或分心', 'modalities': ['视觉:红色图标', '听觉:语音提醒'], 'volume_db': 65, 'duration': '3s', 'max_per_hour': 2, }, 'critical': { 'trigger': 'PERCLOS >30% 或微睡眠', 'modalities': ['视觉:全屏红色', '听觉:高音警报', '触觉:方向盘震动'], 'volume_db': 85, 'duration': '持续至驾驶员响应', 'max_per_hour': 1, }, 'emergency': { 'trigger': '持续闭眼 >3s 或无响应', 'modalities': ['全感官', 'ADAS 介入'], 'volume_db': 95, 'duration': '持续', 'max_per_hour': 0, }, } def evaluate_alert_strategy(self, current_level: str, alerts_last_hour: int) -> dict: """评估告警策略""" level_config = self.ALERT_LEVELS[current_level] max_hourly = level_config['max_per_hour'] if alerts_last_hour >= max_hourly: return { 'action': 'escalate', 'reason': f'{current_level}已达上限{max_hourly}/h,升级至更高级别', 'new_level': self._escalate(current_level), } return { 'action': 'alert', 'level': current_level, 'modalities': level_config['modalities'], 'volume_db': level_config['volume_db'], } def _escalate(self, level: str) -> str: levels = ['info', 'warning', 'critical', 'emergency'] idx = levels.index(level) return levels[min(idx + 1, len(levels) - 1)]
if __name__ == "__main__": dms = DMSAlertDesign() print("=== DMS 警报设计(基于海事教训)===") for level, config in dms.ALERT_LEVELS.items(): print(f"\n{level.upper()}:") print(f" 触发: {config['trigger']}") print(f" 模态: {config['modalities']}") print(f" 音量: {config['volume_db']} dB") print(f" 上限: {config['max_per_hour']}/h") print("\n=== 警报疲劳防护测试 ===") result = dms.evaluate_alert_strategy('warning', 2) print(f"第3次 warning 触发: {result}") result = dms.evaluate_alert_strategy('warning', 1) print(f"第2次 warning 触发: {result}")
|