APP下载

基于树莓派的眼部疲劳状态实时监测系统

2019-05-21吴良峰

闽江学院学报 2019年2期
关键词:树莓眼部人脸

林 虹, 吴良峰

(1. 阳光学院信息工程学院, 福建 福州 350015;2. 福州瑞芯微电子股份有限公司底层平台中心, 福建 福州 350003)

0 引言

国内外相关文献研究显示,疲劳驾驶状态的检测方法主要有3种:基于车辆行为特征的检测方法(行驶路线、方向盘转角、相对道路偏移等)[1]、基于生理信号特征的检测方法(脑电信号(EEG)、心电信号(ECG)、肌电信号(EMG)等)[2]和基于驾驶员行为特征的检测方法(眼部特征、唇部特征、面部朝向等)[3-4]。其中,实时分析眼部特征的非接触式检测方法,主要是基于计算机视觉方法,采用图像识别技术提取眼部特征判断疲劳状态,具有可靠性高、准确度高和容易实现等优势,是当前疲劳驾驶检测领域的研究热点。

目前,用于评估眼部疲劳的有效特征参数有眨眼频率、PERCLOS(percentage of eyelid closure over the pupil)[5]和眼部纵横比EAR(eye aspect ratio)[6]等。García等使用红外立体摄像头获取人脸图像,基于Viola-Jones算法和Hat变换提取眼部信息,计算PERCLOS参数实现疲劳状态的检测[7]。牛清宁等利用SmartEye系统提取眨眼频率、PERCLOS、注视方向等多个特征参数,提出利用滑移时窗融合的方法,对各参数进行融合,疲劳检测的准确率达到83.84%[8]。此类研究主要集中在眼部区域的定位和分割,采用单个或多个眼部特征参数来判断疲劳状态,准确率已经达到较高的水平,但算法一般比较复杂、开发难度大,对硬件平台的性能要求较高,不利于实际推广使用。因此,T Musale等基于嵌入式平台和USB摄像头,设计了成本低且结构简单的疲劳驾驶检测系统[9-10],但这些系统的疲劳检测算法比较简单,主要使用OpenCV自带的人眼检测分类器haarcascade_eye_tree_eyeglasses.xml或Circle Hough Transform检测眼睛是否张开,而没有计算眼部疲劳的特征参数,所以系统的准确性不高。鉴于此,本文提出在树莓派开发平台上,利用Python开发语言实现眼部特征参数EAR的提取算法,搭建了一个疲劳状态实时监测预警系统,在预防交通事故方面具有较好的实用性。

1 系统总体方案设计

考虑到疲劳状态图像处理的实时性和疲劳状态检测的准确性,系统的总体架构如图1所示。采用树莓派开发板作为系统的嵌入式控制单元,用于运行图像采集和图像处理的程序,以及控制预警模块;使用USB摄像头实时采集机动车驾驶员的人脸和眼部图像视频流。该视频流的每一帧图像作为驾驶员疲劳状态监测的源数据;采用OpenCV计算机视觉库、Dlib机器学习库和Python开发语言对驾驶员的人脸图像进行处理,通过计算EAR参数来实时检测眼部张合度,判断驾驶员的疲劳状态。当检测到驾驶员处于疲劳驾驶的状态时,通过语音预警的方式提醒驾驶员注意安全行车。

图1 系统总体架构图Fig.1 System overall architecture diagram

2 系统软硬件平台

2.1 嵌入式控制单元

考虑到图像采集和图像处理算法的复杂性,以及疲劳驾驶检测的应用场景对体积、安装与成本的要求,采用树莓派开发板(raspberry pi, RPI)作为控制单元,它是一款基于ARM的多版本微型开发板,具有丰富的外设接口,支持多种操作系统,并且价格便宜。本文采用的是树莓派3代B型开发板,其SOC为Broadcom BCM2837,内嵌ARM Cortex-A53 1.2 GHz 64-bit quad-core ARMv8的CPU,GPU为Broadcom VideoCrore IV,支持OpenGL ES 2.0和1080p 30 H.264/MPEG-4 AVC高清解码器,内存为1 GB LPDDR2,外设方面,支持4个USB口、1个网络接口和1个HDMI接口等。同时,树莓派开发板支持Raspbian、Kali Linux、RISC OS等多种操作系统,本文使用的是默认的免费操作系统Raspbian,它是基于Debian的一个版本,并且针对树莓派的硬件进行了专门的优化。同时,采用Python作为主要开发语言。Python语言简洁、易读易扩展,并且具有丰富和强大的库,如科学计算扩展库:NumPy、SciPy和matplotlib等,非常适合于研究图像处理。

2.2 实时视频图像采集单元

图2 摄像头安装示意图Fig.2 Schematic diagram of camera installation

图像的采集使用的是Logitech B910型号USB高清摄像头,该摄像头支持YUY2/JPEG格式,最大分辨率1080P,最大帧率30FPS,可以满足本文研究中对图像的清晰度和实时性的要求。将摄像头连接到树莓派的USB接口,并将摄像头放置在车子内部的仪表盘上方,如图2所示。在树莓派上,使用Python的imutils包采集实时的视频流,进而获取视频流的每一帧图像,用于后续的图像处理。

2.3 OpenCV的优化

为了提高OpenCV在树莓派上的运行效率,需要根据树莓派的硬件对OpenCV进行配置优化,主要是进行NEON和VFPV3配置。树莓派的处理器内核是1.2 GHz 4×ARM Cortex-A53,支持NEON和VFPV3。其中,NEON是ARM架构扩展,支持SIMD(单指令,多数据),可以用于加快视频和图像处理。VFPV3是ARM为浮点运算提供的硬件支持,可以增强图像应用的处理性能。编译完成后,直接使用make install命令安装OpenCV即可。基于ARM的硬件优化,可以提高OpenCV的神经网络在树莓派开发板上的运行速率,在对OpenCV进行基准测试时,执行神经网络GoogLeNet和SqueezeNet的效率提高约30%。

3 疲劳状态检测算法的实现

疲劳状态检测的算法流程如图3所示。系统启动后,先使用树莓派自带的UVC驱动初始化USB摄像头以获取连续的视频图像帧,这些图像帧中具有驾驶员脸部和眼部的关键信息。通过Python的imutils包的VideoStream读取一帧图像,然后对这帧图像依次进行人脸检测、眼部特征提取和眼部纵横比检测,判断这帧图像是否属于疲劳状态,完成对这帧图像的疲劳状态检测后,获取下一帧图像,进行循环检测。

图3 疲劳状态检测算法主流程图Fig.3 Main flow chart of fatigue state detection algorithm

3.1 人脸检测

人脸检测是疲劳状态检测流程的第一步,也是眼部特征提取的基础。OpenCV和Dlib都提供了人脸检测的方法,其中,OpenCV使用的是灰度图像中弱特征检测的方法。首先,调整图像的大小并进行灰度转换,然后使用OpenCV库中已经训练好的Haar分类器XML文件haarcascade_frontalface_default.xml进行人脸检测。Dlib使用的是基于HOG特征和线性SVM的人脸检测方法,Dalal和Triggs证明了该方法可用于训练高度精确的物体分类器[11]。

在树莓派开发板上分别用两种方法检测450 pix×450 pix的图像,处理器运行在1.2 GHz频率。测试结果表明,OpenCV的Haar特征分类器比Dlib的HOG特征与级联分类器的人脸检测准确度低,特别是检测侧脸时精度较低,但在检测速度方面,OepnCV会比Dlib快很多,OpenCV的人脸检测平均时间约为50 ms,即20 fps,而Dlib的人脸检测平均时间约为70 ms,即14 fps。考虑到本文的人脸检测算法是运行在硬件性能和资源十分有限的嵌入式系统中,并且人脸检测的图像背景相对简单,所以选择检测速度更快的OpenCV Haar特征分类器来检测人脸。

3.2 眼部特征提取

图4 Dlib库的人脸68点标记模型Fig.4 Face 68 point markup model of Dlib Library

眼部特征提取使用的是Dlib库提供的人脸68点标记方法,该方法是基于Kazemi V和Sullivan J的算法ERT(ensemble of regression trees)级联回归[12],即基于梯度提高学习的回归树方法。该算法使用级联回归因子,首先需要使用一系列标定好的人脸图片作为训练集,然后会生成一个模型(shape_predictor_68_face_landmarks.dat),毫秒级别就可以实现准确的人脸标记。Dlib库的人脸68点标记模型如图4所示,使用Python的dlib.shape_predictor对整张人脸进行扫描,获取到68个特征点的(x,y)坐标,然后再进一步提取左眼的6个特征点坐标和右眼的6个特征点坐标,供后续EAR参数的计算使用。

3.3 眼部张合度检测

眼部的张合度使用EAR参数来衡量,通过计算EAR的数值,就可以判断眼部的张合状态。根据3.2节,使用Dlib库可以提取眼部的6个特征点,以p1、p2、p3、p4、p5、p6标记6个特征点对应的坐标[6],如图5所示。

图5 眼部特征点标记示意图Fig.5 Sketch map of eye feature points

EAR的计算公式:

(1)

分子中计算的是眼部的特征点在垂直方向上的距离,分母计算的是眼部的特征点在水平方向上的距离。由于水平点只有一组,而垂直点有两组,所以分母乘上了2,以保证两组特征点的权重相同。EAR值在眼睛睁开时是基本保持不变的,只在小范围内上下浮动,而当眼睛闭合时,EAR值会迅速下降。使用Python的Numpy库可以方便快速地计算出EAR值。

3.4 疲劳状态判断

软件中设置3个参数:EAR阈值、疲劳帧数阈值以及连续闭眼总帧数,用于疲劳状态的判断。EAR的阈值可以根据不同驾驶员的实际眼部特征进行训练测试,从而自动调整阈值。疲劳帧数的阈值设置,与系统处理图像的速率以及每次眨眼的时间有关系,本系统可完成大约8 fps的疲劳状态检测,正常每次眨眼的时间为0.2~0.4 s。在本文的实验中,EAR的阈值设置为0.25,疲劳帧数阈值为16帧,连续闭眼总帧数初始值为0帧。如果检测到当前帧的EAR值小于阈值,则连续闭眼的总帧数加1,否则连续闭眼总帧数复位为0。当连续闭眼总帧数大于疲劳帧数阈值时,也即检测到闭眼超过2 s,则判断驾驶员处于疲劳状态,立即通过语音预警模块发出语音提醒。

4 系统测试与分析

在机动车上搭建本文设计的系统,通过真实的驾驶模拟实验,采集驾驶人在正常驾驶和疲劳驾驶状态下的面部视频数据,验证系统的实时性和准确性。测试的场景包括不同光照、不同视觉角度、是否戴眼镜等条件下的人脸特征点提取和疲劳状态检测。

4.1 人脸特征点提取的测试与分析

系统提取驾驶员的人脸特征点如图6所示,共68个关键特征点,全部以红点标记,与Dlib库的人脸68点标记模型一致。其中,在正常光照下,驾驶员正向平视、仰视、俯视时,左眼和右眼分别检测到6个清晰的特征点,并且,在夜间情况下,只要有暗光,也能够清晰检测到眼部特征,说明系统的眼部特征提取算法达到预期效果。但是,在侧脸角度偏大时,提取的眼部特征和轮廓特征开始出现偏离。

图6 驾驶员人脸特征点提取效果图Fig.6 Effect diagram of driver’s face feature point extraction

4.2 眼部疲劳状态检测的测试与分析

模拟测试场景包括:不同光照条件下,驾驶员正常驾驶和疲劳驾驶状态测试,结果如图7所示;不同视觉角度条件下,驾驶员正常驾驶和疲劳驾驶状态测试,结果如图8所示;佩戴眼镜条件下,驾驶员正常驾驶和疲劳驾驶状态测试,结果如图9所示。表1统计了不同测试条件下,正常驾驶和疲劳驾驶的EAR值。

图7测试结果表明,在正常光照情况下,驾驶员正向平视驾驶时,系统检测到EAR值维持在0.33~0.38。在疲劳驾驶的状态下,EAR值均低于0.15,当驾驶员眼睛处于完全闭合的状态时,EAR值维持在0.08左右。这说明系统设置EAR的阈值为0.25,是有效且合理的。系统对于驾驶员的眼睛连续闭合超过2 s的情况,均能准确检测为疲劳状态并实时预警,并且对于正常眨眼的情况,不会存在误判。此外,在光线增强时,系统仍然能够准确区分出正常驾驶和疲劳驾驶状态,但在夜间情况下,由于摄像头提取的驾驶员疲劳状态时的眼部特征不清晰,导致EAR值偶尔偏高。

图7 不同光照条件下,正常驾驶和疲劳驾驶检测结果Fig.7 Test results of normal driving and fatigue driving under different light conditions

图8测试结果表明,驾驶员仰视与正向平视的检测效果相似;驾驶员俯视时,由于眼部的纵向高度变小,所以正常驾驶的EAR值会偏低,存在误判的风险;驾驶员侧视时,由于Dlib对侧脸检测的结果不够准确,且本文的算法没有对侧脸进行优化,所以EAR值会偏高。图9测试结果表明,当驾驶员配戴眼镜时,镜片虽然存在反光,但基本不影响系统的检测结果。

图8 不同视觉角度下,正常驾驶和疲劳驾驶检测结果Fig.8 Test results of normal driving and fatigue driving under different visual angles

状态EAR正常光照亮光夜间仰视俯视侧视戴眼镜正常驾驶0.360.350.370.370.240.420.37疲劳驾驶0.080.050.190.090.100.270.10

5 结论

机动车模拟驾驶实验结果证明,这个疲劳监测系统能够比较准确地检测到驾驶人员的疲劳状态并做出有效预警。特别地,系统采用树莓派开发板实现,简化了系统结构,通过对OpenCV进行优化,并联合Dlib进行人脸检测与人脸关键点提取,计算EAR特征参数用于评估眼部疲劳状态的方法,有效地提高了系统的实时性和准确性。

此外,疲劳状态的检测不仅适用于机动车驾驶人员,建筑工地的挖掘机驾驶员、航空飞机驾驶员和边防的哨兵等也需要疲劳监测预防严重后果的发生。而这些人员的眼部行为特征差异性和环境差异性较大,使用本文研究的系统检测,可能会存在误判可能。因此,融合驾驶员面部特征、眨眼频率等多特征参数分析的方法、考虑不同光照条件、不同视觉角度以及个体行为特征差异性的影响等,这是值得进一步研究探讨的问题。

猜你喜欢

树莓眼部人脸
山间“小精灵”
——树莓
有特点的人脸
一起学画人脸
窥见眼部瑜伽
基于树莓派的骑行智能头盔设计
三国漫——人脸解锁
黄金水果红树莓
年度睡姿大盘点(下)
长得象人脸的十种动物
美目莫忘眉