1.系统设计
在本研究中,我们利用了一种基于EAR算法和MAR算法的叉车驾驶员疲劳检测系统。该系统由摄像头、外接音箱、树莓派微型计算机、云计算平台、互联网以及Web端界面等关键组件构成。系统架构如图所示,其工作流程开始于摄像头对驾驶员面部的实时图像采集,其工作流程框图如图1所示。

图1
系统运用Dlib的人脸识别技术和OpenCV的图像处理功能,精确定位驾驶员的面部及其特征点。接着,通过EAR算法计算眨眼频率,以及通过MAR算法计算哈欠频率,这两种算法都设有特定的阈值。当检测到的频率数据超过这些阈值时,系统会触发报警机制,通过外接音箱发出提醒,并将相关信息传输至云平台。最终,这些数据会被发送至工厂的Web端界面,由管理员对驾驶员进行进一步的安全警告。
此系统的设计旨在实时监控叉车驾驶员的疲劳状态,通过及时的反馈预防潜在的安全事故,从而提高工作场所的整体安全性。
2.Raspberry Pi 4B的工作原理
Raspberry Pi 4B是一款高性能的微型计算机,它基于Broadcom BCM2711 SoC(系统级芯片),集成了1.5 GHz的64位四核ARM Cortex-A72 CPU。这款CPU具备更高的处理速度和更佳的能效比,使得Raspberry Pi 4B能够处理复杂的计算任务和多任务操作。
此外,Raspberry Pi 4B配备了LPDDR4-3200 SDRAM,根据不同型号,内存可选1GB、2GB、4GB或8GB²。这种高速内存支持与GPU共享,提供了足够的带宽来处理图像和视频数据,这对于运行OpenCV和Dlib库进行图像处理和机器学习任务至关重要。
在网络连接方面,Raspberry Pi 4B提供了10/100/1000 Mbit/s的以太网接口和支持2.4/5 GHz双频的802.11b/g/n/ac无线网络,以及Bluetooth 5.0技术,确保了设备能够快速且稳定地连接到网络资源³。
Raspberry Pi 4B还支持多种操作系统,包括基于Debian的Raspbian Buster,以及Ubuntu等。用户可以通过NOOBS(新的开箱即用软件)或直接烧录镜像的方式安装操作系统¹。
3.Dlib和OpenCV的工作原理
(1)
Dlib人脸关键点检测
本系统采用Dlib库提供的68个人脸关键点进行检测,以准确捕捉驾驶员的面部特征。系统首先利用dlib.get_frontal_face_detector()函数定位面部,然后通过dlib.shape_predictor(predictor_path)函数识别出眼睛和嘴巴的关键点索引,从而实现对驾驶员面部的精确识别。
(2)OpenCV眼睛位置检测
OpenCV作为一个功能丰富的开源计算机视觉库,提供了一系列图像处理和视觉算法。本系统通过OpenCV的VideoCapture类直接与摄像头接口,获取实时视频流。系统分析视频帧,提取画面尺寸、高度、宽度和帧率信息。随后,系统循环处理每一帧,利用OpenCV的坐标点类型cv::P oint,根据检测到的左眼、右眼和嘴巴的坐标,绘制出相应的面部特征形状。
4.用于疲劳检测的EAR算法和MAR算法原理
(1)EAR算法
在本文中,我们探讨了一种基于眼睛纵横比(Eye Aspect Ratio, EAR)的眨眼频率检测方法,该方法由Soukupová等人于2016年提出。EAR算法通过分析眼睛和眼睑轮廓的几何位置来计算眼睛的长宽比,其计算公式如下:
![]()

![]()

图2

图3
其中,P1至P6代表眼睛轮廓上的特定点。如图所示,Dlib人脸检测和OpenCV特征点标注结果表明,左眼的坐标为36至41,右眼的坐标为42至47。
在正常状态下,眼睛处于开放状态时,EAR值会在一定范围内波动。当眼睛闭合时,EAR值会显著下降,理论上闭眼状态下EAR值趋近于0。正常眨眼动作的速度较快,通常在1至3帧内完成。然而,在疲劳状态下,眨眼速度减慢,频率增加。当EAR值迅速降至某阈值以下,随后又快速回升至该阈值以上,可判定为一次眨眼。若在1分钟内眨眼频率显著高于平时,则可能表明驾驶员处于疲劳状态。
在实际检测中,通过计算左右眼的EAR值并求其平均值,以得到最终的EAR指数。根据实验数据,我们将EAR阈值设定为0.2,即当EAR值低于0.2且随后迅速升高至0.2以上时,判定为一次眨眼。文献显示,正常情况下人每分钟眨眼15至20次。因此,当1分钟内眨眼频率超过20次时,系统将判定驾驶员疲劳,并发出警报提醒。这些参数的设定需根据具体情况进行调整。
(2)MAR算法
在本研究中,我们采用嘴部纵横比(Mouth Aspect Ratio, MAR)算法来监测打哈欠频率,该算法的原理与眨眼频率检测相仿。通过Dlib库与OpenCV技术,我们能够精确捕获嘴部的关键节点。具体来说,使用图2中的点51、53、57、59作为嘴部的纵坐标对应M2、M3、M4、M5,点49、55作为横坐标对应M1、M4,以此来计算嘴部的张开程度,即MAR值。MAR的计算公式如下:

![]()
在正常情况下,如说话或哼歌时,嘴部的张开时间较短,张开程度也较小。然而,在疲劳状态下,驾驶员可能会出现打哈欠的行为,此时嘴部张开的时间和程度都会增加。一般而言,人在说话时嘴部的连续张开时间不会超过3秒。因此,当MAR值从低于某一阈值上升至高于该阈值,并且这一过程的持续时间超过3秒时,我们将其记录为一次打哈欠行为。根据Ji等人(2018年)对超过1000张打哈欠照片的统计分析,我们采用0.75作为MAR的判断阈值,该阈值的准确率达到97.5%。此外,当1分钟内打哈欠次数超过3次时,系统将判定驾驶员处于疲劳状态,并立即发出警报提醒。这些参数的设定需根据具体情况进行调整。
拟解决的问题:
以树莓派端作为人脸位置追踪(保证摄像头正对驾驶员脸部)的图像采集平台,并由Ubuntu操作系统作为图像的实时处理云端计算平台,二者通过网线连接,由socket技术进行通信;二自由度舵机由树莓派4B控制来进行人脸位置跟踪,并和Ubuntu操作系统运行OpenCV和Dlib库做数据的采集和分析,结合EAR和MAR算法,实现对驾驶员眨眼频率以及打哈欠频率的检测,再设置EAR和MAR的判断阈值,就可实时监测驾驶员状态,并推断此时驾驶员是否处于疲劳驾驶的状态,一旦超过阈值,就说明驾驶员已处于疲劳驾驶的状态,由树莓派控制的音响则会立刻发出语音播报提醒。
预期成果:
建立一套基于Dlib与OpenCV人脸识别的疲劳驾驶检测系统,并发表研究论文一篇,申请专利一项。