酒驾检测技术突破:CHI 2025 真实车辆实验与多模态融合

发布时间: 2026-07-08
标签: 酒驾检测, Euro NCAP 2026, DMS, 多模态融合, 实车验证
论文来源: CHI 2025 | NHTSA Report 2024


论文信息

项目 内容
标题 Moving Beyond the Simulator: Interaction-Based Drunk Driving Detection in a Real Vehicle Using Driver Monitoring Cameras and Real-Time Vehicle Data
会议 CHI 2025 (ACM Conference on Human Factors in Computing Systems)
核心贡献 首次在真实车辆验证酒驾检测系统,AUROC = 0.84
创新点 DMC(驾驶员监测摄像头)+ CAN(车辆数据)多模态融合

核心突破:从模拟器到真实车辆

历史挑战: 酒驾检测研究长期依赖模拟器,缺乏真实环境验证

CHI 2025 论文贡献:

  • ✅ 真实车辆实验(非模拟器)
  • ✅ 多模态融合(摄像头 + 车辆 CAN 数据)
  • ✅ 实时检测性能验证
  • ✅ 两种阈值检测:Early Warning(0.05 g/dL)和 Above Limit(0.08 g/dL)

检测性能(论文核心数据)

检测模式 AUROC 标准差 说明
Early Warning (0.05 g/dL) 0.84 ±0.11 预警阈值(轻度损伤)
Above Limit (0.08 g/dL) 0.80 ±0.10 法定阈值(酒驾)
仅 DMC 数据 0.79 ±0.12 单摄像头模态
仅 CAN 数据 0.72 ±0.14 单车辆数据模态
DMC + CAN 融合 0.84 ±0.11 多模态融合最优

关键结论:多模态融合比单一模态提升 5-12% AUROC


多模态融合架构

graph TB
    A[驾驶员监测摄像头 DMC] --> D[特征提取]
    B[车辆 CAN 总线数据] --> D
    
    D --> E[面部特征]
    D --> F[眼动特征]
    D --> G[方向盘行为]
    D --> H[车道保持行为]
    
    E --> I[融合层]
    F --> I
    G --> I
    H --> I
    
    I --> J{损伤判断}
    J -->|Early Warning ≤0.05| K[一级警告]
    J -->|Above Limit ≥0.08| L[二级警告 + 禁止启动]

面部特征检测算法

眼动异常指标

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
159
160
161
162
163
164
165
166
167
import numpy as np
from scipy.stats import entropy

class AlcoholImpairmentDetector:
"""
酒驾损伤检测(基于 CHI 2025 论文方法)

核心指标:
1. PERCLOS 变化(闭眼比例)
2. 眼动异常性(熵值)
3. 瞳孔响应迟缓
4. 面部表情异常
"""

def __init__(self):
# 阈值(基于论文实验数据)
self.early_warning_threshold = 0.05 # g/dL
self.above_limit_threshold = 0.08 # g/dL

def extract_eye_features(self,
eye_openness: np.ndarray,
gaze_points: np.ndarray,
pupil_sizes: np.ndarray,
fps: int = 30) -> dict:
"""
提取眼部损伤特征

Args:
eye_openness: 眼睑开度序列 (0-1), shape=(N,)
gaze_points: 眼动点序列, shape=(N, 2)
pupil_sizes: 瞳孔大小序列, shape=(N,)
fps: 帧率

Returns:
dict: {
"perclos": float, # PERCLOS 值
"eye_entropy": float, # 眼动熵
"pupil_response": float, # 瞳孔响应
"blink_frequency": float, # 眨眼频率
"impairment_score": float # 综合损伤得分
}
"""
N = len(eye_openness)

# 1. PERCLOS 计算(论文发现:酒精损伤时 PERCLOS 增加)
threshold = 0.2 # 闭眼阈值
closed_frames = np.sum(eye_openness < threshold)
perclos = closed_frames / N

# 2. 眼动熵(酒精损伤导致眼动不规律)
eye_entropy = self._compute_gaze_entropy(gaze_points)

# 3. 瞳孔响应迟缓(酒精影响瞳孔调节)
if len(pupil_sizes) > fps * 2:
# 计算瞳孔大小变化率
pupil_changes = np.abs(np.diff(pupil_sizes))
pupil_response = np.mean(pupil_changes) * fps # 每秒变化率
else:
pupil_response = 0.0

# 4. 眨眼频率(酒精损伤时眨眼频率变化)
blink_events = self._detect_blinks(eye_openness, fps)
blink_frequency = len(blink_events) / (N / fps) # Hz

# 5. 综合损伤得分(基于论文权重)
# 论文发现:PERCLOS 和眼动熵是最强指示指标
impairment_score = (
0.35 * perclos +
0.30 * eye_entropy +
0.15 * (1.0 - pupil_response) + # 响应迟缓得分高
0.20 * np.abs(blink_frequency - 0.25) # 正常眨眼频率约 0.25 Hz
)

return {
"perclos": perclos,
"eye_entropy": eye_entropy,
"pupil_response": pupil_response,
"blink_frequency": blink_frequency,
"impairment_score": impairment_score
}

def _compute_gaze_entropy(self, gaze_points: np.ndarray) -> float:
"""计算眼动熵"""
if len(gaze_points) < 100:
return 0.0

# 空间网格划分
grid_size = 8
grid_x = np.clip((gaze_points[:, 0] * grid_size).astype(int), 0, grid_size - 1)
grid_y = np.clip((gaze_points[:, 1] * grid_size).astype(int), 0, grid_size - 1)
grid_cells = grid_x * grid_size + grid_y

# Shannon 熵
from collections import Counter
cell_counts = Counter(grid_cells)
total = len(grid_cells)
probs = np.array([count / total for count in cell_counts.values()])

return entropy(probs, base=2) / np.log2(grid_size ** 2)

def _detect_blinks(self,
eye_openness: np.ndarray,
fps: int) -> list:
"""检测眨眼事件"""
threshold = 0.2
is_closed = eye_openness < threshold

blink_events = []
in_blink = False

for i, closed in enumerate(is_closed):
if closed and not in_blink:
in_blink = True
blink_start = i
elif not closed and in_blink:
blink_end = i
blink_duration = (blink_end - blink_start) / fps
if 0.1 < blink_duration < 0.5: # 正常眨眼持续时间
blink_events.append((blink_start, blink_end, blink_duration))
in_blink = False

return blink_events


# 测试示例
if __name__ == "__main__":
np.random.seed(42)

detector = AlcoholImpairmentDetector()

# 模拟正常驾驶数据
N = 900 # 30秒 @ 30fps
normal_eye_openness = np.random.normal(0.8, 0.05, N)
normal_eye_openness = np.clip(normal_eye_openness, 0, 1)

normal_gaze = np.random.normal([0.5, 0.5], [0.08, 0.08], (N, 2))
normal_gaze = np.clip(normal_gaze, 0, 1)

normal_pupil = np.random.normal(0.5, 0.02, N)

# 模拟酒精损伤数据
impaired_eye_openness = np.random.normal(0.6, 0.15, N)
impaired_eye_openness = np.clip(impaired_eye_openness, 0, 1)

impaired_gaze = np.random.uniform(0, 1, (N, 2)) # 眼动更随机

impaired_pupil = np.random.normal(0.5, 0.01, N) # 响应迟缓

print("=== 正常驾驶 ===")
normal_result = detector.extract_eye_features(
normal_eye_openness, normal_gaze, normal_pupil
)
print(f"PERCLOS: {normal_result['perclos']:.3f}")
print(f"眼动熵: {normal_result['eye_entropy']:.3f}")
print(f"瞳孔响应: {normal_result['pupil_response']:.3f}")
print(f"眨眼频率: {normal_result['blink_frequency']:.2f} Hz")
print(f"损伤得分: {normal_result['impairment_score']:.3f}")

print("\n=== 酒精损伤 ===")
impaired_result = detector.extract_eye_features(
impaired_eye_openness, impaired_gaze, impaired_pupil
)
print(f"PERCLOS: {impaired_result['perclos']:.3f}")
print(f"眼动熵: {impaired_result['eye_entropy']:.3f}")
print(f"瞳孔响应: {impaired_result['pupil_response']:.3f}")
print(f"眨眼频率: {impaired_result['blink_frequency']:.2f} Hz")
print(f"损伤得分: {impaired_result['impairment_score']:.3f}")

CAN 车辆数据融合

方向盘行为异常检测

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
159
160
161
162
import numpy as np
from scipy.signal import find_peaks

class VehicleBehaviorAnalyzer:
"""
CAN 车辆行为分析(基于 CHI 2025 论文)

酒精损伤驾驶行为特征:
1. 方向盘修正频率增加
2. 修正幅度增大
3. 车道偏离次数增加
4. 速度控制不稳定
"""

def __init__(self):
pass

def extract_steering_features(self,
steering_angle: np.ndarray,
speed: np.ndarray,
lane_position: np.ndarray,
fps: int = 10) -> dict:
"""
提取方向盘和驾驶行为特征

Args:
steering_angle: 方向盘转角序列 (度), shape=(N,)
speed: 速度序列 (km/h), shape=(N,)
lane_position: 车道位置偏移 (米), shape=(N,)
fps: CAN 数据采样率

Returns:
dict: {
"steering_entropy": float, # 方向盘熵
"correction_frequency": float, # 修正频率
"correction_magnitude": float, # 修正幅度
"lane_deviation_count": int, # 车道偏离次数
"speed_variance": float, # 速度方差
"behavior_score": float # 综合行为得分
}
"""
N = len(steering_angle)
duration = N / fps # 秒

# 1. 方向盘熵(酒精损伤时修正更随机)
steering_entropy = self._compute_steering_entropy(steering_angle)

# 2. 修正频率(酒精损伤时修正次数增加)
correction_events = self._detect_steering_corrections(steering_angle)
correction_frequency = len(correction_events) / duration

# 3. 修正幅度(酒精损伤时幅度更大)
correction_magnitude = np.mean([e[2] for e in correction_events]) if correction_events else 0.0

# 4. 车道偏离次数(酒精损伤时偏离增加)
lane_deviation_threshold = 0.3 # 米
lane_deviations = np.sum(np.abs(lane_position) > lane_deviation_threshold)

# 5. 速度方差(酒精损伤时速度控制不稳)
speed_variance = np.var(speed)

# 6. 综合行为得分
behavior_score = (
0.30 * steering_entropy +
0.25 * correction_frequency +
0.20 * correction_magnitude / 10 + # 归一化
0.15 * lane_deviations / duration +
0.10 * speed_variance / 100 # 归一化
)

return {
"steering_entropy": steering_entropy,
"correction_frequency": correction_frequency,
"correction_magnitude": correction_magnitude,
"lane_deviation_count": lane_deviations,
"speed_variance": speed_variance,
"behavior_score": behavior_score
}

def _compute_steering_entropy(self, steering_angle: np.ndarray) -> float:
"""计算方向盘熵"""
# 离散化转角
bins = np.linspace(-90, 90, num=20)
digitized = np.digitize(steering_angle, bins)

from collections import Counter
counts = Counter(digitized)
total = len(digitized)
probs = np.array([count / total for count in counts.values()])

from scipy.stats import entropy
return entropy(probs, base=2) / np.log2(20)

def _detect_steering_corrections(self,
steering_angle: np.ndarray,
threshold: float = 5.0) -> list:
"""
检测方向盘修正事件

修正定义:快速反向转动(从左到右或从右到左)
"""
corrections = []

# 计算转角变化
changes = np.diff(steering_angle)

# 检测快速反向变化
for i in range(1, len(changes)):
prev_change = changes[i-1]
curr_change = changes[i]

# 反向修正:前一次和当前变化方向相反,且幅度足够大
if prev_change * curr_change < 0: # 方向相反
if abs(prev_change) > threshold and abs(curr_change) > threshold:
corrections.append((
i - 1, i, max(abs(prev_change), abs(curr_change))
))

return corrections


# 测试示例
if __name__ == "__main__":
np.random.seed(42)

analyzer = VehicleBehaviorAnalyzer()

# 模拟正常驾驶数据
N = 300 # 30秒 @ 10fps
normal_steering = np.random.normal(0, 3, N)
normal_speed = np.random.normal(60, 2, N)
normal_lane = np.random.normal(0, 0.05, N)

# 模拟酒精损伤驾驶数据
impaired_steering = np.random.normal(0, 15, N) # 更大波动
impaired_steering += np.sin(np.arange(N) / 10) * 20 # 修正模式

impaired_speed = np.random.normal(55, 8, N) # 速度不稳定

impaired_lane = np.random.normal(0, 0.25, N) # 更大偏离

print("=== 正常驾驶 ===")
normal_result = analyzer.extract_steering_features(
normal_steering, normal_speed, normal_lane
)
print(f"方向盘熵: {normal_result['steering_entropy']:.3f}")
print(f"修正频率: {normal_result['correction_frequency']:.2f} Hz")
print(f"修正幅度: {normal_result['correction_magnitude']:.2f} 度")
print(f"车道偏离: {normal_result['lane_deviation_count']} 次")
print(f"速度方差: {normal_result['speed_variance']:.2f}")
print(f"行为得分: {normal_result['behavior_score']:.3f}")

print("\n=== 酒精损伤 ===")
impaired_result = analyzer.extract_steering_features(
impaired_steering, impaired_speed, impaired_lane
)
print(f"方向盘熵: {impaired_result['steering_entropy']:.3f}")
print(f"修正频率: {impaired_result['correction_frequency']:.2f} Hz")
print(f"修正幅度: {impaired_result['correction_magnitude']:.2f} 度")
print(f"车道偏离: {impaired_result['lane_deviation_count']} 次")
print(f"速度方差: {impaired_result['speed_variance']:.2f}")
print(f"行为得分: {impaired_result['behavior_score']:.3f}")

多模态融合决策

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
from dataclasses import dataclass

@dataclass
class ImpairmentFeatures:
"""损伤特征"""
# 眼部特征
perclos: float
eye_entropy: float
pupil_response: float

# 车辆特征
steering_entropy: float
correction_frequency: float
lane_deviation_count: int

# BAC 预测值
estimated_bac: float

class AlcoholImpairmentFusion:
"""
酒驾损伤多模态融合(CHI 2025 论文方法)

AUROC: 0.84 (Early Warning)
"""

def __init__(self):
# 融合权重(基于论文实验)
self.weights = {
"eye_perclos": 0.25,
"eye_entropy": 0.20,
"pupil_response": 0.10,
"steering_entropy": 0.20,
"correction_frequency": 0.15,
"lane_deviation": 0.10
}

def predict(self, features: ImpairmentFeatures) -> dict:
"""
多模态融合预测

Args:
features: 损伤特征

Returns:
dict: {
"bac_estimate": float, # 估计 BAC (g/dL)
"early_warning": bool, # 是否触发预警
"above_limit": bool, # 是否超过法定阈值
"confidence": float
}
"""
# 综合损伤得分
impairment_score = (
self.weights["eye_perclos"] * features.perclos +
self.weights["eye_entropy"] * features.eye_entropy +
self.weights["pupil_response"] * (1.0 - features.pupil_response) +
self.weights["steering_entropy"] * features.steering_entropy +
self.weights["correction_frequency"] * features.correction_frequency +
self.weights["lane_deviation"] * features.lane_deviation_count / 30
)

# BAC 估计(线性映射,基于论文数据)
# 论文实验范围:impairment_score 0.2-0.6 对应 BAC 0.0-0.12
bac_estimate = impairment_score * 0.3 # 简化映射

# 预警判断
early_warning = bac_estimate >= 0.05 # Early Warning 阈值
above_limit = bac_estimate >= 0.08 # Above Limit 阈值

# 置信度(基于 AUROC)
confidence = 0.84 if early_warning else 0.80

return {
"bac_estimate": bac_estimate,
"early_warning": early_warning,
"above_limit": above_limit,
"confidence": confidence,
"impairment_score": impairment_score
}


# 实际测试
if __name__ == "__main__":
fusion = AlcoholImpairmentFusion()

# 模拟正常驾驶
normal_features = ImpairmentFeatures(
perclos=0.08,
eye_entropy=0.35,
pupil_response=0.8,
steering_entropy=0.25,
correction_frequency=0.05,
lane_deviation_count=2
)

# 模拟轻度损伤(BAC ≈ 0.05)
mild_features = ImpairmentFeatures(
perclos=0.15,
eye_entropy=0.50,
pupil_response=0.6,
steering_entropy=0.35,
correction_frequency=0.10,
lane_deviation_count=5
)

# 模拟重度损伤(BAC ≈ 0.08+)
severe_features = ImpairmentFeatures(
perclos=0.25,
eye_entropy=0.70,
pupil_response=0.3,
steering_entropy=0.55,
correction_frequency=0.20,
lane_deviation_count=10
)

print("=== 正常驾驶 ===")
normal_result = fusion.predict(normal_features)
print(f"估计 BAC: {normal_result['bac_estimate']:.3f} g/dL")
print(f"Early Warning: {normal_result['early_warning']}")
print(f"Above Limit: {normal_result['above_limit']}")

print("\n=== 轻度损伤 ===")
mild_result = fusion.predict(mild_features)
print(f"估计 BAC: {mild_result['bac_estimate']:.3f} g/dL")
print(f"Early Warning: {mild_result['early_warning']}")
print(f"Above Limit: {mild_result['above_limit']}")

print("\n=== 重度损伤 ===")
severe_result = fusion.predict(severe_features)
print(f"估计 BAC: {severe_result['bac_estimate']:.3f} g/dL")
print(f"Early Warning: {severe_result['early_warning']}")
print(f"Above Limit: {severe_result['above_limit']}")

Euro NCAP 2026 & NHTSA 要求

Euro NCAP 2026 DSM 酒驾检测

项目 要求 说明
检测阈值 ≤0.08 g/dL 法定酒驾阈值
检测时间 行程开始后 30秒内 启动检测
响应方式 一级警告 → 二级警告 分级响应
干预措施 建议停车/限制启动 可选功能

NHTSA 要求(美国)

项目 要求 说明
强制性 2026年起新车必须配备 Infrastructure Investment and Jobs Act
检测精度 ≥0.08 g/dL 检测率 >90% 性能要求
可用时间 2025年底供应商需就绪 时间表

IMS 开发启示

传感器配置建议

传感器 用途 参数
IR 摄像头 眼部特征提取 2MP, 30fps, 940nm
RGB 摄像头 面部表情分析 可选,辅助
方向盘传感器 CAN 数据采集 标配
车道摄像头 车道偏离检测 标配

检测流程

sequenceDiagram
    participant A as 车辆启动
    participant B as DMC 摄像头
    participant C as CAN 总线
    participant D as 融合算法
    participant E as 决策模块
    
    A->>B: 启动监测
    A->>C: 采集数据
    B->>D: 眼部特征 (30秒)
    C->>D: 车辆行为 (30秒)
    D->>E: 融合判断
    
    alt BAC < 0.05
        E->>A: 正常驾驶
    else 0.05 ≤ BAC < 0.08
        E->>A: Early Warning
    else BAC ≥ 0.08
        E->>A: Above Limit + 禁止启动
    end

测试场景

场景编号 场景描述 预期 BAC 检测要求
AI-01 正常驾驶 0.0 无警告
AI-02 轻度饮酒 0.03-0.05 Early Warning 可选
AI-03 中度饮酒 0.05-0.08 Early Warning 必需
AI-04 重度饮酒 ≥0.08 Above Limit 必需
AI-05 疲劳 + 酒精 ≥0.08 同时检测疲劳
AI-06 夜间驾驶 ≥0.08 IR 摄像头主导

技术挑战与解决方案

挑战 1:疲劳与酒精症状重叠

问题: 疲劳和酒精损伤都有 PERCLOS 增加、眼动异常

解决方案: 多特征融合区分

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
def differentiate_fatigue_alcohol(
eye_features: dict,
vehicle_features: dict
) -> dict:
"""
区分疲劳 vs 酒精损伤

关键区分点:
- 疲劳:PERCLOS 高 + 方向盘熵低(修正减少)
- 酒精:PERCLOS 高 + 方向盘熵高(修正增加)
"""
perclos = eye_features["perclos"]
steering_entropy = vehicle_features["steering_entropy"]

# 疲劳模式
if perclos > 0.15 and steering_entropy < 0.35:
return {"type": "fatigue", "confidence": 0.85}

# 酒精损伤模式
if perclos > 0.15 and steering_entropy > 0.45:
return {"type": "alcohol", "confidence": 0.80}

# 混合模式
if perclos > 0.15 and 0.35 <= steering_entropy <= 0.45:
return {"type": "mixed", "confidence": 0.70}

return {"type": "normal", "confidence": 0.90}

挑战 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
class PersonalizedAlcoholDetector:
"""个性化基线校准"""

def __init__(self):
self.baseline = None

def calibrate(self,
normal_eye_data: np.ndarray,
normal_vehicle_data: np.ndarray):
"""校准正常驾驶基线"""
eye_detector = AlcoholImpairmentDetector()
vehicle_analyzer = VehicleBehaviorAnalyzer()

normal_eye_features = eye_detector.extract_eye_features(
normal_eye_data[:, 0], # eye_openness
normal_eye_data[:, 1:3], # gaze_points
normal_eye_data[:, 3] # pupil_sizes
)

normal_vehicle_features = vehicle_analyzer.extract_steering_features(
normal_vehicle_data[:, 0], # steering
normal_vehicle_data[:, 1], # speed
normal_vehicle_data[:, 2] # lane_position
)

self.baseline = {
"eye": normal_eye_features,
"vehicle": normal_vehicle_features
}

def predict_personal(self,
eye_features: dict,
vehicle_features: dict) -> dict:
"""个性化预测"""
if not self.baseline:
return {"error": "未校准"}

# 相对于基线的变化
perclos_delta = eye_features["perclos"] - self.baseline["eye"]["perclos"]
steering_delta = vehicle_features["steering_entropy"] - self.baseline["vehicle"]["steering_entropy"]

# 基于变化的判断
if perclos_delta > 0.1 and steering_delta > 0.2:
return {"type": "alcohol", "confidence": 0.85}

if perclos_delta > 0.1 and steering_delta < 0:
return {"type": "fatigue", "confidence": 0.80}

return {"type": "normal", "confidence": 0.90}

参考资料

  1. CHI 2025 Paper - 真实车辆实验
  2. NHTSA Report 2024
  3. Federal Register 2024
  4. Keshtkaran et al., “Estimating Blood Alcohol Level Through Facial Features”, WACV 2024

总结

CHI 2025 论文核心贡献:

  1. 真实车辆验证:首次在真实环境验证酒驾检测
  2. 多模态融合:DMC + CAN 数据融合,AUROC = 0.84
  3. 双阈值检测:Early Warning (0.05) + Above Limit (0.08)
  4. 实时性能:30秒内完成判断

IMS 开发优先级:

  • 🔴 高:眼部特征提取算法
  • 🔴 高:CAN 数据采集与分析
  • 🟡 中:多模态融合决策
  • 🟢 低:个性化基线校准

下一步行动:

  • 实现眼部特征提取模块
  • 开发 CAN 数据采集接口
  • 构建多模态融合模型
  • 采集真实驾驶数据验证
  • 对齐 Euro NCAP 2026 测试流程

酒驾检测技术突破:CHI 2025 真实车辆实验与多模态融合
https://dapalm.com/2026/07/08/2026-07-08-alcohol-impairment-detection-chi-2025-real-vehicle/
作者
Mars
发布于
2026年7月8日
许可协议