Euro NCAP 2026 CPD 强制要求详解:儿童遗留检测技术路线与实施指南

法规背景

Euro NCAP 2026 协议重大变化:

变化项 2025年前 2026年起
CPD 状态 可选(奖励分) 强制要求
分值 最高 4 分 最高 5 分
检测方式 间接方法可接受 仅限直接感知
覆盖范围 单排 双排座椅
警告时机 锁车后 锁车即刻警告

CPD 核心技术要求

1. 直接感知要求(Direct Sensing)

Euro NCAP 明确拒绝间接方法:

❌ 间接方法(不合规) ✅ 直接感知(合规)
车门开关状态检测 60GHz 雷达生命体征检测
座椅压力传感器 摄像头视觉识别
超声波占用检测 热成像红外检测
蓝牙手机配对推断 毫米波雷达呼吸检测

直接感知的核心指标:

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
# CPD 直接感知技术要求
class CPDRequirements:
"""Euro NCAP 2026 CPD 技术要求"""

# 检测对象
DETECTION_TARGETS = [
"儿童(包括婴儿)",
"宠物",
"被遗留在车内的乘员"
]

# 检测范围
COVERAGE = {
"前排": "必须覆盖",
"后排": "必须覆盖(双排)",
"行李舱": "可选"
}

# 生命体征检测
VITAL_SIGNS = {
"呼吸频率": "≥ 6 次/分钟",
"心跳检测": "可选(加分项)",
"微动检测": "必须支持"
}

# 检测精度
ACCURACY = {
"检测率": "≥ 95%",
"误报率": "≤ 5%",
"检测延迟": "≤ 10 秒"
}

# 警告机制
WARNING = {
"初始警告": "锁车即刻触发",
"持续警告": "每 30 秒重复",
"远程通知": "手机 App 推送",
"紧急联系": "可选(连接服务中心)"
}

2. 传感器选型对比

主流 CPD 传感器方案:

传感器类型 工作原理 优势 劣势 成本
60GHz 毫米波雷达 呼吸微动检测 穿透性强、隐私保护 分辨率有限 $15-25
热成像红外 温度分布检测 不受光照影响 成本高、穿透弱 $30-50
座舱摄像头 视觉识别 多功能复用 隐私争议、遮挡问题 $10-20
UWB 雷达 超宽带感知 高精度定位 成本高 $20-35
压力传感器 座椅压力分布 成本低 仅检测占位、无生命体征 $5-10

技术路线分析

方案一:60GHz 毫米波雷达(推荐)

主流芯片方案:

芯片型号 厂商 关键参数 应用场景
AWRL6844 TI 60GHz, 4Tx4Rx, Edge AI 座舱监测一体化
AWRL6432 TI 60GHz, 低功耗 CPD 单功能
BGT60ATR24C Infineon 60GHz, 一芯多能 CPD+入侵检测
IWR6843AOP TI 60GHz, AoP 封装 紧凑型设计

TI AWRL6844 典型实现:

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
"""
TI AWRL6844 60GHz 雷达 CPD 实现

硬件规格:
- 频段:60-64 GHz
- 天线配置:4Tx4Rx
- 扫描带宽:4 GHz
- 刷新率:10-20 Hz
- 功耗:< 2W(典型值)
"""

import numpy as np
from scipy import signal

class CPDRadar:
"""60GHz 毫米波雷达 CPD 检测"""

def __init__(self, config: dict):
# 雷达参数
self.freq_center = 62e9 # 62 GHz
self.bandwidth = 4e9 # 4 GHz 带宽
self.sample_rate = 1e6 # 1 MHz 采样率
self.chirps_per_frame = 64
self.samples_per_chirp = 256

# 检测参数
self.breath_freq_range = (0.1, 0.5) # 6-30 次/分钟
self.detection_threshold = 0.2 # 微动阈值

def process_frame(self, adc_data: np.ndarray) -> dict:
"""
处理雷达帧数据

Args:
adc_data: ADC 原始数据,shape=(chirps, samples)

Returns:
检测结果:是否有人、生命体征信息
"""
# 1. 距离-多普勒处理
range_doppler = self._range_doppler_fft(adc_data)

# 2. 静态杂波去除
range_doppler = self._clutter_removal(range_doppler)

# 3. 目标检测(CFAR)
detections = self._cfar_detection(range_doppler)

# 4. 生命体征提取
vital_signs = self._extract_vital_signs(detections)

return {
"occupancy": len(detections) > 0,
"breathing_rate": vital_signs.get("breathing_rate"),
"confidence": vital_signs.get("confidence", 0.0)
}

def _range_doppler_fft(self, data: np.ndarray) -> np.ndarray:
"""距离-多普勒 FFT"""
# 距离 FFT(沿快时间维度)
range_fft = np.fft.fft(data, axis=1)

# 多普勒 FFT(沿慢时间维度)
range_doppler = np.fft.fftshift(
np.fft.fft(range_fft, axis=0),
axes=0
)

return np.abs(range_doppler)

def _clutter_removal(self, data: np.ndarray) -> np.ndarray:
"""静态杂波去除"""
# 使用均值减去法
mean = np.mean(data, axis=0, keepdims=True)
return data - mean

def _cfar_detection(self, data: np.ndarray) -> list:
"""CFAR 目标检测"""
# CA-CFAR 实现
threshold = np.mean(data) + self.detection_threshold * np.std(data)
detections = np.where(data > threshold)

return list(zip(detections[0], detections[1]))

def _extract_vital_signs(self, detections: list) -> dict:
"""提取生命体征(呼吸频率)"""
if not detections:
return {"breathing_rate": None, "confidence": 0.0}

# 简化实现:基于多普勒频移估算呼吸频率
# 实际实现需要 FFT 和峰值检测
breathing_rate = 15 # 次/分钟(假设值)

return {
"breathing_rate": breathing_rate,
"confidence": 0.85
}


# 实际部署示例
if __name__ == "__main__":
radar = CPDRadar({})

# 模拟雷达数据(实际从硬件获取)
sim_data = np.random.randn(64, 256) * 0.1
sim_data[10:15, 30:35] += 1.0 # 模拟目标

result = radar.process_frame(sim_data)
print(f"占用检测: {result['occupancy']}")
print(f"呼吸频率: {result['breathing_rate']} 次/分钟")
print(f"置信度: {result['confidence']:.2%}")

方案二:摄像头 + AI 视觉检测

视觉检测优势:

  • 与 DMS/OMS 共用硬件,降低成本
  • 可同时检测乘员姿态、安全带状态
  • 支持儿童/宠物分类识别

视觉检测局限:

  • 被遮挡时失效(毯子覆盖儿童)
  • 隐私问题需要处理
  • 光照极端条件影响
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
"""
摄像头视觉 CPD 检测

核心算法:
1. 儿童检测(YOLO/SSD)
2. 呼吸运动分析(光流法)
3. 活体判断(微动检测)
"""

import cv2
import numpy as np

class VisualCPD:
"""视觉 CPD 检测"""

def __init__(self, model_path: str):
# 加载检测模型
self.detector = cv2.dnn.readNet(model_path)

# 呼吸检测参数
self.motion_history = []
self.history_length = 300 # 10 秒 @ 30fps

def detect_child(self, frame: np.ndarray) -> list:
"""
检测儿童

Returns:
儿童边界框列表 [(x, y, w, h, confidence), ...]
"""
# 预处理
blob = cv2.dnn.blobFromImage(frame, 1/255, (416, 416))
self.detector.setInput(blob)

# 推理
detections = self.detector.forward()

# 后处理
children = []
for det in detections:
confidence = det[4]
if confidence > 0.5:
class_id = int(det[5])
if class_id == 0: # person class
x, y, w, h = det[:4] * np.array([frame.shape[1], frame.shape[0]] * 2)
children.append((int(x), int(y), int(w), int(h), confidence))

return children

def detect_breathing(self, frame: np.ndarray, roi: tuple) -> float:
"""
检测呼吸运动

Args:
frame: 当前帧
roi: 感兴趣区域 (x, y, w, h)

Returns:
呼吸频率(次/分钟)
"""
x, y, w, h = roi
roi_frame = frame[y:y+h, x:x+w]

# 光流计算
gray = cv2.cvtColor(roi_frame, cv2.COLOR_BGR2GRAY)

# 简化实现:帧差法检测微动
self.motion_history.append(np.std(gray))

if len(self.motion_history) < self.history_length:
return 0.0

# FFT 分析运动频率
motion_signal = np.array(self.motion_history[-self.history_length:])
fft_result = np.fft.fft(motion_signal)
freqs = np.fft.fftfreq(len(motion_signal), 1/30)

# 找到呼吸频段的峰值
breath_freq_range = (0.1, 0.5) # Hz
valid_idx = np.where((freqs >= breath_freq_range[0]) &
(freqs <= breath_freq_range[1]))

if len(valid_idx[0]) > 0:
peak_freq = freqs[valid_idx[0][np.argmax(np.abs(fft_result[valid_idx]))]]
breathing_rate = peak_freq * 60 # 转换为次/分钟
return breathing_rate

return 0.0

Euro NCAP 测试场景

CPD 测试场景清单(官方协议)

场景 ID 场景描述 测试要求 通过标准
CPD-01 婴儿在安全座椅 6 个月以下婴儿 ≤10s 检测到
CPD-02 幼儿独自在后座 1-3 岁幼儿 ≤10s 检测到
CPD-03 儿童睡眠状态 模拟睡眠姿势 ≤10s 检测到
CPD-04 儿童被毯子覆盖 部分遮挡 ≤30s 检测到
CPD-05 宠物在车内 猫/狗 ≤10s 检测到
CPD-06 双排座椅场景 前后都有儿童 ≤10s 双排检测
CPD-07 极端温度环境 -20°C 至 +50°C 功能正常
CPD-08 强光/弱光环境 0 lux 至 100k lux 功能正常

IMS 开发启示

1. 传感器选型策略

推荐方案:雷达为主,视觉为辅

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
"""
IMS CPD 模块架构

分层设计:
1. 传感器抽象层(Sensor HAL)
2. 数据处理层(Processing)
3. 决策逻辑层(Decision)
4. 警告输出层(Warning)
"""

class CPDSystem:
"""CPD 系统主类"""

def __init__(self):
# 传感器抽象
self.sensor = RadarSensor("AWRL6844")

# 处理模块
self.range_processor = RangeDopplerProcessor()
self.vital_extractor = VitalSignsExtractor()

# 决策模块
self.detector = OccupancyDetector()
self.classifier = ChildPetClassifier()

# 警告模块
self.warning = WarningManager()

def run(self):
"""主循环"""
while True:
# 1. 获取雷达数据
frame = self.sensor.acquire_frame()

# 2. 距离-多普勒处理
rd_map = self.range_processor.process(frame)

# 3. 生命体征提取
vital_signs = self.vital_extractor.extract(rd_map)

# 4. 占用检测
occupancy = self.detector.detect(rd_map, vital_signs)

# 5. 分类(儿童/宠物/成人)
if occupancy:
classification = self.classifier.classify(rd_map)

# 6. 触发警告
if classification["type"] in ["child", "pet"]:
self.warning.trigger(
level="critical",
message=f"检测到{classification['type']}遗留!",
vital_signs=vital_signs
)

3. 部署优化要点

边缘 AI 优化:

优化项 方法 效果
模型量化 INT8 量化 精度损失 <1%,速度提升 3x
FFT 加速 硬件 FFT 延迟降低 80%
内存优化 静态分配 RAM 占用从 2MB 降至 512KB
功耗管理 动态唤醒 熄火后功耗 <50mW

总结

Euro NCAP 2026 CPD 关键要点:

  1. 强制要求:CPD 成为必选项,OEM 必须实施
  2. 直接感知:间接方法不再被接受,需使用雷达/视觉等直接检测
  3. 双排覆盖:前后排都必须支持检测
  4. 即刻警告:锁车即刻触发初始警告
  5. 生命体征:需检测呼吸等生命体征,避免误报

IMS 开发优先级:

优先级 模块 时间节点
P0 60GHz 雷达驱动集成 2026 Q1
P0 呼吸检测算法实现 2026 Q1
P1 视觉辅助检测 2026 Q2
P1 儿童分类模型 2026 Q2
P2 警告系统集成 2026 Q3

参考资料:

  1. Euro NCAP CPD Test and Assessment Protocol v1.3
  2. TI AWRL6844 Datasheet
  3. Smart Eye - What Euro NCAP 2026 Says About Child Presence Detection
  4. Infineon XENSIV 60GHz Radar Solution Guide