认知分心检测2026前沿:EEG眼动融合与行为建模突破

研究背景

认知分心的特殊性

**认知分心(Cognitive Distraction)**是Euro NCAP 2026最难攻克的检测难题:

分心类型 检测难度 Euro NCAP要求
视觉分心(看手机) ⭐ 低 已量产
操作分心(调节中控) ⭐⭐ 中 已量产
认知分心(走神) ⭐⭐⭐⭐⭐ 待突破

核心挑战:

  • 外部行为不明显(手握方向盘、眼看前方)
  • 内部心理状态不可见
  • 传统PERCLOS、视线偏离无法检测

2026年最新研究进展

本文综合2026年最新论文,梳理认知分心检测的技术路线。

路线1:EEG脑电信号检测

1.1 EEG-Based Driver Drowsiness Classification(2026)

论文信息:

  • 标题:EEG-Based Driver Drowsiness Classification Using Support Vector Machine on Monotonous Road Driving Simulation
  • 期刊:MALCOM: Indonesian Journal of Machine Learning and Computer Science
  • 时间:2026年6月(3周前)

核心方法:

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
import numpy as np
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler

class EEGDrowsinessDetector:
"""
基于EEG的疲劳检测器

使用SVM分类单调驾驶场景下的疲劳状态
"""

def __init__(self):
self.svm = SVC(kernel='rbf', C=1.0, gamma='scale')
self.scaler = StandardScaler()

# EEG通道配置(14通道Emotiv Epoc+)
self.channels = ['AF3', 'F7', 'F3', 'FC5', 'T7', 'P7', 'O1',
'O2', 'P8', 'T8', 'FC6', 'F4', 'F8', 'AF4']

# 关键频段
self.frequency_bands = {
'delta': (0.5, 4),
'theta': (4, 8),
'alpha': (8, 13),
'beta': (13, 30),
'gamma': (30, 100)
}

def extract_features(self, eeg_signal):
"""
提取EEG特征

Args:
eeg_signal: (n_channels, n_samples) EEG信号

Returns:
features: 特征向量
"""
features = []

# 1. 功率谱密度(PSD)
psd_features = self.compute_psd_features(eeg_signal)
features.extend(psd_features)

# 2. 频段能量比
band_power = self.compute_band_power(eeg_signal)
features.extend(band_power)

# 3. ADHD生物标记(Beta/Theta比)
# 论文发现:Beta/Theta比值的逆与分心相关
beta_theta_ratio = band_power['beta'] / (band_power['theta'] + 1e-6)
features.append(beta_theta_ratio)

# 4. 眼动伪迹估计(从EEG估计EOG)
eog_estimate = self.estimate_eog_from_eeg(eeg_signal)
features.append(eog_estimate)

return np.array(features)

def compute_psd_features(self, eeg_signal):
"""
计算功率谱密度特征
"""
from scipy import signal

# Welch方法估计PSD
freqs, psd = signal.welch(eeg_signal, fs=128, nperseg=256)

# 各频段平均功率
psd_features = []
for band, (low, high) in self.frequency_bands.items():
band_indices = np.where((freqs >= low) & (freqs <= high))
band_power = np.mean(psd[:, band_indices], axis=1)
psd_features.extend(band_power)

return psd_features

def compute_band_power(self, eeg_signal):
"""
计算各频段能量
"""
from scipy import signal

band_power = {}

for band, (low, high) in self.frequency_bands.items():
# 带通滤波
b, a = signal.butter(4, [low, high], btype='band', fs=128)
filtered = signal.filtfilt(b, a, eeg_signal, axis=1)

# 计算能量
power = np.mean(filtered ** 2, axis=1)
band_power[band] = np.mean(power)

return band_power

def estimate_eog_from_eeg(self, eeg_signal):
"""
从额叶EEG估计眼动(EOG)信号

参考:Frontal electrodes can estimate eye blink rate
"""
# 使用额叶通道(AF3, AF4, F7, F8)
frontal_channels = [0, 1, 12, 13] # 索引
frontal_signal = eeg_signal[frontal_channels, :]

# 眨眼频率估计(通过高频成分)
from scipy import signal
b, a = signal.butter(4, [20, 30], btype='band', fs=128)
filtered = signal.filtfilt(b, a, frontal_signal, axis=1)

# 峰值检测(眨眼)
peaks, _ = signal.find_peaks(filtered[0], height=np.std(filtered[0]))

blink_rate = len(peaks) / (eeg_signal.shape[1] / 128) # 次/秒

return blink_rate

def train(self, X_train, y_train):
"""
训练SVM分类器
"""
# 标准化
X_scaled = self.scaler.fit_transform(X_train)

# 训练SVM
self.svm.fit(X_scaled, y_train)

def predict(self, eeg_signal):
"""
预测疲劳状态

Returns:
state: 'alert' | 'fatigued'
confidence: 置信度
"""
features = self.extract_features(eeg_signal)
features_scaled = self.scaler.transform([features])

prediction = self.svm.predict(features_scaled)[0]
confidence = np.max(self.svm.predict_proba(features_scaled))

return {
'state': 'fatigued' if prediction == 1 else 'alert',
'confidence': confidence
}


# 实际测试示例
if __name__ == "__main__":
# 模拟EEG数据(14通道,10秒)
np.random.seed(42)
eeg_data = np.random.randn(14, 1280) # 128Hz采样

detector = EEGDrowsinessDetector()
result = detector.predict(eeg_data)

print(f"检测状态: {result['state']}")
print(f"置信度: {result['confidence']:.2f}")

性能指标:

指标 数值
精度 89.2%
召回率 86.5%
F1 87.8%
检测延迟 <2s

1.2 NeuroSafeDrive: fNIRS认知分心识别(2026)

论文信息:

核心方法:

使用**功能性近红外光谱(fNIRS)**检测前额叶皮层血氧变化,识别认知负荷。

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
import numpy as np

class fNIRSCognitiveDetector:
"""
基于fNIRS的认知分心检测器

检测前额叶皮层(PFC)血氧变化
"""

def __init__(self):
# fNIRS通道配置(前额叶皮层)
self.channels = [
'left_dlpfc', # 左背外侧前额叶
'right_dlpfc', # 右背外侧前额叶
'left_vlpfc', # 左腹外侧前额叶
'right_vlpfc' # 右腹外侧前额叶
]

# 血氧参数
self.hbo_threshold = 0.3 # 含氧血红蛋白阈值
self.hbr_threshold = -0.2 # 去氧血红蛋白阈值

def extract_features(self, fnirs_signal):
"""
提取fNIRS特征

Args:
fnirs_signal: {
'HbO': (n_channels, n_samples), # 含氧血红蛋白
'HbR': (n_channels, n_samples) # 去氧血红蛋白
}

Returns:
features: 特征向量
"""
hbo = fnirs_signal['HbO']
hbr = fnirs_signal['HbR']

features = []

# 1. 平均血氧浓度变化
hbo_mean = np.mean(hbo, axis=1)
hbr_mean = np.mean(hbr, axis=1)
features.extend(hbo_mean)
features.extend(hbr_mean)

# 2. 血氧变化斜率(认知负荷增加→HbO上升)
hbo_slope = self.compute_slope(hbo)
hbr_slope = self.compute_slope(hbr)
features.extend(hbo_slope)
features.extend(hbr_slope)

# 3. 血氧不对称性(左-右)
asymmetry = hbo_mean[0] - hbo_mean[1] # 左右差异
features.append(asymmetry)

# 4. 认知负荷指数
cognitive_load = self.compute_cognitive_load(hbo, hbr)
features.append(cognitive_load)

return np.array(features)

def compute_slope(self, signal):
"""
计算血氧变化斜率
"""
n_samples = signal.shape[1]
time = np.arange(n_samples)

slopes = []
for channel in signal:
slope = np.polyfit(time, channel, 1)[0]
slopes.append(slope)

return np.array(slopes)

def compute_cognitive_load(self, hbo, hbr):
"""
计算认知负荷指数

公式:CLI = (HbO_mean - HbR_mean) / HbO_std
"""
hbo_mean = np.mean(hbo)
hbr_mean = np.mean(hbr)
hbo_std = np.std(hbo) + 1e-6

cli = (hbo_mean - hbr_mean) / hbo_std

return cli

def detect(self, fnirs_signal):
"""
检测认知分心

Returns:
{
'cognitive_state': 'focused' | 'distracted',
'cognitive_load': float,
'confidence': float
}
"""
features = self.extract_features(fnirs_signal)

# 简单阈值判断(实际应使用训练好的分类器)
cognitive_load = features[-1]

if cognitive_load > 0.5:
return {
'cognitive_state': 'distracted',
'cognitive_load': cognitive_load,
'confidence': min(cognitive_load, 1.0)
}
else:
return {
'cognitive_state': 'focused',
'cognitive_load': cognitive_load,
'confidence': 1.0 - cognitive_load
}


# 实际测试
if __name__ == "__main__":
# 模拟fNIRS数据
fnirs_data = {
'HbO': np.random.randn(4, 100) * 0.1 + 0.5, # 含氧
'HbR': np.random.randn(4, 100) * 0.1 - 0.3 # 去氧
}

detector = fNIRSCognitiveDetector()
result = detector.detect(fnirs_data)

print(f"认知状态: {result['cognitive_state']}")
print(f"认知负荷: {result['cognitive_load']:.3f}")

优劣势对比:

方法 优势 劣势
EEG 时间分辨率高(ms级)、直接反映神经活动 佩戴复杂、受肌肉干扰
fNIRS 空间分辨率高(定位脑区)、抗干扰强 时间分辨率低(秒级)、成本高

路线2:眼动特征建模

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
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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
import numpy as np

class GazeEntropyDetector:
"""
基于眼动熵的认知分心检测器
"""

def __init__(self):
self.window_size = 30 # 秒
self.fps = 30

# 眼动参数阈值
self.thresholds = {
'saccade_speed': 100, # 度/秒
'fixation_duration': 3, # 秒
'off_road_gaze': 0.3 # 比例
}

def compute_gaze_entropy(self, gaze_sequence):
"""
计算眼动熵

Args:
gaze_sequence: (N, 2) 眼动坐标序列 [(x, y), ...]

Returns:
entropy: 眼动熵值
"""
# 1. 离散化眼动空间
grid_size = 10 # 10x10网格
gaze_grid = self.discretize_gaze(gaze_sequence, grid_size)

# 2. 计算转移概率矩阵
transition_matrix = self.compute_transition_matrix(gaze_grid)

# 3. 计算熵
entropy = self.compute_shannon_entropy(transition_matrix)

return entropy

def discretize_gaze(self, gaze_sequence, grid_size):
"""
离散化眼动空间
"""
# 归一化到[0, grid_size)
normalized = (gaze_sequence - gaze_sequence.min()) / \
(gaze_sequence.max() - gaze_sequence.min() + 1e-6)

discretized = (normalized * grid_size).astype(int)
discretized = np.clip(discretized, 0, grid_size - 1)

return discretized

def compute_transition_matrix(self, gaze_grid):
"""
计算转移概率矩阵
"""
n_states = gaze_grid.shape[0]
transition_matrix = np.zeros((n_states, n_states))

for i in range(len(gaze_grid) - 1):
current_state = tuple(gaze_grid[i])
next_state = tuple(gaze_grid[i + 1])

transition_matrix[current_state[0], next_state[0]] += 1

# 归一化
transition_matrix = transition_matrix / (transition_matrix.sum(axis=1, keepdims=True) + 1e-6)

return transition_matrix

def compute_shannon_entropy(self, transition_matrix):
"""
计算香农熵
"""
# 去除零值
probs = transition_matrix[transition_matrix > 0]

# 熵计算
entropy = -np.sum(probs * np.log2(probs))

return entropy

def extract_features(self, gaze_data):
"""
提取眼动特征
"""
features = []

# 1. 扫视速度
saccade_speed = self.compute_saccade_speed(gaze_data)
features.append(saccade_speed)

# 2. 注视持续时间
fixation_duration = self.compute_fixation_duration(gaze_data)
features.append(fixation_duration)

# 3. 眼动熵
gaze_entropy = self.compute_gaze_entropy(gaze_data)
features.append(gaze_entropy)

# 4. 兴趣外凝视比例
off_road_ratio = self.compute_off_road_ratio(gaze_data)
features.append(off_road_ratio)

return np.array(features)

def compute_saccade_speed(self, gaze_data):
"""
计算平均扫视速度
"""
# 计算相邻帧之间的眼动距离
diff = np.diff(gaze_data, axis=0)
distance = np.sqrt(diff[:, 0]**2 + diff[:, 1]**2)

# 速度(度/帧→度/秒)
speed = np.mean(distance) * self.fps

return speed

def compute_fixation_duration(self, gaze_data):
"""
计算平均注视持续时间
"""
# 简化:使用速度阈值检测注视
speed = self.compute_saccade_speed(gaze_data)

# 速度<阈值的帧视为注视
fixation_frames = speed < self.thresholds['saccade_speed'] * 0.1

# 计算平均持续帧数
fixation_duration = np.mean(fixation_frames) / self.fps

return fixation_duration

def compute_off_road_ratio(self, gaze_data):
"""
计算兴趣外凝视比例
"""
# 假设道路中心在画面中央
center = np.array([0.5, 0.5])

# 计算距离中心的距离
distance = np.sqrt((gaze_data[:, 0] - center[0])**2 +
(gaze_data[:, 1] - center[1])**2)

# 距离>0.3视为兴趣外
off_road = distance > 0.3

return np.mean(off_road)

def detect(self, gaze_data):
"""
检测认知分心

Returns:
{
'cognitive_state': 'focused' | 'distracted',
'gaze_entropy': float,
'features': dict
}
"""
features = self.extract_features(gaze_data)

# 低扫视速度、长注视、高熵值→认知分心
is_distracted = (
features[0] < self.thresholds['saccade_speed'] or # 低扫视速度
features[1] > self.thresholds['fixation_duration'] or # 长注视
features[3] > self.thresholds['off_road_gaze'] # 兴趣外凝视
)

return {
'cognitive_state': 'distracted' if is_distracted else 'focused',
'gaze_entropy': features[2],
'features': {
'saccade_speed': features[0],
'fixation_duration': features[1],
'off_road_ratio': features[3]
}
}


# 实际测试
if __name__ == "__main__":
# 模拟眼动数据(30秒,30fps)
np.random.seed(42)
gaze_data = np.random.rand(900, 2) # 归一化坐标[0, 1]

detector = GazeEntropyDetector()
result = detector.detect(gaze_data)

print(f"认知状态: {result['cognitive_state']}")
print(f"眼动熵: {result['gaze_entropy']:.3f}")
print(f"扫视速度: {result['features']['saccade_speed']:.1f} 度/秒")

路线3:方向盘操控熵(低成本方案)

3.1 Steering Entropy for Cognitive Distraction(2026)

核心创新:

使用方向盘操控熵检测认知分心,无需额外传感器

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
import numpy as np
from scipy import signal

class SteeringEntropyDetector:
"""
基于方向盘操控熵的认知分心检测器

参考:Nakayama et al., "Towards recognizing cognitive distraction..."
"""

def __init__(self):
self.window_size = 60 # 秒
self.hz = 10 # 采样率

# 熵阈值
self.entropy_threshold = 0.45

def compute_steering_entropy(self, steering_angles):
"""
计算方向盘操控熵

步骤:
1. 使用2阶预测模型预测方向盘角度
2. 计算预测误差
3. 归一化误差并计算熵

Args:
steering_angles: (N,) 方向盘角度序列

Returns:
entropy: 操控熵值
"""
# 1. 预测方向盘角度
predictions = []
for i in range(2, len(steering_angles)):
# 二阶预测:θ_pred = 0.5 * θ[i-1] + 0.5 * θ[i-2]
pred = 0.5 * steering_angles[i-1] + 0.5 * steering_angles[i-2]
predictions.append(pred)

predictions = np.array(predictions)

# 2. 计算预测误差
actual = steering_angles[2:]
errors = np.abs(actual - predictions)

# 3. 归一化误差到[0, 1]
max_error = np.max(errors) + 1e-6
normalized_errors = errors / max_error

# 4. 计算香农熵
# 使用直方图估计概率分布
hist, _ = np.histogram(normalized_errors, bins=20, density=True)
hist = hist + 1e-6 # 避免log(0)

entropy = -np.sum(hist * np.log2(hist))

return entropy

def compute_secondary_metrics(self, steering_angles):
"""
计算辅助指标
"""
# 1. 高频成分(微调)
b, a = signal.butter(4, [0.5, 2], btype='band', fs=self.hz)
high_freq = signal.filtfilt(b, a, steering_angles)
high_freq_power = np.mean(high_freq ** 2)

# 2. 低频成分(大幅调整)
b, a = signal.butter(4, 0.1, btype='low', fs=self.hz)
low_freq = signal.filtfilt(b, a, steering_angles)
low_freq_power = np.mean(low_freq ** 2)

# 3. 调整频率
adjustments = np.sum(np.abs(np.diff(steering_angles)) > 0.5)
adjustment_rate = adjustments / len(steering_angles)

return {
'high_freq_power': high_freq_power,
'low_freq_power': low_freq_power,
'adjustment_rate': adjustment_rate
}

def detect(self, steering_data):
"""
检测认知分心

Args:
steering_data: {
'angle': (N,) 方向盘角度,
'speed': (N,) 车速
}

Returns:
{
'cognitive_state': 'focused' | 'distracted',
'entropy': float,
'confidence': float
}
"""
steering_angles = steering_data['angle']

# 1. 计算操控熵
entropy = self.compute_steering_entropy(steering_angles)

# 2. 计算辅助指标
secondary = self.compute_secondary_metrics(steering_angles)

# 3. 综合判断
# 高熵值(操控不规律)→ 认知分心
is_distracted = entropy > self.entropy_threshold

# 辅助验证:低频调整减少+高频微调增加
if secondary['low_freq_power'] < 0.1 and secondary['high_freq_power'] > 0.05:
is_distracted = True

confidence = min(entropy / self.entropy_threshold, 1.0)

return {
'cognitive_state': 'distracted' if is_distracted else 'focused',
'entropy': entropy,
'confidence': confidence,
'secondary_metrics': secondary
}


# 实际测试
if __name__ == "__main__":
# 模拟方向盘数据(60秒,10Hz)
np.random.seed(42)

# 正常驾驶:平滑调整
normal_steering = np.cumsum(np.random.randn(600) * 0.01)

# 认知分心:不规律调整
distracted_steering = np.cumsum(np.random.randn(600) * 0.05)

detector = SteeringEntropyDetector()

result_normal = detector.detect({'angle': normal_steering})
result_distracted = detector.detect({'angle': distracted_steering})

print(f"正常驾驶熵值: {result_normal['entropy']:.3f}{result_normal['cognitive_state']}")
print(f"认知分心熵值: {result_distracted['entropy']:.3f}{result_distracted['cognitive_state']}")

性能对比:

方法 精度 成本 实时性 隐私
EEG 89% 高($5000+) 中(2s)
fNIRS 85% 高($3000+) 低(5s)
眼动熵 80% 中($500) 高(<1s)
方向盘熵 75% 低($0) 高(<1s)

路线4:多模态融合

4.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
class MultimodalCognitiveDetector:
"""
多模态认知分心检测器

融合:EEG + 眼动 + 方向盘
"""

def __init__(self):
self.eeg_detector = EEGDrowsinessDetector()
self.gaze_detector = GazeEntropyDetector()
self.steering_detector = SteeringEntropyDetector()

# 权重配置
self.weights = {
'eeg': 0.4,
'gaze': 0.35,
'steering': 0.25
}

def detect(self, eeg_data, gaze_data, steering_data):
"""
多模态融合检测

Returns:
{
'cognitive_state': 'focused' | 'distracted',
'confidence': float,
'modalities': dict
}
"""
# 1. 各模态独立检测
eeg_result = self.eeg_detector.predict(eeg_data)
gaze_result = self.gaze_detector.detect(gaze_data)
steering_result = self.steering_detector.detect(steering_data)

# 2. 加权融合
distracted_score = 0

if eeg_result['state'] == 'fatigued':
distracted_score += self.weights['eeg'] * eeg_result['confidence']

if gaze_result['cognitive_state'] == 'distracted':
distracted_score += self.weights['gaze'] * gaze_result['features']['off_road_ratio']

if steering_result['cognitive_state'] == 'distracted':
distracted_score += self.weights['steering'] * steering_result['confidence']

# 3. 最终判断
is_distracted = distracted_score > 0.5

return {
'cognitive_state': 'distracted' if is_distracted else 'focused',
'confidence': min(distracted_score, 1.0),
'modalities': {
'eeg': eeg_result,
'gaze': gaze_result,
'steering': steering_result
}
}

IMS应用启示

1. 开发优先级

方案 成本 精度 Euro NCAP适配 优先级
方向盘熵 $0 75% ⭐⭐⭐ 🔴 高
眼动熵 $500 80% ⭐⭐⭐⭐ 🔴 高
多模态融合 $500 85% ⭐⭐⭐⭐⭐ 🟡 中
EEG/fNIRS $3000+ 89% ⭐⭐ 🟢 低

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
# Snapdragon 8255部署示例
class EdgeCognitiveDetector:
"""
边缘端认知分心检测器

仅使用方向盘+眼动(低成本方案)
"""

def __init__(self):
# 加载量化模型
self.gaze_model = self.load_quantized_model('gaze_int8.onnx')
self.steering_model = self.load_quantized_model('steering_int8.onnx')

def load_quantized_model(self, model_path):
"""
加载INT8量化模型
"""
import onnxruntime as ort

session = ort.InferenceSession(model_path)
return session

def inference(self, gaze_data, steering_data):
"""
边缘推理
"""
# 眼动推理
gaze_input = self.preprocess_gaze(gaze_data)
gaze_output = self.gaze_model.run(None, {'input': gaze_input})

# 方向盘推理
steering_input = self.preprocess_steering(steering_data)
steering_output = self.steering_model.run(None, {'input': steering_input})

# 融合
score = 0.6 * gaze_output[0] + 0.4 * steering_output[0]

return 'distracted' if score > 0.5 else 'focused'

性能预估:

指标 数值
模型大小 <5MB
推理延迟 <50ms
功耗 <1.5W
精度 78%

总结

认知分心检测2026年前沿:

  1. EEG/fNIRS:最高精度(89%),但成本高、佩戴复杂
  2. 眼动熵:中高精度(80%),眼动+行为建模是主流
  3. 方向盘熵:低成本($0)、高实时性,适合量产

IMS推荐方案:

  • 阶段1:部署方向盘熵(零成本、实时性好)
  • 阶段2:集成眼动熵(精度提升5%)
  • 阶段3:多模态融合(Euro NCAP 2027适配)

参考论文:

  1. EEG-Based Driver Drowsiness Classification Using SVM, MALCOM 2026
  2. NeuroSafeDrive: fNIRS-Based Cognitive Distraction Recognition, MDPI Sensors 2025
  3. Steering Entropy for Cognitive Distraction, ScienceDirect 2025
  4. Beyond the Lab: Neurophysiological Mental States Assessment, IOPscience 2026

认知分心检测2026前沿:EEG眼动融合与行为建模突破
https://dapalm.com/2026/07/18/2026-07-18-04-Cognitive-Distraction-EEG-Eye-Movement-2026-SOTA/
作者
Mars
发布于
2026年7月18日
许可协议