EEG+眼动追踪融合:认知分心检测的系统综述解读

EEG+眼动追踪融合:认知分心检测的系统综述解读

核心摘要

Frontiers in Neuroergonomics 2026年系统综述揭示EEG+眼动追踪融合检测认知分心的前沿进展:

  • 融合优势: EEG+ET融合准确率85-95%,显著高于单一模态(EEG: 70-80%, ET: 75-85%)
  • EEG指标: theta增加、alpha减少、theta/alpha比上升是认知负荷核心指标
  • 眼动指标: 眨眼率下降、注视分散度增加、扫视频率上升是分心核心指标
  • IMS启示: 认知分心检测需多模态融合,单一模态准确率不足

1. 论文信息

项目 内容
标题 Combining EEG and eye-tracking for cognitive and physiological states monitoring: a systematic review
作者 Maria Rivas-Vidal, Alberto Calvo Cordoba, Cecilia E. García Cena, Fernando Daniel Farfán
发表 Frontiers in Neuroergonomics, 2026
链接 https://doi.org/10.3389/fnrgo.2025.1736672

2. 研究方法

2.1 文献检索策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 检索策略
search_strategy = {
"databases": ["PubMed", "Web of Science", "IEEE Xplore", "Scopus"],
"keywords": [
"EEG",
"eye-tracking",
"cognitive load",
"attention",
"fatigue",
"distraction",
"fusion"
],
"time_range": "2015-2025",
"inclusion_criteria": [
"同时使用EEG和眼动追踪",
"定量评估认知/生理状态",
"比较单一模态与融合方法"
]
}

2.2 纳入研究统计

指标 数值
检索文献数 1523篇
筛选后纳入 47篇
主要应用场景 驾驶(23篇)、航空(8篇)、手术(7篇)、教育(9篇)

3. EEG认知指标

3.1 频带特征

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# EEG频带定义
EEG_BANDS = {
"delta": {"range": (0.5, 4), "unit": "Hz"},
"theta": {"range": (4, 8), "unit": "Hz"},
"alpha": {"range": (8, 13), "unit": "Hz"},
"beta": {"range": (13, 30), "unit": "Hz"},
"gamma": {"range": (30, 100), "unit": "Hz"}
}

# 认知负荷相关变化
cognitive_load_eeg_changes = {
"theta": "增加 (+30-50%)", # 前额叶、中央区
"alpha": "减少 (-20-40%)", # 顶叶
"beta": "增加 (+10-30%)", # 额叶
"theta_alpha_ratio": "上升", # 核心指标
"engagement_index": "上升" # beta/(theta+alpha)
}

3.2 关键电极位置

1
2
3
4
5
6
7
# 认知负荷检测关键电极
key_electrodes = {
"frontal": ["Fz", "F3", "F4"], # theta增加最显著
"central": ["Cz", "C3", "C4"], # 运动相关
"parietal": ["Pz", "P3", "P4"], # alpha抑制
"optimal_subset": ["Fz", "F3", "F4", "Pz"] # 最少电极配置
}

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

def extract_eeg_features(eeg_signal, fs=256):
"""
提取EEG认知负荷特征

Args:
eeg_signal: EEG信号 (channels, samples)
fs: 采样频率

Returns:
features: 特征字典
"""
features = {}

# 定义频带
bands = {
"theta": (4, 8),
"alpha": (8, 13),
"beta": (13, 30)
}

for band_name, (low, high) in bands.items():
band_power = []
for ch in range(eeg_signal.shape[0]):
# Welch功率谱
freqs, psd = welch(eeg_signal[ch], fs=fs, nperseg=256)

# 频带功率
band_idx = (freqs >= low) & (freqs <= high)
power = np.sum(psd[band_idx])
band_power.append(power)

features[f"{band_name}_power"] = np.array(band_power)

# 计算比值
features["theta_alpha_ratio"] = (
features["theta_power"] / (features["alpha_power"] + 1e-6)
)

features["engagement_index"] = (
features["beta_power"] / (features["theta_power"] + features["alpha_power"] + 1e-6)
)

return features

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
# 眼动分心指标
eye_tracking_metrics = {
"blink": {
"blink_rate": "眨眼率 (次/分钟)",
"blink_duration": "眨眼时长 (ms)",
"change_during_distraction": "眨眼率下降20-40%"
},
"fixation": {
"fixation_duration": "注视时长 (ms)",
"fixation_dispersion": "注视分散度",
"change_during_distraction": "分散度增加"
},
"saccade": {
"saccade_frequency": "扫视频率",
"saccade_amplitude": "扫视幅度",
"change_during_distraction": "频率增加"
},
"pupil": {
"pupil_diameter": "瞳孔直径",
"pupil_variability": "瞳孔变化",
"change_during_distraction": "直径增加10-20%"
}
}

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import numpy as np

def calculate_perclos(gaze_data, threshold=0.5, window_sec=60, fs=30):
"""
计算PERCLOS值(眼睑闭合时间百分比)

Args:
gaze_data: 眼睑开度序列 (0-1), shape=(N,)
threshold: 闭眼阈值
window_sec: 滑动窗口秒数
fs: 采样频率

Returns:
perclos_values: PERCLOS百分比序列
"""
window_samples = int(window_sec * fs)
perclos_values = []

for i in range(len(gaze_data) - window_samples):
window = gaze_data[i:i+window_samples]
closed_ratio = np.sum(window < threshold) / window_samples
perclos_values.append(closed_ratio * 100)

return np.array(perclos_values)

def calculate_gaze_dispersion(fixation_points):
"""
计算注视分散度

Args:
fixation_points: 注视点坐标 (N, 2)

Returns:
dispersions: 分散度值
"""
# 计算注视点到中心的距离
center = np.mean(fixation_points, axis=0)
distances = np.linalg.norm(fixation_points - center, axis=1)

# 分散度为距离的标准差
dispersion = np.std(distances)

return dispersion

5. 融合方法对比

5.1 融合策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 融合策略分类
fusion_strategies = {
"feature_level": {
"description": "特征级融合",
"method": "将EEG和眼动特征拼接后输入分类器",
"advantage": "简单易实现",
"disadvantage": "忽略模态间相关性"
},
"decision_level": {
"description": "决策级融合",
"method": "分别训练EEG和眼动分类器,后融合结果",
"advantage": "模块化设计",
"disadvantage": "未利用联合信息"
},
"hybrid": {
"description": "混合融合",
"method": "CNN+Attention联合学习",
"advantage": "性能最优",
"disadvantage": "计算复杂度高"
}
}

5.2 性能对比表

方法 准确率 精确率 召回率 F1分数
EEG仅 70-80% 68-78% 72-82% 70-80%
ET仅 75-85% 73-83% 77-87% 75-85%
特征级融合 85-92% 83-90% 87-94% 85-92%
决策级融合 82-88% 80-86% 84-90% 82-88%
混合融合 88-95% 86-93% 90-97% 88-95%

5.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
import torch
import torch.nn as nn

class EEGEyeFusionNet(nn.Module):
"""
EEG+眼动追踪混合融合网络
"""

def __init__(self, eeg_channels=32, eye_features=10, num_classes=2):
super().__init__()

# EEG分支: 1D CNN
self.eeg_encoder = nn.Sequential(
nn.Conv1d(eeg_channels, 64, kernel_size=3, padding=1),
nn.ReLU(),
nn.MaxPool1d(2),
nn.Conv1d(64, 128, kernel_size=3, padding=1),
nn.ReLU(),
nn.MaxPool1d(2),
nn.Conv1d(128, 256, kernel_size=3, padding=1),
nn.ReLU(),
nn.AdaptiveAvgPool1d(1)
)

# 眼动分支: MLP
self.eye_encoder = nn.Sequential(
nn.Linear(eye_features, 64),
nn.ReLU(),
nn.Linear(64, 128),
nn.ReLU()
)

# 交叉注意力
self.cross_attention = nn.MultiheadAttention(
embed_dim=256,
num_heads=8,
batch_first=True
)

# 分类头
self.classifier = nn.Sequential(
nn.Linear(256 + 128, 128),
nn.ReLU(),
nn.Dropout(0.5),
nn.Linear(128, num_classes)
)

def forward(self, eeg, eye_features):
# EEG编码
eeg_feat = self.eeg_encoder(eeg).squeeze(-1) # (B, 256)

# 眼动编码
eye_feat = self.eye_encoder(eye_features) # (B, 128)

# 交叉注意力
eeg_feat = eeg_feat.unsqueeze(1) # (B, 1, 256)
attn_out, _ = self.cross_attention(eeg_feat, eeg_feat, eeg_feat)
eeg_feat = attn_out.squeeze(1) # (B, 256)

# 融合
fused = torch.cat([eeg_feat, eye_feat], dim=1) # (B, 384)

# 分类
output = self.classifier(fused)

return output

6. 实验数据流

graph LR
    A[EEG采集] --> C[预处理]
    B[眼动采集] --> D[预处理]
    C --> E[特征提取]
    D --> F[特征提取]
    E --> G[theta/alpha比]
    E --> H[engagement index]
    F --> I[PERCLOS]
    F --> J[注视分散度]
    G --> K[特征融合]
    H --> K
    I --> K
    J --> K
    K --> L[分类器]
    L --> M[认知状态]

7. IMS应用启示

7.1 技术路线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# IMS认知分心检测路线
ims_roadmap = {
"phase_1": {
"goal": "眼动追踪认知分心检测",
"approach": "基于现有DMS摄像头",
"accuracy_target": "≥80%",
"timeline": "6个月"
},
"phase_2": {
"goal": "多模态融合",
"approach": "眼动+方向盘+踏板",
"accuracy_target": "≥85%",
"timeline": "12个月"
},
"phase_3": {
"goal": "生理信号融合(可选)",
"approach": "眼动+EEG头环/座椅压力",
"accuracy_target": "≥90%",
"timeline": "18个月"
}
}

7.2 成本分析

方案 硬件成本 开发周期 准确率
眼动仅 $0 (复用DMS) 6月 80%
眼动+行为 $0 12月 85%
眼动+EEG $200-500 18月 90%+

7.3 验证标准

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Euro NCAP认知分心验证
validation_criteria = {
"detection_time": {
"requirement": "≤10秒",
"test_condition": "驾驶员分心后启动检测"
},
"accuracy": {
"requirement": "≥85%",
"test_scenarios": [
"认知分心(心算任务)",
"情绪分心(情绪唤起)",
"疲劳分心(睡眠剥夺)"
]
},
"false_alarm": {
"requirement": "≤10%",
"test_scenarios": [
"正常驾驶",
"复杂交通环境"
]
}
}

8. 参考资料

来源 链接
论文原文 https://doi.org/10.3389/fnrgo.2025.1736672
驾驶员分心EEG综述 https://www.scenic.org/wp-content/uploads/2024/03/Driver_Distraction_From_the_EEG_Perspective_A_Review.pdf
眼动分心检测 https://link.springer.com/chapter/10.1007/978-981-96-6603-4_7

结论: EEG+眼动追踪融合是认知分心检测的最优方案,准确率达85-95%。IMS应优先实现眼动分心检测(复用DMS硬件),后续考虑多模态融合。


EEG+眼动追踪融合:认知分心检测的系统综述解读
https://dapalm.com/2026/07/27/2026-07-27-eeg-eye-tracking-cognitive-distraction-systematic-review/
作者
Mars
发布于
2026年7月27日
许可协议