基于OpenCV 的驾驶员疲劳特征识别系统的设计

2023-01-08 16:48郑永涛谢伟豪陈逸群何俊阳
电子设计工程 2023年1期
关键词:嘴部树莓流程图

郑永涛,谢伟豪,陈逸群,何俊阳

(广东工业大学华立学院,广东广州 511325)

纵观道路交通上发生的交通事故,由驾驶员疲劳驾驶造成的交通事故不容小觑。而对于疲劳驾驶,一方面驾驶员自身很难发觉,另一方面即便发现了也不会引起驾驶员的重视[1-2]。为此,该文从驾驶员疲劳驾驶直观表现出来的现象出发,如驾驶过程中出现的连续打哈欠、犯困闭眼以及打盹等[3],设计了一款基于OpenCV 的驾驶员疲劳特征识别系统,通过计算机视觉处理技术,综合分析判断驾驶员当前的驾驶状态,发出语音警告,提醒驾驶员并引起驾驶员的重视。

1 系统总体设计

该系统设计以树莓派4B 为核心主控制板,结合外接摄像头采集图像信息,完成图像信息处理工作,并驱动语音警告系统实现提醒,在显示屏模块上显示当前的图像采集结果,方便图像分析及程序调试[4]。该系统由信息处理系统、信息采集系统、警告提醒系统、显示系统组成,系统结构整体设计框图如图1 所示。

图1 系统结构整体设计框图

2 系统硬件设计

2.1 树莓派主控板

为了更好地实现视觉处理,该系统设计采用树莓派4B 为主控制板。该主控制板是一款迷你式电脑,具备与其他微控制器(如51 单片机和STM32)相同的IO 引脚之外,还搭载1.5 GHz 的64 位四核处理器、8 GB 的内存、双频WiFi 和蓝牙5.0,两个micro-HDMI 端口控制分辨率高达4K 的双显示屏,四个USB 接口,其中有两个数据传输速率可达5 Gbit/s 的USB3.0。将内部环境配置好,以便烧录代码使用[5]。

2.2 摄像头信息采集

摄像头模块采用USB 接口的CMOS 摄像头,一方面考虑到主控制板上有四个USB 接口,并且相比主控制板上CSI 专用摄像头接口来说,USB 接口在拔插使用过程中更为方便。而且在PC 平台上进行系统程序开发调试过程中,USB 摄像头也可直接在PC平台上使用[6];另一方面CMOS 型摄像头相比CCD 型摄像头,具有低成本、低耗能、图像信息采集快、结构简单等优势。综上,摄像头模块采用30 万像素无畸变60 FPS CMOS OV7725 感光片摄像头,兼容Linux系统、免驱动、640×480 像素、均支持自动曝光、白平衡及增益。

2.3 语音警告提醒

当检测到驾驶员处于疲劳驾驶状态时,系统会发出相应的语音警告,起到提醒作用。由于树莓派的强大功能,外部硬件不需再接其他语音模块,只需利用树莓派自带的蓝牙5.0 与汽车内蓝牙配对连接或用3.5 mm 音频接口外接扬声器即可。先用设备录制一句“您已疲劳驾驶,请停车休息。”的wav 格式语音保存在树莓派中,当系统判断出疲劳驾驶时再调用该语音进行播放[7]。

2.4 显示屏模块

显示屏主要便于系统程序开发调试及观察系统检测识别情况,采用7 寸的分辨率为1 024×600 像素的显示屏与树莓派4B 兼容,再连接micro-HDMI接口。

3 系统软件设计

3.1 系统软件整体设计思路

系统开发除了搭建好相应的硬件外,还要配置好相应的环境来开发程序。该系统程序开发主要以raspbian 作为树莓派的操作系统,Python 作为开发语言,调用OpenCV 库与Dlib 库分别进行图像预处理和图像特征提取,再经过分析计算后进行疲劳状态的判断,并作出语音警告。系统软件整体设计流程图如图2 所示。

图2 系统软件整体设计流程图

3.2 基于OpenCV的图像预处理

系统通过摄像头实时获取驾驶员的图像,在采集过程中图像会受到驾驶室内等各种因素的影响,需要对图像进行预处理。OpenCV 拥有丰富的视觉处理算法,可以调用cvtColor 函数,对图像进行灰度化、对cvSmooth 函数进行平滑处理、对cvEqualizeHist函数进行直方图均衡化,对GaussianBlur 进行高斯滤波[8-9]。处理过程如图3 所示。

图3 OpenCV图像预处理过程

3.3 基于Dlib的图像特征提取

对于人脸检测,Dlib 的检测速度比OpenCV 的慢一些,但是其检测精度比OpenCV 的高,而且拥有更多的人脸识别模型库[10]。因此,该系统采用Dlib 库,分 别调用dlib.get_frontal_face_detector 和dlib.shape_predictor 函数来实现图像人脸检测及图像人脸特征提取,利用shape_predictor_68_face_landmarks.dat 开源模型对人脸模型进行处理,获取68 个特征点的位置坐标[11-12],为接下来眼动、嘴型和头部姿态关键点的提取做好准备。

3.3.1 眼部疲劳特征及判定

在68 个人脸特征点中,37~42 被标志为左眼,43~48 被标志为右眼。以左眼为例,通过式(1)计算眼睛纵横比EAR 值来检测眨眼与合眼。

在眼部训练数据中发现,睁眼时EAR 值会在固定的区域波动,合眼时EAR 值趋于零。因此,设置当EAR≤0.2 时,视眼睛处于眨眼、合眼状态[13]。为避免由于光线等因素刺激眼睛导致眨眼进而出现误判,以连续3 帧眼部图像EAR≤0.2 视为眨眼、合眼一次;若以合眼超过2 s视为疲劳状态,那么当系统检测连续合眼13 次(以系统处理一帧图像时间约为50 ms计算)便发出疲劳语音警告。眼部疲劳判定流程图如图4 所示。

图4 眼部疲劳判定流程图

3.3.2 嘴部疲劳特征及判定

疲劳状态除了会合眼外,打哈欠也是最明显的特征之一。根据被49~68 标志的嘴型,用式(2)计算嘴巴纵横比MAR 值来检测张嘴。

与眼部训练数据相似,嘴部训练数据时,在打哈欠状态下,嘴部张开明显,因此,可以设置当MAR≥0.8时,嘴巴处于张开状态[14]。为了避免驾驶员说话等情况导致张嘴出现误判,同样以连续3 帧嘴部图像MAR≥0.8 视为张嘴一次,如果连续张嘴13 次则视为一次深度哈欠,当1 min 内累计3 次深度哈欠,便发出疲劳语音警告。嘴部疲劳判定流程图如图5所示。

图5 嘴部疲劳判定流程图

3.3.3 头部姿态疲劳特征及判定

打盹表现在疲劳驾驶过程中头部倾斜、低头等姿势进入短暂的睡眠状态,因此,该系统以低头姿态作为疲劳检测点,以低头持续时间作为疲劳判定。首先由68 个人脸特征点标志的二维数字图像通过3DMM(3D Morphable Model)匹配出三维空间立体头部模型,调用OpenCV 中的solvePnp()函数获得旋转矩阵,最后将旋转矩阵转换成欧拉角,即头部姿势的仰俯角Pitch[15-16]。当Pitch≤10 时,视头部姿势为低头状态,为避免驾驶员看车载仪表盘等导致低头出现误判,同样以连续3 帧头部图像Pitch≤10 视为低头一次,如果连续低头13 次则视为一次犯困点头。当1 min 内累计3 次犯困点头,便发出疲劳语音警告。头部姿势疲劳判定流程图如图6 所示。

图6 头部姿势疲劳判定流程图

4 系统调试

将在PC 平台上开发好的程序移植到树莓派中,把摄像头、树莓派、显示屏及扬声器搭建好后安装在汽车驾驶室内,安装位置如图7 所示。

图7 安装调试系统

系统调试结果表明,在调整好摄像头的角度及设置好对应的阈值后,从显示屏上调出识别界面,受试者坐在主驾驶位,分别模拟犯困合眼、打哈欠及困意点头的动作,系统均能有效识别出疲劳驾驶状态,在显示屏上能够观察出相关参数的变化,扬声器能发出语音警告。该识别系统整体运行正常。

5 结论

基于OpenCV 的驾驶员疲劳特征识别系统主要以树莓派为数据信息处理核心,通过摄像头对驾驶员进行实时监测,获得图像信息,联合OpenCV 库和Dlib 库分别对图像预处理和人脸特征进行提取。通过提取驾驶员眼部、嘴部和头部姿势疲劳特征,即犯困下合眼、打哈欠、点头,以此综合分析判断驾驶员的驾驶状态,对疲劳驾驶状态进行预警告。该系统设计简单、成本低、易于安装和操作,系统运行良好,基本能实现预期目标,具有一定的实用价值。

猜你喜欢
嘴部树莓流程图
此人为何杠得如此嚣张?
圆号教学中嘴部教学的重要性及训练方法研究
基于树莓派的骑行智能头盔设计
高中素描头像教学中提高嘴部刻画能力的策略探究
一种程序源代码的标准化流程图转化方法∗
基于Horn-Schunck光流法的多目标反刍奶牛嘴部自动监测
基于树莓派的远程家居控制系统的设计
响应面法优化红树莓酒发酵工艺
宁海县村级权力清单36条
欧盟:速冻树莓比鲜食树莓市场更好