Euro NCAP 2026 DSM/OMS 协议详解:从测试场景到合规路径

前言

2026 年 1 月,Euro NCAP 发布了十年来最大规模的协议修订。新的评估框架从传统的”被动安全”转向”主动安全”,DSM(驾驶员状态监控)和 OMS(乘员监控系统)成为 5 星评级的关键。

本文详细解读 Euro NCAP 2026 DSM/OMS 协议,为 IMS 开发提供可落地的合规指导。


一、协议框架变化

1.1 评估维度重构

2025 及之前 2026 起
Adult Occupant Protection (AOP) Safe Driving
Child Occupant Protection (COP) Crash Avoidance
Vulnerable Road User (VRU) Crash Protection
Safety Assist (SA) Post-Crash Safety

1.2 Safe Driving 评分构成(60 分)

评分项 分值 权重
Occupant Monitoring 30 分 50%
Driver Engagement 30 分 50%

Occupant Monitoring 细分:

子项 分值
DSM(驾驶员监控) 15 分
OMS(乘员监控) 10 分
CPD(儿童检测) 5 分

二、DSM(驾驶员监控)测试详解

2.1 测试场景清单

Euro NCAP DSM 协议定义了 16 个测试场景

疲劳检测场景(5 个)

场景编号 描述 检测要求
F-01 轻度疲劳(KSS 6-7) ≤120秒检测
F-02 中度疲劳(KSS 7-8) ≤60秒检测
F-03 重度疲劳(KSS >8) ≤30秒检测
F-04 微睡眠(闭眼 1-2 秒) ≤3秒检测
F-05 持续闭眼(>2 秒) 立即检测

KSS(Karolinska Sleepiness Scale)标准:

KSS 等级 描述 状态
1-3 完全清醒 正常
4-5 略有困意 正常
6-7 轻度疲劳 ⚠️ 一级警告
8 中度疲劳 ⚠️ 二级警告
9 重度疲劳 🚨 紧急停车

分心检测场景(8 个)

场景编号 描述 检测要求
D-01 手机通话(手持) ≤3秒检测
D-02 手机打字 ≤3秒检测
D-03 手机浏览 ≤5秒检测
D-04 调整中控 ≤5秒检测
D-05 视线偏离道路 >3 秒 ≤5秒检测
D-06 低头(捡东西) ≤5秒检测
D-07 侧身看后座 ≤5秒检测
D-08 喝水/吃东西 ≤10秒检测

认知分心场景(3 个)

场景编号 描述 检测要求
CD-01 心算任务 ≤10秒检测
CD-02 白日梦 ≤15秒检测
CD-03 通话中认知负荷 ≤5秒检测

2.2 检测时限要求

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
"""
Euro NCAP DSM 检测时限验证代码
"""

from dataclasses import dataclass
from typing import List, Tuple

@dataclass
class DSMTestScenario:
"""DSM 测试场景"""
scenario_id: str
description: str
detection_limit_sec: float
warning_level: str # "L1", "L2", "Emergency"

# 定义所有测试场景
DSM_SCENARIOS = [
# 疲劳场景
DSMTestScenario("F-01", "轻度疲劳 KSS 6-7", 120.0, "L1"),
DSMTestScenario("F-02", "中度疲劳 KSS 7-8", 60.0, "L2"),
DSMTestScenario("F-03", "重度疲劳 KSS >8", 30.0, "Emergency"),
DSMTestScenario("F-04", "微睡眠 1-2秒", 3.0, "L1"),
DSMTestScenario("F-05", "持续闭眼 >2秒", 1.0, "Emergency"),

# 分心场景
DSMTestScenario("D-01", "手持通话", 3.0, "L1"),
DSMTestScenario("D-02", "手机打字", 3.0, "L1"),
DSMTestScenario("D-03", "手机浏览", 5.0, "L1"),
DSMTestScenario("D-04", "调整中控", 5.0, "L1"),
DSMTestScenario("D-05", "视线偏离 >3秒", 5.0, "L1"),
DSMTestScenario("D-06", "低头捡东西", 5.0, "L1"),
DSMTestScenario("D-07", "侧身看后座", 5.0, "L1"),
DSMTestScenario("D-08", "喝水/吃东西", 10.0, "L1"),

# 认知分心场景
DSMTestScenario("CD-01", "心算任务", 10.0, "L1"),
DSMTestScenario("CD-02", "白日梦", 15.0, "L1"),
DSMTestScenario("CD-03", "通话认知负荷", 5.0, "L1"),
]

def validate_detection(
scenario: DSMTestScenario,
detection_time_sec: float
) -> Tuple[bool, str]:
"""
验证检测结果是否符合 Euro NCAP 要求

Args:
scenario: 测试场景
detection_time_sec: 实际检测时间(秒)

Returns:
passed: 是否通过
message: 验证消息
"""
passed = detection_time_sec <= scenario.detection_limit_sec

if passed:
message = f"✅ {scenario.scenario_id}: 检测时间 {detection_time_sec:.1f}s ≤ {scenario.detection_limit_sec}s"
else:
message = f"❌ {scenario.scenario_id}: 检测时间 {detection_time_sec:.1f}s > {scenario.detection_limit_sec}s"

return passed, message

def run_dsm_test_suite(
detection_results: List[Tuple[str, float]]
) -> Tuple[int, int, float]:
"""
运行 DSM 测试套件

Args:
detection_results: [(scenario_id, detection_time), ...]

Returns:
passed: 通过数量
total: 总数量
score: 得分率
"""
passed = 0
total = len(detection_results)

for scenario_id, detection_time in detection_results:
# 查找场景
scenario = next((s for s in DSM_SCENARIOS if s.scenario_id == scenario_id), None)
if scenario is None:
print(f"⚠️ 未知场景: {scenario_id}")
continue

is_passed, message = validate_detection(scenario, detection_time)
print(message)

if is_passed:
passed += 1

score = passed / total * 100 if total > 0 else 0
return passed, total, score


# 测试代码
if __name__ == "__main__":
# 模拟检测结果
test_results = [
("F-01", 95.0), # 通过
("F-02", 55.0), # 通过
("F-03", 28.0), # 通过
("F-04", 2.8), # 通过
("F-05", 0.8), # 通过
("D-01", 2.5), # 通过
("D-02", 2.8), # 通过
("D-03", 4.2), # 通过
("D-04", 4.8), # 通过
("D-05", 4.5), # 通过
("D-06", 4.2), # 通过
("D-07", 5.5), # 失败
("D-08", 8.5), # 通过
("CD-01", 9.0), # 通过
("CD-02", 12.0), # 通过
("CD-03", 4.5), # 通过
]

passed, total, score = run_dsm_test_suite(test_results)
print(f"\n测试结果: {passed}/{total} 通过,得分率: {score:.1f}%")

2.3 警告等级定义

等级 触发条件 系统响应
L1(轻度) 检测到异常 声音提示 + 图标闪烁
L2(中度) 持续异常或高风险 振动 + 语音警告
Emergency 紧急情况 自动减速 + 停车

2.4 眼动追踪要求

Euro NCAP 2026 明确要求:

“To achieve a 5-star rating, vehicles must employ continuous eye- and head-tracking.”

— ETSC, January 2026

技术指标:

指标 要求
追踪覆盖率 ≥90% 驾驶时间
视线估计误差 ≤5°
头部姿态估计误差 ≤10°
眨眼检测准确率 ≥95%

三、OMS(乘员监控)测试详解

3.1 测试场景清单

Euro NCAP 2026 新增 OMS 测试,共 8 个场景

安全带检测场景(3 个)

场景编号 描述 检测要求
OMS-01 未系安全带(前排) 启动后 ≤5秒检测
OMS-02 安全带错误佩戴 ≤10秒检测
OMS-03 儿童座椅安装检测 ≤10秒检测

乘员分类场景(3 个)

场景编号 描述 检测要求
OMS-04 成人识别 准确率 ≥95%
OMS-05 儿童识别(6-12岁) 准确率 ≥90%
OMS-06 幼儿识别(<6岁) 准确率 ≥85%

异常姿态检测场景(2 个)

场景编号 描述 检测要求
OMS-07 乘客躺卧 ≤10秒检测
OMS-08 脚放在仪表台 ≤10秒检测

3.2 安全带错误佩戴检测

Euro NCAP 定义的错误佩戴类型:

类型 描述 检测方法
肩带偏离 肩带滑落至手臂下方 视觉检测肩带位置
腰带过高 腰带位于腹部而非髋部 视觉检测腰带位置
安全带松弛 安全带未拉紧 张力传感器 + 视觉
背后穿过 安全带从背后穿过 视觉检测
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
"""
安全带错误佩戴检测代码示例
"""

import numpy as np
from typing import Tuple, List
from dataclasses import dataclass

@dataclass
class SeatbeltStatus:
"""安全带状态"""
is_fastened: bool
shoulder_belt_position: Tuple[float, float] # (x, y) 归一化坐标
lap_belt_position: Tuple[float, float]
belt_tension: float # 0-1
is_correct: bool
error_type: str

def detect_seatbelt_misuse(
keypoints: np.ndarray,
belt_line: np.ndarray,
tension: float
) -> SeatbeltStatus:
"""
检测安全带错误佩戴

Args:
keypoints: 人体关键点 (N, 2),包括肩膀、髋部等
belt_line: 安全带轮廓点 (M, 2)
tension: 安全带张力

Returns:
status: 安全带状态
"""
# 提取关键点
left_shoulder = keypoints[5] # 左肩
right_shoulder = keypoints[6] # 右肩
left_hip = keypoints[11] # 左髋
right_hip = keypoints[12] # 右髋

shoulder_center = (left_shoulder + right_shoulder) / 2
hip_center = (left_hip + right_hip) / 2

# 1. 检测肩带位置
shoulder_belt_y = np.mean(belt_line[:len(belt_line)//2, 1])
is_shoulder_correct = abs(shoulder_belt_y - shoulder_center[1]) < 0.1

# 2. 检测腰带位置
lap_belt_y = np.mean(belt_line[len(belt_line)//2:, 1])
is_lap_correct = abs(lap_belt_y - hip_center[1]) < 0.1

# 3. 检测张力
is_tension_correct = tension > 0.5

# 4. 综合判断
is_correct = is_shoulder_correct and is_lap_correct and is_tension_correct

# 确定错误类型
error_type = "correct" if is_correct else ""
if not is_shoulder_correct:
error_type += "shoulder_deviation "
if not is_lap_correct:
error_type += "lap_belt_high "
if not is_tension_correct:
error_type += "belt_loose"

return SeatbeltStatus(
is_fastened=True,
shoulder_belt_position=tuple(shoulder_center),
lap_belt_position=tuple(hip_center),
belt_tension=tension,
is_correct=is_correct,
error_type=error_type.strip()
)


# 测试
if __name__ == "__main__":
# 模拟数据
keypoints = np.array([
[0, 0], # 0: nose
[0, 0], # 1: left_eye
[0, 0], # 2: right_eye
[0, 0], # 3: left_ear
[0, 0], # 4: right_ear
[0.3, 0.4], # 5: left_shoulder
[0.7, 0.4], # 6: right_shoulder
[0, 0], # 7-10: elbows, wrists
[0, 0],
[0, 0],
[0, 0],
[0.35, 0.7], # 11: left_hip
[0.65, 0.7], # 12: right_hip
])

# 正确佩戴
belt_line_correct = np.array([
[0.5, 0.42], [0.5, 0.45], # 肩带
[0.5, 0.68], [0.5, 0.72], # 腰带
])

status = detect_seatbelt_misuse(keypoints, belt_line_correct, tension=0.8)
print(f"正确佩戴: {status.is_correct}, 错误类型: {status.error_type}")

四、CPD(儿童检测)测试详解

4.1 测试场景

Euro NCAP 2026 强制要求 CPD:

场景编号 描述 检测要求
CPD-01 婴儿(<1岁)单独留在车内 ≤30秒检测
CPD-02 幼儿(1-3岁)单独留在车内 ≤30秒检测
CPD-03 儿童在儿童座椅中 ≤60秒检测
CPD-04 儿童被毯子覆盖 ≤90秒检测
CPD-05 儿童在后排座椅 ≤60秒检测
CPD-06 儿童在后备箱(SUV) ≤120秒检测

4.2 技术要求

指标 要求
检测准确率 ≥95%
误报率 ≤1次/100小时
响应时间 ≤60秒(标准场景)
覆盖率 所有座椅位置

4.3 雷达 vs 摄像头方案对比

方案 优点 缺点 推荐度
60GHz 雷达 穿透性强、可检测呼吸 成本高、分辨率低 ⭐⭐⭐⭐
IR 摄像头 成本低、分辨率高 受遮挡影响 ⭐⭐⭐
融合方案 互补优势 复杂度高 ⭐⭐⭐⭐⭐

五、物理按钮要求

5.1 Euro NCAP 新规

Euro NCAP 2026 强制要求物理按钮:

“To secure a top safety rating, manufacturers must provide dedicated physical controls for core functions, including:

  • Indicators and hazard lights
  • Windscreen wipers
  • The horn
  • SOS/eCall functions”

— ETSC, January 2026

5.2 设计要求

功能 要求
转向灯 物理拨杆
危险警报灯 独立物理按钮
雨刷 物理拨杆或旋钮
喇叭 物理按键(方向盘)
SOS/eCall 独立物理按钮

六、OEM 合规路径

6.1 时间线

时间 里程碑
2026 Q1 Euro NCAP 2026 协议生效
2026 Q4 首批 2026 评级车型测试
2027 DSM/OMS/CPD 全面强制
2029 欧盟 GSR 修订(预期)

6.2 集成清单

传感器配置:

传感器 数量 位置
IR 摄像头(DMS) 1 转向柱/仪表台
IR 摄像头(OMS) 1-2 后视镜/车顶
60GHz 雷达(CPD) 1-2 车顶/座椅

软件栈:

模块 功能
眼动追踪 视线估计、眨眼检测
头部姿态 姿态估计、注意力判断
行为识别 分心行为分类
乘员检测 分类、姿态检测
CPD 算法 儿童检测、呼吸检测

6.3 测试验证流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Euro NCAP DSM 测试流程
1. 准备测试车辆(DMS 激活状态)
2. 执行 16 个 DSM 测试场景
3. 记录检测时间和警告等级
4. 计算得分率(需 ≥80% 通过)
5. 提交 Dossier 文档

# Euro NCAP OMS 测试流程
1. 准备不同体型乘员(成人/儿童/婴儿)
2. 执行 8 个 OMS 测试场景
3. 验证乘员分类准确率
4. 验证安全带检测准确率
5. 计算得分率(需 ≥75% 通过)

# Euro NCAP CPD 测试流程
1. 准备儿童假人(不同年龄)
2. 执行 6 个 CPD 测试场景
3. 验证检测准确率(≥95%)
4. 验证误报率(≤1次/100h)
5. 验证响应时间(≤60s)

七、IMS 开发建议

7.1 功能优先级

优先级 功能 Euro NCAP 权重
P0 眼动追踪(疲劳/分心) 15 分
P1 安全带检测 5 分
P1 CPD 儿童检测 5 分
P2 认知分心检测 新增
P2 酒驾损伤检测 新增
P3 异常姿态检测 低权重

7.2 技术路线

短期(2026 合规):

  • 实现基础 DSM(眼动追踪 + 分心检测)
  • 实现 OMS(安全带检测 + 乘员分类)
  • 实现 CPD(雷达方案)

中长期(技术迭代):

  • 认知分心检测
  • 酒驾损伤检测
  • 多模态融合

总结

Euro NCAP 2026 对 IMS 提出全面要求:

  1. DSM: 16 个测试场景,眼动追踪强制
  2. OMS: 8 个测试场景,安全带检测强制
  3. CPD: 6 个测试场景,雷达方案推荐
  4. 物理按钮: 转向灯、雨刷、喇叭、SOS

官方文档:


Euro NCAP 2026 DSM/OMS 协议详解:从测试场景到合规路径
https://dapalm.com/2026/04/20/2026-04-20-euro-ncap-2026-dsm-oms/
作者
Mars
发布于
2026年4月20日
许可协议