基于树莓派的疲劳驾驶检测
本文介绍了一种基于树莓派3和Raspbian摄像头的驾驶员疲劳检测系统,利用OpenCV和dlib进行面部特征点检测,通过计算眼睛宽高比(EAR)判断困倦状态。当闭眼时间超过阈值时,系统触发声报警,并结合Ubidots云服务与Twilio API向相关人员发送含车牌号的警报短信,实现实时预警,有效提升行车安全。
使用树莓派3进行疲劳检测
摘要
驾驶员嗜睡是导致多起高速公路灾难的主要原因,会造成严重的身体伤害、经济损失和人员伤亡。实时实施驾驶员困倦检测将有助于避免重大事故。该系统专为四轮车设计,可检测驾驶员的疲劳或嗜睡状态,并向驾驶员发出警报。所提出的方法将使用500万像素的Raspbian摄像头,捕捉驾驶员的面部和眼睛,并对图像进行处理以检测驾驶员的疲劳状态。一旦检测到困倦情况,编程系统通过警报提醒驾驶员以确保其保持警惕。该方法包含多个阶段,用于判断驾驶员的清醒状态,并根据输出生成警告信息。采用Haar级联分类器检测驾驶员的眨眼持续时间,并计算眼睛宽高比(EAR)。最后,借助Ubidots云服务和Twilio API,将包含车牌号的报警信息发送至相关人员的手机。本系统使用树莓派3及Raspbian(基于Linux)操作系统实现。
关键词 :驾驶员困倦检测,树莓派3,Raspbian摄像头,OpenCV,特征提取,眼睛宽高比(EAR)
1. 引言
近年来,驾驶已成为我们日常生活中重要的一部分,尤其是在城市地区,因困倦导致的事故时有发生[1]。道路交通事故显然在我国是一个全球性的危害。根据国家犯罪记录局(NCRB)的调查,印度每年约有13.5万人死于交通事故。这些因素推动了智能交通系统(ITS)的发展。如果事故是由驾驶员异常引起的,则可以通过在车辆内安装异常检测系统来预防[2]。
疲劳可能由多种现象引起,如心理社会因素、健康因素和生理因素[3]。根据美国国家公路交通安全管理局(USA)的调查,警方研究了约10万起因驾驶员困倦导致的交通事故,这些事故造成了重大损失,包括7.1万人受伤、125亿美元的预算损失以及1,550人死亡[4]。可通过采用多种方法来解决这些问题,包括使用支持向量机(SVM)、基于模糊的系统、神经模糊方法和人工神经网络(ANN)[5]来检测困倦状态。
准确统计与睡眠相关的事故数量较为困难,但交通研究表明,高达20%的交通事故是由驾驶员疲劳引起的[6]。疲劳驾驶检测可通过两种技术实现:第一种是侵入式技术,第二种是非侵入式技术。侵入式技术涉及脑电波监测、心率计算等。
非侵入式技术适用于通过面部特征来检测疲劳。张口和闭眼是疲劳驾驶检测中广为人知的症状[9]。非侵入式技术包括头部姿态、眨眼频率、打哈欠检测、闭眼等[8]。另一种非侵入式疲劳检测方法可分为三种情况:视觉线索、生理测量、驾驶表现。视觉线索涉及直接计算,而驾驶表现涉及间接计算[10]。由于无需使用感应电极,因此适用于实时应用。视频序列中的自动眼睛检测包含多种方法,例如眼部的运动估计。眼部区域通过稀疏跟踪、自适应阈值处理或帧间强度变化以及光流进行评估[16]。
使用计算机视觉[6]检测驾驶员疲劳。通过眨眼频率和头部倾斜来确定驾驶员疲劳,并利用树莓派3结合Pi摄像头计算困倦程度[8]。实验在十名志愿者上进行,测试了不同光照条件下的情况,人脸和眼睛检测率最高达到99.59%[7]。推荐采用基于实时视频的视觉处理方法来评估驾驶员疲劳程度,并使用蜂鸣器提醒驾驶员[11]。采用相对面积比(RAR)识别面部特征点,并计算每只眼睛之间的六个特征点[12]。通过将装载了raspbian操作系统的树莓派主板与Arduino Uno及800万像素数字USB摄像头串行连接,实现对驾驶员疲劳的监测[13]。
2. 方法论
主要目的是检测驾驶员的困倦状态,可以通过多种方式实现,例如检测驾驶员的面部表情和测量眼睛宽高比(EAR)。每个人的眨眼模式都不同,这种模式在眼睛挤压程度、眨眼持续时间和眼睛开合速度方面存在差异[16]。所提出的方法涉及以下技术:Haar级联分类器、形状预测器_68_面部特征点检测、眼睛宽高比(EAR)、Ubidots云服务和Twilio API。
2.1 Haar级联分类器
在Haar级联分类器中,通过训练大量相似和不相似的图像来检测驾驶员的疲劳。OpenCV是一种基于学习的方法,内置了检测器和训练器。为了进行训练,分别建立了包含多个正面和负面图像的人脸和眼睛数据库,其中包括眼睛闭合与睁开状态以及不同集合的人脸图像[15]。2013年,Patil 等人提出了一种基于视觉的困倦检测方法,该方法使用支持向量机和Haar级联分类器[14]。
2.2 形状预测器_68_面部特征点检测和眼睛宽高比(EAR)
为了在实时视频流中预测面部和眼部区域,使用了形状预测器。
表示通过计算眼睛宽高比(计算眼睛之间的欧几里得距离)来测量的困倦程度,参数被传递给预定义的数据集,并进行面部特征点检测。对于每个视频序列,都会定位眼部的特征点。眼睛的宽度与高度之间的宽高比经过校准。
$$
EAR = \frac{|p2 - p6| + |p3 - p5|}{2|p1 - p4|}
$$
其中 $p1,…,p6$ 是二维特征点位置,在图2中表示。当眼睛睁开时,EAR通常保持稳定,而在眼睛未睁开时则接近零。如果人持续注视摄像头,眼睛宽高比(EAR)处于正常水平,当他/她长时间闭眼时,该值会变得较低。当达到较低值时,则检测到困倦。2012年,Ubidots提出了连接软硬件解决方案,用于远程控制、为医疗保健客户实现流程自动化并进行监控。
Twilio 是一种云通信平台即服务(PaaS),它允许软件开发人员通过其Web服务API编程发送和接收短信,以及拨打和接听电话。本文介绍了一种当驾驶员感到困倦时,利用云服务和移动API发送消息的同时向驾驶员提供报警信号的预警机制。
3. 编程算法
树莓派3适用于Python IDLE。它涉及使用安装了OpenCV计算机视觉扩展的软件进行编程。
展示了疲劳驾驶检测的完整算法。程序启动后开始运行,可通过树莓派3的命令行界面终止,或通过关闭系统停止运行。为了启动程序执行,需要导入以下库:numpy、OpenCV、播放声音、argparse、dlib、distance、计时器、客户端、ApiClient和picamera。
4. 结果与讨论
可以使用眼睛宽高比(EAR)来测量驾驶员嗜睡。每个人的眼睛宽高比可能不同。以下情况针对十组不同的人进行了两种条件的测试:一种是睁眼状态,另一种是闭眼状态。每0.5秒测量一次闭眼率,如果该值超过预设阈值,树莓派3便会从连接到树莓派3板GPIO引脚的报警装置接收到警报信号。当人员闭眼时间超过设定的阈值范围时,将生成警报信号以唤醒处于困倦状态的驾驶员,同时通过云服务将包含车牌号的警报信息发送给车主。



5. 结论
驾驶员困倦检测主要用于在驾驶过程中保持驾驶员清醒,以避免因困倦导致的事故。通过嵌入式设备发出警报信号,使处于困倦状态的驾驶员恢复清醒。利用树莓派和Raspbian摄像头实时计算驾驶员的困倦程度。通过Haar级联分类器检测眼睛和面部来测量疲劳,特别是使用形状预测器检测面部特征点,并通过计算眼睛之间的欧几里得距离得到眼睛宽高比(EAR)。每帧中精确检测眼睛和面部将有助于计算困倦程度。频繁检测眨眼和头部倾斜的情况,并进行准确测量,有助于指示困倦状态。当达到最大阈值时,系统会发出大声警告,提醒驾驶员,使其从睡眠状态中清醒。
未来,可在明亮房间且具备恒定光照的条件下实施该系统,同时可考虑不同光照条件以及深色皮肤人员的情况。
更多推荐
所有评论(0)