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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
| class EuroNCAP_DSM_TestCases: """Euro NCAP 2026 DSM 官方测试用例""" DISTRACTION_CASES = { "D-01": { "description": "手机通话(手持)", "trigger": "驾驶员手持手机至耳边", "duration": "≥3s", "warning": "一级警告(视觉+声音)", "latency": "≤3s" }, "D-02": { "description": "手机操作(低头)", "trigger": "驾驶员低头操作手机", "duration": "≥3s", "warning": "一级警告", "latency": "≤3s" }, "D-03": { "description": "视线偏离道路", "trigger": "视线偏离前方道路 ≥3s", "warning": "一级警告", "latency": "≤3s" }, "D-04": { "description": "操作中控屏幕", "trigger": "单次操作时长 >5s", "warning": "一级警告", "latency": "≤5s" }, "D-05": { "description": "拾取物体", "trigger": "手离开方向盘拾取物体", "duration": "≥5s", "warning": "一级警告", "latency": "≤5s" } } FATIGUE_CASES = { "F-01": { "description": "微睡眠", "trigger": "PERCLOS ≥30%,持续 5s", "kss_level": "≥7", "warning": "二级警告", "latency": "≤5s" }, "F-02": { "description": "频繁眨眼", "trigger": "眨眼频率 >20 次/分钟", "duration": "≥60s", "warning": "一级警告" }, "F-03": { "description": "打哈欠", "trigger": "连续 3 次哈欠", "interval": "≤60s", "warning": "一级警告" }, "F-04": { "description": "头部下垂", "trigger": "头部角度 >15° 持续 3s", "warning": "二级警告" } } IMPAIRMENT_CASES = { "I-01": { "description": "酒精损伤", "trigger": "行为模式偏离基线", "metrics": ["reaction_time", "steering_jitter", "eye_movement"], "latency": "≤10min" }, "I-02": { "description": "药物损伤", "trigger": "瞳孔异常 + 眼动异常", "threshold": "偏离个人基线 30%", "latency": "≤10min" }, "I-03": { "description": "突发疾病", "trigger": "无响应 >10s", "warning": "三级干预(紧急停车)" } } @classmethod def generate_test_dataset(cls, use_case: str, num_samples: int = 1000): """ 生成测试数据集 Args: use_case: 'distraction', 'fatigue', 'impairment' num_samples: 每个场景的样本数 Returns: dataset: { "images": List[np.ndarray], "annotations": List[dict], "metadata": dict } """ cases = getattr(cls, f"{use_case.upper()}_CASES") dataset = { "images": [], "annotations": [], "metadata": { "protocol": "Euro NCAP 2026 DSM", "version": "1.0", "cases": list(cases.keys()) } } for case_id, case_config in cases.items(): for i in range(num_samples): scene = generate_scene(case_config) image = render_image(scene) annotation = auto_annotate(scene) dataset["images"].append(image) dataset["annotations"].append(annotation) return dataset
|