1. 项目背景与核心思路
在计算机视觉领域,疲劳驾驶检测一直是个热门且实用的研究方向。传统方案往往依赖昂贵的专业设备或复杂的传感器阵列,而基于普通摄像头的视觉方案则具有显著的成本优势。这个项目采用OpenCV+dlib的组合,通过实时计算眼睛纵横比(Eye Aspect Ratio, EAR)来实现轻量级疲劳检测。
我最早接触这个技术是在开发车载安全系统时,当时需要一种能在树莓派上实时运行的方案。经过多次迭代发现,EAR算法在准确性和计算效率之间取得了很好的平衡。相比基于深度学习的方法,这个方案对硬件要求极低,单核CPU就能流畅运行,非常适合嵌入式部署。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心原理与算法解析
2.1 面部关键点检测
dlib库的68点面部landmark检测是这个项目的基础。具体到眼部区域,每只眼睛对应6个特征点(从右眼外角顺时针编号):
code复制右眼:36-41
左眼:42-47
这些点分别标记了眼睑的四个角点和上下边缘中点。实测发现,在640x480分辨率下,dlib的检测精度足以满足EAR计算需求。
2.2 EAR计算公式推导
眼睛纵横比的计算公式看似简单却非常精妙:
code复制EAR = (||p2-p6|| + ||p3-p5||) / (2 * ||p1-p4||)
其中p1-p6对应眼周六个特征点。分子计算垂直方向的两段距离之和,分母计算水平方向距离。当眼睛闭合时,分子趋近于0导致EAR值骤降。
通过大量实验数据统计,我们得出经验阈值:
- EAR > 0.25:睁眼状态
- EAR ≤ 0.25:闭眼状态
这个阈值对亚洲人眼型可能需要微调至0.2-0.23。
3. 完整实现步骤
3.1 环境配置
推荐使用conda创建虚拟环境:
bash复制conda create -n fatigue_detection python=3.8
conda install -c conda-forge opencv dlib
特别注意:dlib的pip安装可能需要先安装CMake和Visual Studio Build Tools(Windows平台)。
3.2 关键代码实现
python复制from scipy.spatial import distance
def e
