Euro NCAP分心检测自然驾驶研究:长分心每1.1小时一次,短分心每4.8小时一次

核心摘要

Seeing Machines团队2023年发表在Human Factors期刊的研究,首次分析了Euro NCAP定义的分心行为在自然驾驶中的发生频率。关键发现:长分心事件(LGA)每1.1小时发生一次短分心事件(VATS)每4.8小时发生一次。本研究对Euro NCAP DSM系统的误报率、用户体验设计具有重要指导意义。

一、研究背景

1.1 Euro NCAP DSM协议

2023年Euro NCAP实施DSM系统测试评估协议,定义了两大类驾驶员分心行为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
EURONCAP_DISTRACTION_CATEGORIES = {
"long_distraction": {
"name": "长分心(Long Glance Away, LGA)",
"definition": "单次视线偏离道路≥3秒",
"subcategories": [
"driving_related": "驾驶相关(如后视镜)",
"nondriving_related": "非驾驶相关(如中控屏)",
],
"threshold": "≥3秒",
},
"short_distraction": {
"name": "短分心(Visual Attention Time Sharing, VATS)",
"definition": "30秒窗口内累计视线偏离≥10秒",
"conditions": [
"每次视线偏离<2秒",
"不返回道路≥2秒",
"仅非驾驶相关区域",
],
"threshold": "累计≥10秒/30秒",
},
}

1.2 研究目标

本研究旨在回答以下问题:

  1. Euro NCAP定义的分心行为在自然驾驶中发生频率如何?
  2. 长分心(LGA)与短分心(VATS)的发生比例?
  3. 驾驶相关 vs 非驾驶相关分心的分布?
  4. 蜥蜴式 vs 猫头鹰式注视的策略差异?
  5. DSM系统跟踪能力对用户体验的影响?

二、研究方法

2.1 数据来源

研究论文信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
STUDY_INFO = {
"title": "European NCAP Driver State Monitoring Protocols: Prevalence of Distraction in Naturalistic Driving",
"authors": [
"Megan Mulhall", "Kyle Wilson", "Shiyan Yang", "Jonny Kuo",
"Tracey Sletten", "Clare Anderson", "Mark E. Howard",
"Shantha Rajaratnam", "Michelle Magee", "Allison Collins",
"Michael G. Lenné"
],
"journal": "Human Factors: The Journal of the Human Factors and Ergonomics Society",
"volume": "66(9)",
"pages": "2205-2217",
"year": 2023,
"doi": "https://doi.org/10.1177/00187208231194543",
"affiliation": "Seeing Machines + Monash University + others",
}

数据来源:

  • 自然驾驶研究(NDS)数据
  • 眼动追踪数据
  • 视频标注数据

2.2 检测算法

LGA检测算法:

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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
import numpy as np
from typing import List, Tuple

class LGADetector:
"""
长分心(Long Glance Away)检测器

Euro NCAP定义:
- 单次视线偏离道路≥3秒
- 分类为驾驶相关/非驾驶相关

驾驶相关:
- 后视镜
- 侧后视镜
- 仪表盘(速度表等)

非驾驶相关:
- 中控屏
- 手机
- 副驾驶座位
- 后排座位
"""

def __init__(self, threshold_sec: float = 3.0):
self.threshold_sec = threshold_sec
self.fps = 30 # 假设帧率

# 定义注视区域
self.driving_related_zones = [
"rear_mirror",
"left_mirror",
"right_mirror",
"instrument_cluster",
"speedometer",
]

self.nondriving_related_zones = [
"infotainment",
"phone",
"passenger_seat",
"rear_seat",
"floor",
"other",
]

def detect_lga_events(
self, gaze_data: np.ndarray, zone_data: List[str]
) -> List[dict]:
"""
检测长分心事件

Args:
gaze_data: 视线方向数据, shape=(N, 3), [pitch, yaw, roll]
zone_data: 注视区域标签, length=N

Returns:
lga_events: [
{
"start_frame": int,
"end_frame": int,
"duration_sec": float,
"zone": str,
"is_driving_related": bool,
},
...
]
"""
lga_events = []

# 检测视线偏离道路的事件
away_from_road = self._detect_gaze_away(gaze_data)

# 找连续区域
events = self._find_continuous_events(away_from_road)

# 过滤短于阈值的事件
for event in events:
duration_frames = event["end"] - event["start"]
duration_sec = duration_frames / self.fps

if duration_sec >= self.threshold_sec:
# 统计主要注视区域
zones_in_event = zone_data[event["start"]:event["end"]]
primary_zone = max(set(zones_in_event), key=zones_in_event.count)

is_driving_related = primary_zone in self.driving_related_zones

lga_events.append({
"start_frame": event["start"],
"end_frame": event["end"],
"duration_sec": duration_sec,
"zone": primary_zone,
"is_driving_related": is_driving_related,
})

return lga_events

def _detect_gaze_away(self, gaze_data: np.ndarray) -> np.ndarray:
"""
检测视线偏离道路

道路区域定义:
- yaw角:-15° ~ +15°
- pitch角:-10° ~ +5°
"""
yaw = gaze_data[:, 1] # 偏航角
pitch = gaze_data[:, 0] # 俯仰角

# 道路区域
on_road = (
(yaw >= -15) & (yaw <= 15) &
(pitch >= -10) & (pitch <= 5)
)

return ~on_road

def _find_continuous_events(self, binary_array: np.ndarray) -> List[dict]:
"""找连续的True区域"""
events = []

# 找变化点
changes = np.diff(binary_array.astype(int))
starts = np.where(changes == 1)[0] + 1
ends = np.where(changes == -1)[0] + 1

# 处理边界
if binary_array[0]:
starts = np.concatenate([[0], starts])
if binary_array[-1]:
ends = np.concatenate([ends, [len(binary_array)]])

# 配对
for start, end in zip(starts, ends):
events.append({"start": start, "end": end})

return events


# 实际测试
if __name__ == "__main__":
detector = LGADetector(threshold_sec=3.0)

# 模拟数据:10分钟驾驶
np.random.seed(42)
gaze_data = np.random.randn(18000, 3) * 10 # 10分钟,30fps
zones = np.random.choice(
["rear_mirror", "infotainment", "phone", "speedometer"],
size=18000,
p=[0.1, 0.3, 0.2, 0.4]
)

lga_events = detector.detect_lga_events(gaze_data, zones.tolist())

print(f"检测到 {len(lga_events)} 个长分心事件")
for i, event in enumerate(lga_events[:5]):
print(f" 事件 {i+1}: {event['duration_sec']:.1f}秒, "
f"区域: {event['zone']}, "
f"驾驶相关: {event['is_driving_related']}")

2.3 VATS检测算法

短分心(Visual Attention Time Sharing)检测:

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
class VATSDetector:
"""
短分心(Visual Attention Time Sharing)检测器

Euro NCAP定义:
- 30秒窗口内累计视线偏离≥10秒
- 每次视线偏离<2秒
- 不返回道路≥2秒
- 仅非驾驶相关区域
"""

def __init__(self, window_sec: float = 30.0, threshold_sec: float = 10.0):
self.window_sec = window_sec
self.threshold_sec = threshold_sec
self.fps = 30

self.nondriving_related_zones = [
"infotainment", "phone", "passenger_seat",
"rear_seat", "floor", "other"
]

def detect_vats_events(
self, gaze_data: np.ndarray, zone_data: List[str]
) -> List[dict]:
"""
检测短分心事件

Args:
gaze_data: 视线方向数据
zone_data: 注视区域标签

Returns:
vats_events: [
{
"start_frame": int,
"end_frame": int,
"total_away_sec": float,
"glance_count": int,
},
...
]
"""
window_frames = int(self.window_sec * self.fps)
threshold_frames = int(self.threshold_sec * self.fps)

vats_events = []

# 滑动窗口检测
for i in range(0, len(gaze_data) - window_frames, window_frames // 2):
window_gaze = gaze_data[i:i+window_frames]
window_zones = zone_data[i:i+window_frames]

# 计算累计偏离时间
away_time = self._calculate_away_time(window_gaze, window_zones)

if away_time >= threshold_frames:
vats_events.append({
"start_frame": i,
"end_frame": i + window_frames,
"total_away_sec": away_time / self.fps,
"glance_count": self._count_glances(window_gaze),
})

return vats_events

def _calculate_away_time(
self, gaze_data: np.ndarray, zone_data: List[str]
) -> int:
"""计算非驾驶相关区域累计偏离时间"""
away_frames = 0

for i, (gaze, zone) in enumerate(zip(gaze_data, zone_data)):
# 检查是否为非驾驶相关区域
if zone in self.nondriving_related_zones:
# 检查是否偏离道路
yaw, pitch = gaze[1], gaze[0]
on_road = (
(yaw >= -15) & (yaw <= 15) &
(pitch >= -10) & (pitch <= 5)
)

if not on_road:
away_frames += 1

return away_frames

def _count_glances(self, gaze_data: np.ndarray) -> int:
"""统计偏离次数"""
yaw = gaze_data[:, 1]
pitch = gaze_data[:, 0]

on_road = (
(yaw >= -15) & (yaw <= 15) &
(pitch >= -10) & (pitch <= 5)
)

# 找连续偏离区域
changes = np.diff(on_road.astype(int))
glance_count = np.sum(changes == -1) # 离开道路的次数

return glance_count


# 实际测试
if __name__ == "__main__":
vats_detector = VATSDetector(window_sec=30.0, threshold_sec=10.0)

# 模拟数据
np.random.seed(42)
gaze_data = np.random.randn(18000, 3) * 10
zones = np.random.choice(
["infotainment", "phone", "rear_mirror"],
size=18000,
p=[0.4, 0.4, 0.2]
)

vats_events = vats_detector.detect_vats_events(gaze_data, zones.tolist())

print(f"检测到 {len(vats_events)} 个短分心事件")
for i, event in enumerate(vats_events[:5]):
print(f" 事件 {i+1}: 累计偏离 {event['total_away_sec']:.1f}秒, "
f"偏离次数: {event['glance_count']}")

三、研究结果

3.1 分心事件发生频率

核心发现:

1
2
3
4
5
6
7
8
9
10
11
12
DISTRACTION_FREQUENCY = {
"long_distraction_LGA": {
"frequency": "每1.1小时一次",
"interval_hours": 1.1,
"events_per_100km": 0.9, # 假设平均车速80km/h
},
"short_distraction_VATS": {
"frequency": "每4.8小时一次",
"interval_hours": 4.8,
"events_per_100km": 2.1, # 假设平均车速80km/h
},
}

对比分析:

分心类型 发生频率 每次持续时间 累计时间占比
长分心(LGA) 每1.1小时 3-10秒 约1.5%
短分心(VATS) 每4.8小时 累计10秒/30秒 约0.7%
总计 - - 约2.2%

3.2 驾驶相关 vs 非驾驶相关分布

长分心(LGA)分布:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
LGA_DISTRIBUTION = {
"driving_related": {
"proportion": 0.35, # 35%
"zones": {
"rear_mirror": 0.20,
"side_mirrors": 0.10,
"instrument_cluster": 0.05,
},
"avg_duration": 3.5, # 秒
"crash_risk_multiplier": 1.0, # 无明显增加
},
"nondriving_related": {
"proportion": 0.65, # 65%
"zones": {
"infotainment": 0.25,
"phone": 0.20,
"passenger": 0.10,
"other": 0.10,
},
"avg_duration": 4.2, # 秒
"crash_risk_multiplier": 2.0, # >2秒时翻倍
},
}

关键发现:

“Glances to nondriving-related regions of longer than 2 seconds double the risk of a crash.”

Euro NCAP阈值设计依据:

  • 非驾驶相关: ≥2秒即有风险,Euro NCAP设为≥3秒
  • 驾驶相关: 风险较低,甚至可能有保护作用

3.3 蜥蜴式 vs 猫头鹰式注视

注视策略分类:

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
GLANCE_STRATEGIES = {
"lizard_glance": {
"name": "蜥蜴式注视",
"definition": "仅眼球运动,头部不动",
"characteristics": [
"头部角度变化<5°",
"眼球运动为主",
"常见于手机使用",
],
"proportion": 0.60, # 60%
"detection_difficulty": "高(需要眼动追踪)",
"safety_implication": "高风险(手机使用)",
},
"owl_glance": {
"name": "猫头鹰式注视",
"definition": "头部转动为主,眼球跟随",
"characteristics": [
"头部角度变化>15°",
"头部运动为主",
"常见于查看后视镜/乘客",
],
"proportion": 0.40, # 40%
"detection_difficulty": "低(仅需头部追踪)",
"safety_implication": "中风险",
},
}

对DSM系统设计的影响:

“Drivers typically utilise lizard glance strategies (eye movement only) when engaging in long distraction.”

关键发现:

  1. 蜥蜴式注视占60%,主要与手机使用相关
  2. 仅追踪头部角度的系统会漏检60%的长分心事件
  3. 需要同时追踪头部和眼球才能全面检测

四、对DSM系统设计的影响

4.1 误报率分析

场景:无法区分驾驶相关/非驾驶相关区域

1
2
3
4
5
6
7
8
9
10
11
12
13
FALSE_POSITIVE_IMPACT = {
"scenario": "DSM系统无法区分后视镜和中控屏",
"threshold": "统一使用3秒阈值",
"impact": {
"driving_related_alerts": "增加约3倍",
"user_experience": "严重下降(频繁误报)",
"driver_acceptance": "降低",
},
"example": {
"original_alert_rate": "每1.1小时1次",
"with_driving_related": "每0.7小时1次(+57%)",
},
}

解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SOLUTION_HIERARCHY = [
{
"level": "最优",
"solution": "高精度注视区域分类(ROI识别)",
"capability": "区分所有注视区域",
"cost": "高",
"accuracy": 0.95,
},
{
"level": "次优",
"solution": "头部+眼球双追踪",
"capability": "区分蜥蜴式/猫头鹰式",
"cost": "中",
"accuracy": 0.85,
},
{
"level": "最低",
"solution": "仅头部追踪",
"capability": "检测猫头鹰式注视",
"cost": "低",
"accuracy": 0.40, # 漏检60%
},
]

4.2 Euro NCAP评分影响

Euro NCAP DSM分心检测评分标准:

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
EURONCAP_SCORING = {
"long_distraction": {
"lizard_glance_detection": {
"points": 2.0,
"requirement": "检测蜥蜴式注视(仅眼动)",
"technology": "眼动追踪",
},
"owl_glance_detection": {
"points": 1.0,
"requirement": "检测猫头鹰式注视(头部转动)",
"technology": "头部追踪",
},
"zone_classification": {
"points": 1.0,
"requirement": "区分驾驶相关/非驾驶相关区域",
"technology": "ROI分类",
},
},
"short_distraction_VATS": {
"detection": {
"points": 2.0,
"requirement": "检测30秒窗口内累计偏离≥10秒",
"technology": "滑动窗口算法",
},
},
"total_points": 6.0, # 满分
}

不同技术方案的得分:

技术方案 蜥蜴式检测 猫头鹰式检测 区域分类 VATS检测 总分
RGB-IR + 眼动追踪 2.0 1.0 1.0 2.0 6.0
RGB + 头部追踪 0 1.0 0 2.0 3.0 ⚠️
仅驾驶员检测 0 0 0 0 0

4.3 用户体验设计建议

警告策略优化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
WARNING_STRATEGY = {
"tier_1_soft_warning": {
"trigger": "LGA 3-5秒 或 VATS累计10秒",
"action": "视觉提示(仪表盘图标闪烁)",
"frequency": "每1.1小时(LGA)",
"acceptance": "高",
},
"tier_2_audible_warning": {
"trigger": "LGA >5秒 或 重复事件",
"action": "声音警告 + 语音提示",
"frequency": "每3小时",
"acceptance": "中",
},
"tier_3_haptic_warning": {
"trigger": "LGA >8秒 或 危险场景",
"action": "座椅震动 + 声音警告",
"frequency": "每10小时",
"acceptance": "低",
},
}

自适应阈值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ADAPTIVE_THRESHOLD = {
"highway": {
"LGA_threshold": 2.5, # 秒(高速风险更高)
"VATS_threshold": 8.0, # 秒
},
"city": {
"LGA_threshold": 3.5, # 秒(城市允许更多查看)
"VATS_threshold": 12.0, # 秒
},
"parking": {
"LGA_threshold": 5.0, # 秒(低速场景宽松)
"VATS_threshold": 15.0, # 秒
},
}

五、IMS开发建议

5.1 硬件选型

推荐配置:

组件 型号 参数 价格 说明
摄像头 STURDeCAM57 5MP RGB-IR, 全局快门 $15 眼动追踪必须
处理器 QCS8255 Hexagon NPU, 26 TOPS $25 实时眼动分析
IR补光 SFH 4740 940nm, 120mW/sr $5 夜间眼动追踪
总计 - - $45 Euro NCAP满分方案

最低配置(仅头部追踪):

组件 型号 价格 说明
摄像头 OV2311 $8 仅头部检测
处理器 TDA4VM $15 边缘AI
总计 - $23 Euro NCAP 3分 ⚠️

5.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
ALGORITHM_PRIORITY = [
{
"priority": 1,
"task": "眼球中心检测 + 视线方向估计",
"technology": "PnP + 3D眼球模型",
"effort": "2个月",
"Euro NCAP_points": 2.0,
},
{
"priority": 2,
"task": "注视区域分类(ROI)",
"technology": "CNN分类器",
"effort": "1个月",
"Euro NCAP_points": 1.0,
},
{
"priority": 3,
"task": "头部姿态估计",
"technology": "6DoF头部模型",
"effort": "1个月",
"Euro NCAP_points": 1.0,
},
{
"priority": 4,
"task": "VATS滑动窗口检测",
"technology": "环形缓冲区 + 阈值检测",
"effort": "2周",
"Euro NCAP_points": 2.0,
},
]

5.3 测试场景设计

Euro NCAP DSM测试场景:

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
EURONCAP_TEST_SCENARIOS = {
"D-01": {
"name": "长分心 - 手机使用",
"type": "LGA",
"duration": "3.5秒",
"glance_type": "lizard",
"zone": "phone",
"expected": "一级警告",
"max_delay": "3秒",
},
"D-02": {
"name": "长分心 - 中控屏操作",
"type": "LGA",
"duration": "4.0秒",
"glance_type": "owl",
"zone": "infotainment",
"expected": "一级警告",
"max_delay": "3秒",
},
"D-03": {
"name": "长分心 - 后视镜检查",
"type": "LGA",
"duration": "3.5秒",
"glance_type": "owl",
"zone": "rear_mirror",
"expected": "无警告(驾驶相关)",
"max_delay": "-",
},
"D-04": {
"name": "短分心 - 手机打字",
"type": "VATS",
"duration": "累计10秒/30秒",
"glance_type": "lizard",
"zone": "phone",
"expected": "一级警告",
"max_delay": "5秒",
},
}

六、总结

6.1 关键发现

  1. 长分心每1.1小时发生一次,是DSM系统的主要警告来源
  2. 蜥蜴式注视占60%,仅头部追踪会漏检大部分长分心
  3. 无法区分驾驶相关/非驾驶相关区域会导致误报率增加57%
  4. 眼动追踪是Euro NCAP满分的前提

6.2 技术路线建议

需求 技术方案 Euro NCAP得分 成本
Euro NCAP 5星 RGB-IR + 眼动追踪 + ROI分类 6.0/6.0 ✅ $45
成本优化 RGB + 头部追踪 3.0/6.0 ⚠️ $23
最优方案 RGB-IR + 头部+眼球双追踪 + ROI 6.0/6.0 ✅ $40

6.3 IMS开发启示

  • 优先级1: 实现眼动追踪(蜥蜴式检测)
  • 优先级2: 实现注视区域分类(误报率控制)
  • 优先级3: 实现自适应阈值(用户体验优化)
  • 优先级4: 实现VATS检测(短分心管理)

参考文档

  1. Seeing Machines Lite Paper: European NCAP Driver State Monitoring Protocols: Prevalence of Distraction in Naturalistic Driving
  2. Human Factors Journal: Mulhall et al. (2023), DOI: 10.1177/00187208231194543
  3. Euro NCAP DSM Protocol v1.1: Driver State Monitoring System Test and Assessment Protocol

发布时间: 2026-06-23
标签: Euro NCAP, 驾驶员分心, 自然驾驶, DSM, Seeing Machines
分类: 论文解读, 行为分析


Euro NCAP分心检测自然驾驶研究:长分心每1.1小时一次,短分心每4.8小时一次
https://dapalm.com/2026/06/23/2026-06-23-euro-ncap-distraction-naturalistic-driving-prevalence/
作者
Mars
发布于
2026年6月23日
许可协议