Euro NCAP TB-036 DSM Dossier 指南详解:OEM 认证准备手册

发布时间: 2026-04-14
关键词: TB-036、DSM Dossier、Euro NCAP、OEM 认证、技术文档


文档概览

Euro NCAP TB-036 DSM Dossier Guidance 是 OEM 提交 DSM 系统认证所需技术文档的编写指南。最新版本 v1.0.1 于 2025 年发布。

Dossier 的作用

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
┌─────────────────────────────────────────────────────┐
│ DSM 认证流程 │
├─────────────────────────────────────────────────────┤
│ │
│ OEM 准备 │
│ ────────── │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ DSM Dossier │ ◄── TB-036 指导如何编写 │
│ │ (技术文档) │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ Euro NCAP 审核 │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ Spot Testing │ ◄── TB-039 指导测试流程 │
│ │ (现场测试) │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 评分公布 │ │
│ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────┘

Dossier 必备内容

1. 系统概述

内容 要求
系统名称 DSM 系统官方名称
传感器配置 摄像头类型、位置、分辨率、帧率
处理单元 ECU/SoC 型号、算力、内存
软件版本 固件版本、算法版本
功能范围 支持的检测场景(分心/疲劳/无响应)

2. 传感器详细规格

1
2
3
4
5
6
7
8
9
10
11
12
## 示例:传感器规格表

| 参数 | 值 |
|-----|---|
| 摄像头类型 | RGB-IR |
| 分辨率 | 1280 × 720 |
| 帧率 | 30 fps |
| 视场角 (FoV) | 60° × 40° |
| 安装位置 | 方向盘柱左侧 |
| 工作温度 | -40°C ~ +85°C |
| 红外波长 | 940 nm |
| 红外功率 | < 100 mW |

3. 算法描述

内容 要求
人脸检测 算法类型、准确率、召回率
眼动追踪 视线估计方法、精度(角度误差)
疲劳检测 PERCLOS 阈值、其他指标
分心检测 视线偏离阈值、手机检测方法
模型架构 CNN/Transformer、参数量、计算量

4. 内部测试报告

测试项 要求
数据集描述 规模、多样性、采集场景
测试方法 测试协议、评估指标
结果汇总 准确率、召回率、误报率
边缘情况 太阳镜、口罩、低光等表现

5. 警告逻辑

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
┌─────────────────────────────────────────────────────┐
│ 警告逻辑示例 │
├─────────────────────────────────────────────────────┤
│ │
│ 一级警告 (Level 1 Warning) │
│ ───────────────────────── │
│ 触发条件: │
│ • 视线偏离道路 > 3 秒 │
│ • PERCLOS ≥ 20% 持续 5 秒 │
│ │
│ 警告方式: │
│ • 视觉:仪表盘图标闪烁 │
│ • 听觉:单次蜂鸣 │
│ │
│ 二级警告 (Level 2 Warning) │
│ ───────────────────────── │
│ 触发条件: │
│ • 一级警告后 10 秒内无响应 │
│ • PERCLOS ≥ 40% │
│ │
│ 警告方式: │
│ • 视觉:仪表盘图标常亮 + 文字提示 │
│ • 听觉:持续蜂鸣 │
│ • 触觉:方向盘振动(可选) │
│ │
│ ADAS 干预 │
│ ───────────────────────── │
│ 触发条件: │
│ • 二级警告后 10 秒无响应 │
│ • 车道偏离风险 │
│ │
│ 干预措施: │
│ • 车道保持辅助 │
│ • 减速停车 │
│ • 紧急呼叫 │
│ │
└─────────────────────────────────────────────────────┘

关键技术要求

检测性能要求

检测项 指标要求
人脸检测率 > 95% (正常光照)
眼动追踪精度 < 5° 角度误差
分心检测延迟 < 3 秒
疲劳检测延迟 PERCLOS 阈值触发 < 5 秒
误报率 < 2% (正常驾驶)

环境适应性

环境因素 要求
光照范围 0.1 lux ~ 100,000 lux
温度范围 -40°C ~ +85°C
太阳镜兼容 透过率 > 10% 的太阳镜可检测
口罩兼容 部分遮挡下仍可工作
抖动容忍 车辆振动不影响检测

降级策略

当 DSM 系统性能下降时:

场景 要求
传感器遮挡 10 秒内通知驾驶员
极端光照 降级模式 + 通知
系统故障 仪表盘故障灯亮起

代码示例:Dossier 生成工具

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
import json
from datetime import datetime
from dataclasses import dataclass, asdict
from typing import List, Optional

@dataclass
class SensorSpec:
"""传感器规格"""
camera_type: str
resolution: str
frame_rate: int
fov_horizontal: float
fov_vertical: float
position: str
ir_wavelength: Optional[int] = None
ir_power: Optional[float] = None

@dataclass
class AlgorithmSpec:
"""算法规格"""
name: str
model_type: str
parameters: int
flops: float
accuracy: float
latency_ms: float

@dataclass
class TestResult:
"""测试结果"""
test_name: str
dataset: str
accuracy: float
recall: float
false_positive_rate: float
notes: Optional[str] = None

class DSMDossierGenerator:
"""DSM Dossier 生成器"""

def __init__(self, oem_name: str, system_name: str):
self.oem_name = oem_name
self.system_name = system_name
self.sensors: List[SensorSpec] = []
self.algorithms: List[AlgorithmSpec] = []
self.test_results: List[TestResult] = []
self.warning_logic = {}

def add_sensor(self, sensor: SensorSpec):
"""添加传感器"""
self.sensors.append(sensor)

def add_algorithm(self, algo: AlgorithmSpec):
"""添加算法"""
self.algorithms.append(algo)

def add_test_result(self, result: TestResult):
"""添加测试结果"""
self.test_results.append(result)

def set_warning_logic(self, logic: dict):
"""设置警告逻辑"""
self.warning_logic = logic

def generate_markdown(self) -> str:
"""生成 Markdown Dossier"""
md = f"""# DSM Dossier

## 1. 基本信息

| 项目 | 内容 |
|-----|------|
| **OEM** | {self.oem_name} |
| **系统名称** | {self.system_name} |
| **文档版本** | 1.0 |
| **日期** | {datetime.now().strftime('%Y-%m-%d')} |

## 2. 传感器配置

本系统配备 {len(self.sensors)} 个传感器:

"""
for i, sensor in enumerate(self.sensors, 1):
md += f"""### 传感器 {i}

| 参数 | 值 |
|-----|---|
| 类型 | {sensor.camera_type} |
| 分辨率 | {sensor.resolution} |
| 帧率 | {sensor.frame_rate} fps |
| 视场角 | {sensor.fov_horizontal}° × {sensor.fov_vertical}° |
| 安装位置 | {sensor.position} |
"""
if sensor.ir_wavelength:
md += f"| 红外波长 | {sensor.ir_wavelength} nm |\n"
if sensor.ir_power:
md += f"| 红外功率 | {sensor.ir_power} mW |\n"
md += "\n"

md += """## 3. 算法描述

"""
for algo in self.algorithms:
md += f"""### {algo.name}

| 参数 | 值 |
|-----|---|
| 模型类型 | {algo.model_type} |
| 参数量 | {algo.parameters:,} |
| 计算量 | {algo.flops:.1f} GFLOPS |
| 准确率 | {algo.accuracy:.1%} |
| 推理延迟 | {algo.latency_ms:.1f} ms |

"""

md += """## 4. 测试结果

| 测试项 | 数据集 | 准确率 | 召回率 | 误报率 | 备注 |
|-------|--------|--------|--------|--------|------|
"""
for result in self.test_results:
md += f"| {result.test_name} | {result.dataset} | {result.accuracy:.1%} | {result.recall:.1%} | {result.false_positive_rate:.1%} | {result.notes or '-'} |\n"

md += f"""
## 5. 警告逻辑

```json
{json.dumps(self.warning_logic, indent=2)}

6. 合规声明

本系统符合以下标准:

  • Euro NCAP TB-036 DSM Dossier Guidance v1.0.1
  • Euro NCAP TB-039 DSM Spot Testing Guidance v1.1
  • ISO 26262 功能安全(ASIL-B)

本 Dossier 由 {self.oem_name} 提供,用于 Euro NCAP DSM 认证。
“””
return md

def generate_json(self) -> dict:
    """生成 JSON Dossier"""
    return {
        "oem": self.oem_name,
        "system_name": self.system_name,
        "version": "1.0",
        "date": datetime.now().isoformat(),
        "sensors": [asdict(s) for s in self.sensors],
        "algorithms": [asdict(a) for a in self.algorithms],
        "test_results": [asdict(t) for t in self.test_results],
        "warning_logic": self.warning_logic
    }

使用示例

if name == ‘main‘:
generator = DSMDossierGenerator(“Example OEM”, “SafetyVision DMS v2.0”)

# 添加传感器
generator.add_sensor(SensorSpec(
    camera_type="RGB-IR",
    resolution="1280x720",
    frame_rate=30,
    fov_horizontal=60.0,
    fov_vertical=40.0,
    position="Steering column left",
    ir_wavelength=940,
    ir_power=80.0
))

# 添加算法
generator.add_algorithm(AlgorithmSpec(
    name="Face Detection",
    model_type="MobileNetV3-SSD",
    parameters=1200000,
    flops=0.3,
    accuracy=0.97,
    latency_ms=15.0
))

generator.add_algorithm(AlgorithmSpec(
    name="Gaze Estimation",
    model_type="EfficientNet-Lite",
    parameters=3500000,
    flops=0.8,
    accuracy=0.92,
    latency_ms=25.0
))

# 添加测试结果
generator.add_test_result(TestResult(
    test_name="Distraction Detection",
    dataset="DMD (Distracted Driver)",
    accuracy=0.94,
    recall=0.92,
    false_positive_rate=0.015,
    notes="Includes phone use, eating, drinking"
))

# 设置警告逻辑
generator.set_warning_logic({
    "level_1": {
        "trigger": "gaze_off_road > 3s",
        "warning": ["visual_icon", "single_beep"]
    },
    "level_2": {
        "trigger": "no_response_after_10s OR perclos > 40%",
        "warning": ["visual_icon", "continuous_beep", "steering_vibration"]
    },
    "adas_intervention": {
        "trigger": "no_response_after_level_2 OR lane_departure_risk",
        "action": ["lane_keeping", "emergency_stop", "emergency_call"]
    }
})

# 生成 Markdown
markdown = generator.generate_markdown()
with open('dsm_dossier.md', 'w') as f:
    f.write(markdown)

print("Dossier generated: dsm_dossier.md")

---

## SD-202 Driver Monitoring Test Procedure v1.1

### 关键测试要求

| 要求 | 规范 |
|-----|------|
| **视频采样率** | ≥ 25 Hz |
| **测试场地** | 均匀坚实铺装路面 |
| **车道标记** | 允许存在(用于 DSM 测试)|
| **提交时间** | 测试前至少 2 个月提交 Dossier |

### 测试场景清单

| 场景类别 | 测试项 |
|---------|-------|
| **分心检测** | D-01 ~ D-05 |
| **疲劳检测** | F-01 ~ F-03 |
| **无响应检测** | U-01 ~ U-03 |
| **环境适应** | 日间/夜间/逆光 |
| **遮挡场景** | 太阳镜/口罩/帽子 |

---

## 常见 Dossier 问题

### 问题 1:传感器规格不完整

| 缺失项 | 后果 |
|-------|------|
| 红外波长 | 无法评估太阳镜兼容性 |
| 视场角 | 无法评估检测范围 |
| 安装位置 | 无法评估遮挡风险 |

### 问题 2:算法描述过于笼统

| 错误示例 | 正确示例 |
|---------|---------|
| "使用深度学习检测疲劳" | "使用 MobileNetV3 提取特征 + LSTM 时序建模,PERCLOS 阈值 30%,延迟 < 2 秒" |

### 问题 3:测试结果缺乏多样性

| 缺失项 | 后果 |
|-------|------|
| 单一数据集 | 无法证明泛化能力 |
| 无边缘情况 | 无法评估鲁棒性 |
| 无误报分析 | 无法评估实际可用性 |

---

## 准备时间线

| 阶段 | 任务 | 时间 |
|-----|------|------|
| **M1-M3** | 收集传感器规格、算法文档 | 3 月 |
| **M3-M6** | 内部测试、生成测试报告 | 3 月 |
| **M6-M9** | 编写 Dossier、内部审核 | 3 月 |
| **M9-M12** | 提交 Euro NCAP、反馈修改 | 3 月 |
| **M12+** | Spot Testing 准备 | - |

---

## 参考资源

- **TB-036 DSM Dossier Guidance v1.0.1**:https://cdn.euroncap.com/media/77312/tb-036-dsm-dossier-guidance-v101.pdf
- **SD-202 Driver Monitoring Test Procedure v1.1**:https://www.euroncap.com/media/91719/sd-202-driver-monitoring-test-procedure-v11.pdf
- **Euro NCAP 2026 Protocols**:https://www.euroncap.com/en/for-engineers/protocols/2026-protocols/