王 伟, 张向文, 王文鸿
(桂林电子科技大学 电子工程与自动化学院,广西 桂林 541004)
疲劳驾驶是造成交通事故和影响驾驶安全的重要因素之一,并且由于司机身体突发疾病造成交通安全事故也时有发生[1]。通过对驾驶员疲劳状态的检测,在驾驶员疲劳时发出报警,可以提醒驾驶员,提高驾驶的安全性。
目前在疲劳驾驶的研究上,国外比国内发展较好。市面上常见的国外产品包括车内智能环境调节系统、电子清醒带和方向盘监视系统[1,2]。车内智能环境调节系统主要从自动改变车内温度、车内光线和车内空气流通程度等方面,给驾驶员提供一个不易疲劳驾驶的环境。电子清醒带和方向盘监视装置(steering attention monitor,SAM)可以根据驾驶员的疲劳状态对驾驶员进行提醒[2]。国内石坚等人研究了一种疲劳驾驶预警系统,通过传感器测量驾驶员驾驶时方向盘、踏板等的运动参数来判别驾驶员安全因素,但该系统仅仅具有发现疲劳驾驶的作用,预警效果不明显[1]。李科勇研究了不同驾驶风格对疲劳驾驶状态判断的影响[3]。综合分析可以看出,目前市场上较为成熟的产品的功能都比较单一,驾驶员疲劳状态的诊断方式比较单一,报警处理功能不太完善。
为了提高驾驶员疲劳状态判断的准确性,并能够根据驾驶员的疲劳程度进行不同方式的预警和处理,本文研究了一种新型的驾驶员疲劳状态检测预警系统。系统采用颈枕和摄像头人眼识别相结合的双重判断方式,解决单独采用人眼检测方法对不同驾驶习惯的驾驶员难以准确判断的问题。
设计的系统如图1所示,包括安装在驾驶室内,位于驾驶员前面的USB摄像头和树莓派3B+以及安装在颈枕内的压力传感器、STM32单片机、振动马达、GPS定位模块和GSM通信模块。通过树莓派3B+结合USB摄像头,可以对驾驶员面部信息进行实时采集,对驾驶员眼睛的闭合程度进行识别,根据眼睛闭合程度判断驾驶员的驾驶状态。安装在颈枕内的压力传感器在驾驶员戴上颈枕后实时检测压力的变化,单片机实时读取压力数据与预设阈值对比判断头部的歪斜程度和驾驶员的疲劳状态,综合驾驶员眼睛闭合程度和头部歪斜程度,判断驾驶员的疲劳程度。当驾驶员处于疲劳状态时,单片机启动振动马达发出振动报警信号,提醒驾驶员注意,并循环检测驾驶员的疲劳状态。当驾驶员处于深度疲劳状态或突发疾病休克时,振动报警无效,启动紧急呼救系统,通过GPS模块确定驾驶员的位置信息,通过GSM模块发送位置信息和呼救信息。
图1 系统设计框图
本设计采用树莓派3B+作为主控嵌入式硬件平台进行图像处理。树莓派提供丰富的外设接口,其引出了96个GPIO接口,能用来连接多个底层外设,具有SATA和HDMI接口,卡片的主板周围绘有几个USB接口,可同时连接键盘、网线、鼠标,同时拥有视频模拟信号的电视输出等[4,5]。此外,支持Python作为主要的编程语言,同时也支持Java、C语言等。其CPU单核多核性能提高,运行速度快,配备64位1.4 GHz四核处理器[4]。拥有独立PoE供电引脚和独立PoE以太网供电,具有稳定高效的网络传输效率。双频2.4 GHz/5.0 GHz传输低功耗、速度快,并拥有1 GB大容量嵌入式内存。另外,系统使用了嵌入式的串口和USB硬件资源,电路简单,连线方便,不需手工做板。树莓派的体积小,功能强大,视频处理能力强,通过SSH可在PC端远程登陆控制,易于系统开发[4],另外,内置的蓝牙易于与单片机通信。
设计的单片机最小系统如图2所示。
图2 单片机最小系统
接口方面,单片机利用两路AD采集压力传感器信号,使用串口1与树莓派通信,使用串口2与GSM模块通信,使用串口3与GPS模块通信。
压力传感器检测驾驶员头部的倾斜检测,将驾驶员头部挤压颈枕的形变量转换为角度或压力值的变化,获取驾驶员头部侧歪的程度。考虑到结合颈枕的设计以及STM32内部A/D匹配,选用FSR402型号薄膜压力传感器,满足舒适度好、体积小、成本低、易于实现,而且能够满足特殊表面上的压力分布数据采集需求。
本文设计使用的是RFP 薄膜压力传感器[6],如图3所示,传感器内置在颈枕两侧,每个长130 mm。使用STM32F103自带的12位ADC测量,本次设计使用薄膜压力传感器作为人体开关,量程较小,当人头部侧压程度较大即可触发,故可不用精确的采集数据,所以只需要设置较高阈值,当传感器的数值超过一定的数值时开关触发。
图3 薄膜压力传感器实物
系统选用的振动马达用于发出振动报警信号。当驾驶员处于疲劳状态时,单片机向振动马达发送固定占空比的PWM波控制报警信号,马达启动发出振动信号,提醒驾驶员安全驾驶、注意休息。
选用以AT6558为主芯片的GPS模块,模块价格相对低廉,使用简便。调试过程中先利用上位机来监测GPS模块所得数据是否准确,所在环境是否能收到GPS信号,节省调试时间。此模块采用串口进行通信,在与单片机连接时只需要两根通信线和两根数据线,而且所得到的数据准确。
GSM模块采用SIM800C实现通信,利用GSM系统的短消息业务进行数据传送,此模块可以使用基于字符AT命令接口协议(文本模式)实现短消息传输。这种信息传输方式是GSM通信网所特有的,不需要拨号建立连接,直接把发送的信息加上目的地址,通过无线控制信道发送到短消息服务中心,经短消息服务中心完成存储和转发,最后发送到信宿。通过提前设定接收方手机号码,即可实现发送短消息给指定手机。一旦网络发现被叫方可以被叫通时,则消息被重新发送保证被叫方收到消息。
软件设计部分,主要是驾驶员眼睛闭合程度的判断、驾驶员头部歪斜程度的判断和报警信号的发送。
系统设计流程如图4所示。
图4 系统流程图
图5 眼部特征点标记示意
EAR值在驾驶员眼睛睁开时因驾驶环境和状态影响基本保持在0.22~0.3之间,当驾驶员精神状态不佳,处于疲劳驾驶时,EAR值会骤降至约0.18~0.05之间,通过多帧图像结合判断,当存在较长时间驾驶员眼睛的EAR值持续较低或者仅小部分时间处于较正常水平,即判定驾驶员处于疲劳驾驶状态。
驾驶员头部歪斜程度的检测是通过内置于颈枕的两个压力传感器实现的。当系统检测到驾驶员后开始采集两个压力传感器的压力数据,经A/D转换处理为数字量的电压数据,当检测到A/D引脚电压高于2.0 V电压阈值后,单片机定时器开始计时,若有4 s维持在电压阈值,即2.0 V以上,则判断驾驶员处于疲劳状态,触发危险警报。
当检测到驾驶员处于疲劳驾驶状态时,系统会触发振动报警,让驾驶员短时间内保持清醒,提醒驾驶员安全驾驶。若3次提醒未果,即在30 s内触发报警,系统则判定驾驶员处于危险状态,STM32单片机将通过串口与ATGM336H—5NGPS模块通信,从参考文献[10]了解到串口通信的数据包由发送设备通过自身的TXD接口传输到接收设备得RXD接口,在协议层中规定了数据包的内容,具体包括起始位、主体数据(8位或9位) 、校验位以及停止位,通信的双方必须将数据包的格式约定一致才能正常收发数据,对接收数据处理得到驾驶员所在地经、纬度信息,如图6所示。单片机可以控制SIM800C通信模块,向求救中心或者用户指定的电话发送定位求救短信息。
图6 定位信息
设计的系统包括两部分,一部分由树莓派与摄像头组成,放置在仪表盘中间,驾驶员下前方。另一部分放置在颈枕后侧,电路组合后置于盒中,由盒中引出两个薄膜压力传感器内贴于颈枕两侧。
因系统尚未产品化,在测试阶段,采用模拟驾驶方式测试,即将系统安装在驾驶室内,驾驶员模拟不同的疲劳状态。
图7 眼睛闭合程度的测试
眼睛闭合程度的测试如图7所示,对三种闭合程度进行了测试,图7(a)为模拟驾驶员初入疲劳驾驶状态,眼睛开合度较低,此时眼睛纵横比为0.12,符合预期设定0.18~0.05,同时在预设值内开始检测眨眼计数,此时眨眼计数为3,不发出报警信号。图7(b)为模拟驾驶员完全疲劳驾驶状态,眼睛近乎闭合,此时眨眼计数为8,超过眨眼计数阈值5,判断驾驶员处于疲劳驾驶,发出报警信号。图7(c)为驾驶员正常驾驶时,眼睛处于正常状态,横纵比为0.26。
对头部歪斜程度的测试如图8所示,图8(a)模拟驾驶员正常驾驶状态,驾驶员眼睛闭合度正常,头部不侧歪,颈枕不会有振动提醒。图8(b)模拟驾驶员疲劳驾驶第一种状态,驾驶员头部不侧歪,眼睛处在闭合和几乎闭合的状态,眼睛纵横比低于0.18,且持续时间长于4 s,颈枕在4 s后发出振动提醒。图8(c)模拟驾驶员疲劳驾驶第二种状态,驾驶员眼睛完全闭合,长时间倚靠在颈枕上,此时由压力传感器A/D转换后电压高于2.0 V,颈枕4 s内发出振动提醒。此时驾驶员头部继续倚靠在颈枕上,模拟休克状态,震动相继持续3次,总约30 s后,系统判定驾驶员处于危险状态,并向指定手机发送定位求救信息。
图8 头部歪斜程度测试
本文提出了一种驾驶员疲劳状态检测与安全预警系统,通过驾驶员前部的摄像头检测人眼的闭合程度和戴在驾驶员颈部的颈枕内的压力传感器检测头部侧歪程度,综合两种检测结果判断驾驶员的疲劳状态,提高检测的准确性。经实验模拟测试,系统可以比较准确地检测出驾驶员的疲劳驾驶状态和休克状态。在检测到驾驶员处于疲劳状态时,颈枕内的振动马达发出振动信号,能够在驾驶员疲劳驾驶时瞬间恢复清醒,当循环检测和提醒3次无效时,判断驾驶员处于危险状态,发出定位和远程报警求救信息,最大限度的保障驾驶员的生命安全。