合成数据与Euro NCAP测试:Anyverse InCabin仿真平台深度解析

引言:真实数据不够用

Euro NCAP 2026测试场景数量爆炸

  • 分心场景:100+种
  • 疲劳场景:50+种
  • CPD场景:30+种
  • OOP场景:20+种

真实数据收集困难

  • 成本高昂(每场景$10,000+)
  • 隐私合规问题
  • 边缘场景难以捕捉
  • 多样性不足

解决方案:合成数据


一、合成数据价值

1.1 成本对比

数据来源 成本/场景 时间 多样性
真实采集 $10,000+ 数月 有限
合成数据 $100 数天 无限

1.2 覆盖范围

场景类型 真实数据 合成数据
常规场景 ✅ 可采集 ✅ 可生成
边缘场景 ❌ 难采集 ✅ 可生成
危险场景 ❌ 不可采集 ✅ 可生成
隐私场景 ❌ 受限 ✅ 无隐私问题

1.3 Anyverse与Euro NCAP合作

2025年10月,Anyverse与Euro NCAP开始合作研究合成数据测试

  • 探索合成数据用于IM系统评估
  • 开发基于仿真的测试流程
  • 降低OEM测试成本

二、Anyverse InCabin平台

2.1 核心能力

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
Anyverse InCabin

┌─────────────────────────────────┐
│ 舱内场景生成 │
│ ├── 多车型座舱 │
│ ├── 多光照条件 │
│ ├── 多天气环境 │
│ └── 多乘员配置 │
└─────────────────────────────────┘

┌─────────────────────────────────┐
│ 乘员行为模拟 │
│ ├── 分心行为 │
│ ├── 疲劳状态 │
│ ├── 儿童活动 │
│ └── 姿态异常 │
└─────────────────────────────────┘

┌─────────────────────────────────┐
│ 传感器仿真 │
│ ├── RGB摄像头 │
│ ├── IR红外摄像头 │
│ ├── 深度摄像头 │
│ └── 雷达 │
└─────────────────────────────────┘

高质量标注数据

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
import anyverse

class AnyverseDataGenerator:
"""
Anyverse数据生成器
"""
def __init__(self):
self.engine = anyverse.Engine()

def generate_dms_dataset(self, scenario, num_samples=1000):
"""
生成DMS数据集
"""
dataset = []

for i in range(num_samples):
# 1. 创建场景
scene = self.create_scene(scenario)

# 2. 配置乘员
occupant = self.configure_occupant(
age=scenario['age'],
gender=scenario['gender'],
ethnicity=scenario['ethnicity'],
pose=scenario['pose']
)

# 3. 配置行为
behavior = self.configure_behavior(
distraction_type=scenario['distraction_type'],
duration=scenario['duration']
)

# 4. 配置传感器
sensors = self.configure_sensors(
rgb=scenario.get('rgb', True),
ir=scenario.get('ir', True),
depth=scenario.get('depth', False)
)

# 5. 渲染
frame = self.engine.render(scene, occupant, behavior, sensors)

# 6. 自动标注
annotations = self.auto_annotate(frame, behavior)

dataset.append({
'frame': frame,
'annotations': annotations
})

return dataset

def create_scene(self, scenario):
"""
创建场景
"""
scene = anyverse.Scene()

# 设置车型
scene.set_vehicle(scenario['vehicle_type'])

# 设置光照
scene.set_lighting(
type=scenario['lighting'], # day, night, sunset
intensity=scenario.get('light_intensity', 1.0)
)

# 设置天气
scene.set_weather(scenario.get('weather', 'clear'))

return scene

def configure_behavior(self, distraction_type, duration):
"""
配置行为
"""
behavior = anyverse.Behavior()

if distraction_type == 'phone_use':
behavior.set_phone_use(
hand='right',
duration=duration,
gaze_target='phone'
)

elif distraction_type == 'radio_tuning':
behavior.set_radio_tuning(
duration=duration,
gaze_target='center_console'
)

elif distraction_type == 'side_window':
behavior.set_side_window_gaze(
side='left',
duration=duration
)

elif distraction_type == 'fatigue':
behavior.set_fatigue(
level='severe',
blink_rate=5, # 次/分
perclos=0.8
)

return behavior

2.3 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
class EuroNCAPScenarioGenerator:
"""
Euro NCAP场景生成器
"""
def __init__(self):
self.anyverse = AnyverseDataGenerator()

# Euro NCAP 2026要求的所有场景
self.scenarios = {
# 分心场景
'distraction': [
{'type': 'phone_use', 'duration': 3},
{'type': 'radio_tuning', 'duration': 2},
{'type': 'side_window', 'duration': 2},
{'type': 'reading', 'duration': 4},
{'type': 'eating', 'duration': 3}
],

# 疲劳场景
'fatigue': [
{'level': 'mild', 'perclos': 0.15},
{'level': 'moderate', 'perclos': 0.3},
{'level': 'severe', 'perclos': 0.5}
],

# CPD场景
'cpd': [
{'age': 1, 'location': 'rear_left'},
{'age': 3, 'location': 'rear_right'},
{'age': 6, 'location': 'footwell'},
{'age': 0, 'location': 'child_seat'}
],

# OOP场景
'oop': [
{'pose': 'forward', 'angle': 30},
{'pose': 'forward', 'angle': 45},
{'pose': 'side', 'angle': 45},
{'pose': 'reclined', 'angle': 60}
]
}

def generate_full_dataset(self):
"""
生成完整数据集
"""
full_dataset = {}

for category, scenarios in self.scenarios.items():
category_data = []

for scenario in scenarios:
# 为每个场景生成多角度数据
for angle in [-15, 0, 15]:
for lighting in ['day', 'night', 'sunset']:
scenario['camera_angle'] = angle
scenario['lighting'] = lighting

data = self.anyverse.generate_dms_dataset(
scenario, num_samples=100
)
category_data.extend(data)

full_dataset[category] = category_data

return full_dataset

三、边缘场景生成

3.1 边缘场景类型

场景 描述 难度
极端光照 逆光、全黑、频闪
遮挡 墨镜、口罩、帽子
多样人种 不同肤色、面部特征
极端姿态 躺倒、趴着、扭头
儿童行为 哭闹、睡着、玩闹

3.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
class EdgeCaseGenerator:
"""
边缘场景生成器
"""
def __init__(self):
self.anyverse = AnyverseDataGenerator()

def generate_sunglasses_cases(self):
"""
生成墨镜场景
"""
sunglasses_types = [
'normal_sunglasses',
'mirror_sunglasses',
'gradient_sunglasses',
'sports_sunglasses'
]

dataset = []

for sg_type in sunglasses_types:
for lighting in ['bright_sun', 'cloudy', 'night']:
scenario = {
'distraction_type': 'phone_use',
'duration': 3,
'sunglasses': sg_type,
'lighting': lighting
}

data = self.anyverse.generate_dms_dataset(scenario, 200)
dataset.extend(data)

return dataset

def generate_mask_cases(self):
"""
生成口罩场景
"""
mask_types = [
'surgical_mask',
'n95_mask',
'cloth_mask',
'half_mask' # 只遮住口部
]

dataset = []

for mask_type in mask_types:
scenario = {
'distraction_type': 'phone_use',
'duration': 3,
'mask': mask_type
}

data = self.anyverse.generate_dms_dataset(scenario, 200)
dataset.extend(data)

return dataset

def generate_diversity_cases(self):
"""
生成多样性场景
"""
ethnicities = ['caucasian', 'asian', 'african', 'hispanic', 'middle_eastern']
ages = [20, 30, 40, 50, 60, 70]
genders = ['male', 'female']

dataset = []

for ethnicity in ethnicities:
for age in ages:
for gender in genders:
scenario = {
'distraction_type': 'phone_use',
'duration': 3,
'ethnicity': ethnicity,
'age': age,
'gender': gender
}

data = self.anyverse.generate_dms_dataset(scenario, 50)
dataset.extend(data)

return dataset

四、Devant + Seeing Machines合作

4.1 合作背景

2025年,Devant与Seeing Machines合作

  • Devant提供合成数据平台
  • Seeing Machines提供DMS算法
  • 共同提升DMS性能

4.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
class DevantSeeingMachinesIntegration:
"""
Devant + Seeing Machines整合
"""
def __init__(self):
# Devant合成数据平台
self.devant = DevantPlatform()

# Seeing Machines DMS算法
self.dms = SeeingMachinesDMS()

def train_and_validate(self):
"""
训练和验证
"""
# 1. 生成合成数据
synthetic_data = self.devant.generate_dms_data(
scenarios='all',
samples_per_scenario=1000
)

# 2. 训练DMS模型
self.dms.train(synthetic_data)

# 3. 验证性能
validation_data = self.devant.generate_validation_data()
metrics = self.dms.validate(validation_data)

return metrics

4.3 性能提升

指标 无合成数据 有合成数据 提升
分心检测准确率 85% 95% +10%
疲劳检测准确率 80% 92% +12%
边缘场景覆盖 60% 95% +35%
训练成本 $100k $20k -80%

五、传感器仿真

5.1 多模态传感器

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
class MultiModalSensorSimulator:
"""
多模态传感器仿真
"""
def __init__(self):
self.sensors = {
'rgb': RGBSensorSimulator(),
'ir': IRSensorSimulator(),
'depth': DepthSensorSimulator(),
'radar': RadarSimulator()
}

def simulate_all(self, scene):
"""
仿真所有传感器
"""
outputs = {}

# RGB摄像头
outputs['rgb'] = self.sensors['rgb'].render(scene)

# IR摄像头(850nm)
outputs['ir'] = self.sensors['ir'].render(
scene,
wavelength=850
)

# 深度摄像头
outputs['depth'] = self.sensors['depth'].render(scene)

# 60GHz雷达
outputs['radar'] = self.sensors['radar'].simulate(
scene,
frequency=60e9
)

return outputs

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
class PhysicsBasedSimulator:
"""
物理仿真
"""
def __init__(self):
self.ir_model = IRLightingModel()
self.skin_model = SkinReflectanceModel()

def simulate_ir_reflection(self, face, ir_light):
"""
仿真IR反射
"""
# 皮肤反射率
skin_reflectance = self.skin_model.compute(
wavelength=ir_light.wavelength,
melanin=face.melanin,
moisture=face.moisture
)

# 眼睛反射(虹膜、巩膜)
eye_reflectance = self.compute_eye_reflection(face.eyes, ir_light)

# 综合反射
total_reflection = self.integrate_reflections(
skin_reflectance,
eye_reflectance
)

return total_reflection

六、总结

6.1 合成数据价值

维度 价值
成本 降低80%+
时间 缩短90%+
覆盖 边缘场景全覆盖
隐私 无隐私问题

6.2 实施建议

阶段 策略
原型验证 使用公开数据+少量合成数据
功能开发 合成数据为主+真实数据验证
量产准备 真实数据+合成数据混合训练

6.3 工具选择

平台 适用场景
Anyverse Euro NCAP对齐测试
Devant 复杂行为仿真
Unity 自定义场景开发
CARLA 开源仿真平台

参考文献

  1. Anyverse. “In-Cabin Monitoring Synthetic Data.” 2025.
  2. Devant. “Synthetic Data for DMS/OMS.” 2025.
  3. Euro NCAP. “Synthetic Data Testing Research.” 2025.

本文是IMS数据合成系列文章之一,上一篇:DMS与ADAS协同


合成数据与Euro NCAP测试:Anyverse InCabin仿真平台深度解析
https://dapalm.com/2026/03/13/2026-03-13-合成数据与Euro-NCAP测试-Anyverse-InCabin仿真平台深度解析/
作者
Mars
发布于
2026年3月13日
许可协议