DMS 眼动追踪鲁棒性:墨镜、口罩、低光照挑战

前言

眼动追踪是 DMS 的核心技术,但在实际场景中面临多种挑战:

挑战 发生频率 检测难度
墨镜遮挡
口罩遮挡
低光照
强光眩光

一、墨镜挑战

1.1 问题分析

问题 说明
红外吸收 部分墨镜吸收 IR 光
反射干扰 镜面反射影响检测
无可见瞳孔 可见光无法穿透

1.2 解决方案

方案 原理 效果
高功率 IR 光源 增强红外穿透 部分墨镜可用
940nm IR 更高穿透率 效果更好
多角度 IR 光源 减少反射 减少干扰
墨镜检测 + 提示 提示用户摘下 保守方案

1.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
# 墨镜检测(概念代码)
import cv2
import numpy as np

class SunglassesDetector:
def __init__(self):
self.ir_threshold = 30
self.visible_threshold = 50

def detect(self, ir_frame, visible_frame):
"""
检测是否佩戴墨镜

原理:
- IR 图像中瞳孔区域亮度低(被遮挡)
- 可见光图像中眼睛区域亮度低(墨镜)
"""
# 1. 人眼区域检测
eye_roi_ir = self._get_eye_roi(ir_frame)
eye_roi_vis = self._get_eye_roi(visible_frame)

# 2. 计算亮度
ir_brightness = np.mean(eye_roi_ir)
vis_brightness = np.mean(eye_roi_vis)

# 3. 判断
is_sunglasses = (
ir_brightness < self.ir_threshold and
vis_brightness < self.visible_threshold
)

return {
'is_sunglasses': is_sunglasses,
'ir_brightness': ir_brightness,
'vis_brightness': vis_brightness
}

二、口罩挑战

2.1 问题分析

问题 说明
面部特征丢失 下半脸特征不可用
打哈欠检测失效 无法检测嘴部动作
头部姿态估计偏差 特征点减少

2.2 解决方案

方案 说明
上半脸特征 仅使用眼动特征
多任务学习 训练时加入口罩数据
替代指标 眨眼频率代替打哈欠

2.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
# 口罩场景下的疲劳检测
class MaskRobustFatigueDetector:
def __init__(self):
self.eye_features = EyeFeatureExtractor()
self.head_features = HeadPoseExtractor()

def detect(self, landmarks, face_mask_detected):
"""
口罩场景下的疲劳检测

- 若检测到口罩,仅使用上半脸特征
- 若无口罩,使用完整特征
"""
if face_mask_detected:
# 仅使用眼动特征
features = {
'perclos': self.eye_features.get_perclos(landmarks),
'blink_rate': self.eye_features.get_blink_rate(landmarks),
'gaze_deviation': self.eye_features.get_gaze_deviation(landmarks),
'head_nod': self.head_features.get_nod_frequency(landmarks)
}
# 不使用打哈欠特征
else:
# 使用完整特征
features = {
'perclos': self.eye_features.get_perclos(landmarks),
'blink_rate': self.eye_features.get_blink_rate(landmarks),
'yawn_frequency': self._get_yawn_frequency(landmarks),
# ...
}

return self._classify_fatigue(features)

三、低光照挑战

3.1 问题分析

问题 说明
瞳孔检测失败 对比度不足
特征点丢失 面部检测困难
噪声增加 图像质量下降

3.2 解决方案

方案 说明 效果
IR 红外补光 不受环境光影响 推荐
主动 IR 光源 车内 IR LED 效果稳定
低光增强算法 图像增强 辅助

3.3 IR 补光设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
IR 补光设计:

┌─────────────────────────────────────────────┐
│ IR 光源配置 │
├─────────────────────────────────────────────┤
│ 波长:850nm / 940nm
│ - 850nm:穿透力强,可能有红暴 │
│ - 940nm:无红暴,穿透力稍弱 │
├─────────────────────────────────────────────┤
│ 布局: │
│ - 近 IR:摄像头附近(眼动追踪) │
│ - 远 IR:车顶(全舱监控) │
├─────────────────────────────────────────────┤
│ 功率控制: │
│ - 根据环境光自动调节 │
│ - 低光时增加功率 │
│ - 强光时降低功率 │
└─────────────────────────────────────────────┘

四、多特征融合方案

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
多特征融合鲁棒性架构:

┌─────────────────────────────────────────────┐
│ 输入层 │
│ ├─ RGB 图像 │
│ ├─ IR 图像 │
│ └─ 深度图像(可选) │
├─────────────────────────────────────────────┤
│ 特征提取层 │
│ ├─ 眼动特征(IR 主导) │
│ ├─ 面部特征(RGB 辅助) │
│ └─ 头部姿态(多模态) │
├─────────────────────────────────────────────┤
│ 鲁棒性判断层 │
│ ├─ 墨镜检测 │
│ ├─ 口罩检测 │
│ └─ 光照评估 │
├─────────────────────────────────────────────┤
│ 自适应融合层 │
│ ├─ 根据遮挡情况调整权重 │
│ └─ 选择最优特征组合 │
├─────────────────────────────────────────────┤
│ 输出层 │
│ ├─ 疲劳等级 │
│ ├─ 分心等级 │
│ └─ 置信度 │
└─────────────────────────────────────────────┘

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
# 自适应特征权重
class AdaptiveFeatureFusion:
def __init__(self):
self.weights = {
'eye': 0.4,
'face': 0.3,
'head': 0.3
}

def update_weights(self, occlusion_info):
"""
根据遮挡情况调整权重
"""
if occlusion_info['sunglasses']:
# 墨镜场景:降低眼动权重,增加头部权重
self.weights['eye'] = 0.2
self.weights['head'] = 0.5

if occlusion_info['mask']:
# 口罩场景:降低面部权重,增加眼动权重
self.weights['face'] = 0.1
self.weights['eye'] = 0.5

if occlusion_info['low_light']:
# 低光场景:IR 特征权重增加
self.weights['eye'] = 0.5
self.weights['face'] = 0.2

def fuse(self, features):
"""
加权融合
"""
score = (
features['eye'] * self.weights['eye'] +
features['face'] * self.weights['face'] +
features['head'] * self.weights['head']
)
return score

五、性能评估

5.1 各场景表现

场景 基础方案 IR 增强 多特征融合
正常 95% 96% 97%
墨镜 40% 75% 85%
口罩 70% 72% 90%
低光照 50% 90% 92%

5.2 摄像头选择

摄像头类型 成本 鲁棒性 推荐场景
RGB 理想环境
IR 低光环境
RGB-IR 全场景

六、开发启示

6.1 传感器配置

配置 传感器 鲁棒性
基础 RGB 摄像头
标准 IR 摄像头 + IR LED
完整 RGB-IR 摄像头 + 多角度 IR LED

6.2 算法设计原则

原则 说明
IR 为主 不受环境光影响
多特征备份 单一特征失败时有替代
自适应权重 根据场景调整
降级策略 严重遮挡时提示用户

6.3 与 IMS 集成

功能 鲁棒性设计
眼动追踪 IR 为主,多特征备份
疲劳检测 PERCLOS + 头部姿态融合
分心检测 视线 + 头部方向融合

七、总结

关键要点

要点 说明
IR 是关键 不受环境光影响
墨镜最难处理 需高功率 IR 或提示用户
多特征融合 提升整体鲁棒性
自适应权重 根据场景动态调整

开发启示

启示 说明
RGB-IR 摄像头首选 全场景覆盖
多角度 IR 光源 减少反射干扰
降级策略必备 严重遮挡时提示用户
测试覆盖全面 墨镜、口罩、低光等

参考来源:

发布日期: 2026-04-14
标签: #眼动追踪 #鲁棒性 #墨镜检测 #IR摄像头


DMS 眼动追踪鲁棒性:墨镜、口罩、低光照挑战
https://dapalm.com/2026/04/14/2026-04-14-DMS-Eye-Tracking-Robustness-Sunglasses-Mask/
作者
Mars
发布于
2026年4月14日
许可协议