智能安全驾驶监测系统设计与实现
2023-04-03吉泉仲欧阳文凯
张 鸿,吉泉仲,王 谆,张 卓,欧阳文凯,黄 镱
(河海大学 物联网工程学院,江苏 常州 213002)
0 引言
随着社会经济发展水平的不断提高以及基础交通建设的不断推广,车辆的普及程度也在逐年增加,但随之而来的交通问题也越发严峻。据国家统计局公开的统计资料显示,近三年来,我国交通事故发生数量均在20万以上,其中机动车的占比高居不下,而汽车事故占机动车事故约75%,汽车事故造成直接财产损失占机动车造成直接财产损失约88%。在这些汽车事故中有极大部分是由于驾驶员存在疲劳驾驶、不规范驾驶行为、以及突发身体疾病等因数造成的[1]。
现有的辅助驾驶系统主要分为三类:第一类是通过监测驾驶员的疲劳程度,并给出实时的提醒,以减少交通事故的发生。如刘芳[2]等提出的基于视频的驾驶员疲劳驾驶实时监测系统的方法,该方法通过提取视频中驾驶员的眼部特征变换来分析驾驶员的疲劳状态;金国宜[3]提出的疲劳驾驶监测系统通过PERCLOS疲劳检测方法用于计算驾驶员的疲劳程度。第二类是通过检测汽车周围车辆和估算前方车辆的距离,以减少交通事故的发生。如孔雅洁等[4]提出的通过深度学习对行车过程中前方车辆进行距离估算以及识别车辆前方的目标;吴骅跃[5]通过视觉处理对混合道路车道检测感知、以及车辆环境全向障碍物识别。第三轮是检测驾驶员的体征状况,判断是否存在酒驾和突发身体状况等行为。如吴斌[6]通过微处理器与酒精传感器计算当前驾驶员的酒精含量。上述的辅助驾驶系统的监测的内容局限在驾驶员是否存在疲劳驾驶、是否有饮酒行为,汽车周围的环境状况等单一内容,没有对影响驾驶安全的因素进行全方位的考虑。
针对上述局限性,设计开发了一种智能安全驾驶监测系统。该系统安装在驾驶室内,在行车前判断驾驶人员是否饮酒,在行车时监测并记录驾驶员的体征参数以及驾驶行为并将监测得到的数据上传到移动端APP进行直观的展示。在驾驶员突发重大身体疾病时,移动端APP可以自动发送当前定位消息给紧急联系人。该系统监测各种安全威胁,并进行及时的提醒,可以有效减少交通事故的发生。系统的主要创新点包括:
低功耗防作弊酒精含量检测。我们提出了一种低功耗防作弊酒精含量检测仪器,该方法通过气流传感器检测驾驶员是否对一次性吹嘴吹气,防止出现通过吸气躲避检测的行为,而后使用酒精传感器对酒精含量进行测量,通过STM32核心处理器处理相关数据。经检验,该装置功耗低可以有效防止驾驶员出现酒后驾驶的行为。
驾驶行为检测模型的优化。考虑到边缘计算对于成本控制与实时性的要求,我们使用成本较低的树莓派作为边缘计算的处理器。与此同时,处理图像时受限于树莓派硬件性能,帧数较低。而驾驶员驾驶途中正常驾驶占主要部分,因此,为避免长时间的无效运算,我们首先检测驾驶员嘴部及下颚的特征向量变换,当出现较大变换后再运行驾驶行为检测模型。通过上述方法,大幅度提高了帧数,相较于原来的0.2帧,帧数提高至正常驾驶情况下4.9帧/s;违规行为监测速率为1.2帧/s,响应时间约为0.2秒,极大地提高了运行处理速率。
多方位监测判断,同时对驾驶员的驾驶行为、身体健康状况、以及酒精浓度进行监测,并对监测到的数据进行有机处理判断,对驾驶员进行实时的提醒。
1 系统整体设计
1.1 需求分析
智能安全驾驶系统,要求实时监测驾驶员的身体健康状况,在突发心脏病等紧急情况能够第一时间联系家属,并使家属知晓当前的GPS定位。同时需要在开车前检测驾驶员是否饮酒,如果饮酒将主动告知家属,驾驶员将出现酒驾行为。在驾驶途中实时监测驾驶员的驾驶行为,一旦出现抽烟、喝水、打电话、疲劳等情况,通过语音及时播报提醒。另外该系统还应该将监测到的健康数据和驾驶行为等记录,生成健康报表,驾驶行为监测报表等更为直观的方式呈现给驾驶人员,让驾驶人员了解自己的健康状况和驾驶习惯,做出及时的调整,减少交通事故的发生机率。
1.2 系统设计方案
智能安全驾驶监测系统由“酒精浓度检测单元”“驾驶行为监测单元”,“体征智能监测模块”,“移动端APP”四部分组成。酒精浓度检测单元基于STM32单片机,使用内置12位ADC对费加罗气体传感器TGS822进行采样,同时使用气流传感器对驾驶员是否吹气进行判断,实现防作弊酒精含量检测。驾驶行为监测单元采用ARM架构的微型电脑树莓派4B,搭载Linux操作系统,在该操作系统上运行YOLOV5和疲劳检测模型检测驾驶员是否存在抽烟、打电话、喝水、疲劳驾驶等行为。体征智能监测模块采用开放第三方接口的SDK的智能手表,该手表可以实现体温、血压、血氧和心率的监测。移动端APP实现驾驶人员的GPS定位,同时可以利用该定位进行导航,以及通过蓝牙通信收集驾驶员的违规驾驶行为等数据,通过wifi热点通信完成体征参数的收集。移动端APP完成收集数据的可视化展示,并以健康报表的形式呈现给用户。系统的主体结构如图1所示。
图1 系统的主体结构
智能安全驾驶监测系统通过酒精浓度检测单元检测驾驶员的酒精含量,将该酒精含量通过USART传输到树莓派,如果酒精含量超出正常范围,树莓派将通过蓝牙传送到移动端APP,APP将拨打电话给相关家属,防止酒驾行为的发生。如果酒精含量正常,树莓派正常运行YOLOV5驾驶行为监测程序,将该数据通过蓝牙连接传给移动端APP。同时体征智能监测模块监测到的体征数据通过wifi热点通信的形式传到移动端APP,移动端APP分析当前体征数据是否正常,如果出现如突发心脏病等情况,移动端APP自动拨打紧急联系家属的电话,并将驾驶人的当前GPS定位发送给紧急联系家属。系统运行流程图如图2所示。
图2 系统运行流程图
2 系统详细设计
2.1 酒精浓度检测单元
图3 酒精浓度检测单元原理图
酒精浓度检测单元由费加罗气体传感器TGS822、气体传感器和STM32F103C8T6单片机组成。使用费加罗气体传感器TGS822作为酒精传感器,费加罗气体传感器的气敏素子使用在清洁空气中电导率低的二氧化锡(SnO2)。当存在对象气体时,传感器的电导率随空气中气体浓度增加而增大。使用简单的电路即可将电导率的变化,转换为与该气体浓度相对应的输出信号[7]。该传感器具有对乙醇等有机溶剂有高灵敏度、长期稳定性优良、长寿命、低成本以及可简单电路测量使用等特点。使用气流传感器对驾驶人员吹出气流方向进行测试,防止检测者通过吸气躲避酒精检测。气流传感器采用专用芯片检测吸气、呼气的气流变化,元件在无气流时会输出高电平,有气流时输出低电平。因此只需要通过微控制器的GPIO输入输出接口即可对该传感器进行采集。同时气流传感器有特制的电子开关,超强抗干扰性能,敲击、振动、高分贝声音和磁场等都不会影响开关的正常工作,性能非常稳定可靠。微处理器采用意法半导体生产的STM32F103C8T6微处理器,它是一款基于ARM Cortex-M内核STM32 系列的32位的微控制器,程序存储器容量是64 KB,需要电压2~3.6 V,工作温度为-40~ 85 ℃。主频72 MHz,具有GPIO,12 位ADC,12 位DAC,TIMER,USART等多种常用外设,具有 NVIC 中断嵌套管理器,是一款性能较高,价格合适的一款单片机[8]。
传统酒精检测仪在使用过程中往往出现系统功耗较大的问题,所以在酒精检测单元中采用STM32F103C8T6 低功耗微处理器作为主控芯片,芯片通过 GPIO口连接气流传感器。气流传感器监测是否存在吹气气流,系统周期性的检测气流的存在,没有检测到气流的存在,酒精传感器则处于禁止状态,系统电流可降低为大约1 mmA从而实现系统的低功耗,如果检测到气流,主控芯片将会在GPIO口检测到低电平,同时芯片开启ADC对酒精传感器进行采样计算,获取驾驶员吹出气体中的酒精浓度,如若超过交通法规定的酒驾标准,则将此信息通过USART接口上传至树莓派。同时USART使用CH340芯片引出,通过USB接口与树莓派相连,保证STM32F103C8T6的稳定连接和传输速率要求。酒精浓度检测单元原理图如图3所示。
2.2 驾驶行为监测模块
驾驶行为监测模块的主要功能是检测驾驶员是否存在疲劳驾驶行为,以及是否出现违规驾驶行为如抽烟、喝水、打电话等行为。驾驶行为监测模块采用的硬件平台为树莓派4B和高清LRCP1620摄像头。树莓派4B的CPU为1.5 GHz,GPU为500 MHz,蓝牙版本为5.0,供电电压为5 V-3 A,能够满足我们对于深度学习模型的使用。LRCP1620摄像头分辨率为1 080 p,采用的摄像头为3.6 mm M12镜头,该摄像头可以满足在对驾驶人员行为的监控。驾驶监测单模块中运行的模型主要分为疲劳驾驶监测模型和违规行为监测模型。
疲劳驾驶监测模型基于DLIB模型先获得脸部特征点坐标并转换为特征向量,再在读帧过程中判断特征向量的变化从而得到眼睛和嘴巴开合程度,进而判断是否存在闭眼或打哈欠等情况。DLIB模型提取人脸68个面部特征点,可以通过提取到的面部特征图分别获取左右眼面部标志以及嘴部标志的索引,通过opencv对视频流进行灰度化处理,检测出人眼和嘴部的位置信息[9]。根据这个位置信息可以计算出对应的眼睛开合度和嘴巴开合度。当人眼睁开时,眼睛的开合度会在某个值上下波动,当人眼闭合时,该值迅速下降,理论上会接近于零。所以我们认为当眼睛的开合度低于某个阈值时,眼睛处于闭合状态。同样当嘴部的开合度也会随着嘴部的张开与闭合而变化[10]。为检测眨眼与打哈欠的次数,采取对视频流每帧图片进行处理,获取连续3帧内眼睛、嘴部的长宽比,本系统阈值初步设为0.2、0.3。当计算出的眼睛和嘴部的长宽比小于设定的阈值时,认为是眼睛和嘴部合闭。在一定时间计算眼睛合嘴部的张开与闭合的次数,代表眨眼和打哈欠的频率,眨眼和打哈欠的频率越高,疲劳程度越高。
违规行为监测模块使用YOLOV5的网络结构,YOLOV5官方发布的代码中,检测网络共有4个版本,依次为YOLOV5x、YOLOV5l、YOLOV5m、YOLOV5s。其中YOLOV5s是深度和特征图宽度均最小的网络,另外3种可以认为是在其基础上,进行了加深、加宽。本方案采用YOLOV5s目标监测算法识别车内摄像头采集的图像,相较于其他版本其深度最小,特征图的宽度最小,其包括Input、BackBone、Neck、Prediction 四部分,每个部分较前一版本均有一定的优化策略,保证算法检测精度的情况下尽可能的提升识别速度。YOLOV5s的结构中主干网络BackBone将原始608×608×3的图像输入Focus结构,采用切片操作,先变成304×304×12的特征图,再经过一次32个卷积核的卷积操作,最终变成304×304×32的特征图[11-14]。
Input模块同YOLOV4一样采用Mosaic数据增强的方式,通过随机使用四张照片,经过随机分布拼接,极大丰富了检测数据集,通过随机缩放增加更多的小目标,让神经网络的鲁棒性更好。同时采用Mosaic数据增强还可以减少GPU的负荷,利用Mosaic增强训练,直接处理4张图片的数据,有效限制Mini-batch大小,一个GPU就可以表现出较好的运算效果。
在Iuput模块还对自适应图片缩放进行改进,对原始图像进行自适应添加最少的黑边,减少信息冗余,计算量也会相应减少,目标检测速度则会得到提升。
BackBone模块新添了Focus结构,YOLOV5将原始608*608*3的图像输入Focus结构,在切片操作,先变成304*304*12的特征图,再经过一次32个卷积核的卷积操作,最终变成304*304*32的特征图。同时,YOLOV5s设计了两种CSP结构,CSP1_X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中。在Backbone中,使用带有残差结构的CSPl_X,因为 Backbone网络较深,在反向传播时残差结构的加入使得层和层之间的梯度值得到增强,有效防止网络加深时所引起的梯度消失,得到的特征粒度更细[15]。
Neck模块这里采取的是FPN特征金字塔结构做一个特征融合,本文选取最后3个卷积层C3, C4, C5,然后经过FPN结构,将高层级语义信息和低层级信息进行融合。在YOLOV5的Neck结构中,采用借鉴CSPNet设计的CSP2新结构,增强网络特征融合的能力。Neck结构特征如图4所示。
图4 Neck结构特征图
Prediction模块则继续沿用YOLOV4中的CIOU_Loss做Bounding box的损失函数。在目标检测的后处理过程中,针对很多目标框的筛选,通常需要nms操作,在不增加计算成本的情况下,改善识别效果。
在驾驶途中驾驶员出现疲劳驾驶、违规驾驶的行为在整个驾驶过程中占比较少,所以为规避树莓派长时间进行无效的运输,浪费CPU资源的行为。本方案首先通过DLIB人脸特征提取模型处理视频流中驾驶员的面部照片。在一段时间内利用DLIB计算的面部特征点,连续提取10帧的照片的脸部特征进行存储,分别计算驾驶员的嘴部和下颚的特征向量,当驾驶员的嘴部和下颚的特征向量发生巨大变换时,代表驾驶可能出现了如打哈欠、喝水、抽烟等行为。此时运行疲劳监测模型和驾驶行为监测模型。通过这种预处理的方式可以有效的节约计算资源。算法流程图如图5所示。
图5 算法流程图
2.3 体征智能监测模块
由于需要监测用户的体征参数范围较广,所以本系统选取的体征智能监测模块为提供二次开发协议的T520智能手表,该智能手表可以实现对于血压血氧、体温、心率、计步、睡眠监测等功能,完全满足我们的功能需求。
手表的心率监测功能采用基于光电式检测法的脉搏波检测法,该光电检测法的PPG脉搏波测量是一种无创伤的无感监测,使用者无需干预操作或者说在无感知的情况下就可以完成心率指标的采集。设备的血氧饱和度监测采用双色光(红光和红外光)交替照射皮肤获得各自波长的PPG信号,然后通过算法来获得SPO2,而且监测血氧饱和度的时候需要被测者保持相对的静止状态。可以做到5%以内甚至1%的精度,延时在5秒以内。设备的体温检测采用接触式ADC热电堆传感器。该传感器等同于我们常用的体温枪红外传感器,可以精确感知温度。背面的两个铝片直接接触皮肤,侦测细微的体温差异,利用先进测温传感技术,能精准控制体温,测量误差范围仅±0.3。手表的血压监测通过光电传感器采集手腕部位的脉搏波波形,分析脉搏波的上升斜率及波段时间等特征参数可以得到特定的计算公式,以估算血压数值,该方法可以实现连续监测血压[16]。
智能手表与手机APP的通信协议基于 TCP/IP的长链接进行通讯。手机APP作为服务器,与终端手表交互数据格式协议如下:包头:IW协议号:上行(设备到服务器) AP+[两位数字],下行(服务器到设备) BP+[两位数字],数据包内容结束符。在通信时APP端首先声明一个ServerSocket对象并且指定端口号,然后调用Serversocket的accept()方法接收客户端的数据。Accept()方法在没有数据进行接收的处于堵塞状态。(Socketsocket=serversocket.accept()),一旦接收到数据,立即通过inputstream读取接收的数据。客户端创建一个Socket对象,指定服务器端的ip地址和端口号(Socketsocket=newSocket(“196.168.20.18”,8080);)通过inputstream读取服务器中的数据(OutputStreamoutPutstream=socket.getOutputStream()),最后将要发送的数据写入到outputstream即可进行TCP协议的socket数据传输[17]。
传统检测手环基于基于BLE协议[18],基于BLE协议的终端设备与中心设备(智能手机)连接过程只是秒级的时间,之后再启动数据传输。由于BLE协议本身的复杂程度,导致实际的数据传输速率极低。正常情况下,终端设备(运动手环)从产生数据,到传输到平台至少都是几秒之后的事情。由于数据传输的低效,完整的数据传输到平台需要经过多次连接和交互。针对车载情况,很难保证数据的时效性和完整性。而本方案采用的手环基于wifi热点通信,通过手机开启wifi热点,智能手表连接热点后,建立TCP/IP长链接,实时传送智能手表监测的体温、血压、血脂、心率等数据,该协议数据传送效率高效,传送速度快,能够满足在驾驶人身体出现不适后,及时反馈车主的身体状况。
2.4 移动端APP
移动端APP主要实现对于驾驶员当前的GPS定位在驾驶员突发紧急状况的时候,能够将GPS定位发送给紧急联系人。同时实现对于体征监测智能手环数据的可视化展示,生成健康报表让驾驶员时刻了解自己的身心健康。移动端APP还需要对驾驶员的驾驶行为进行实时的记录。为实现上述功,移动端APP主要分为四部分,这四部分别为实时定位、健康监测、行为检测、信息设置,移动端总体架构如图6所示。
图6 移动端APP架构
基于上述对于移动端功能的描述,移动端APP由定位页面、健康页面、功能页面、我的页面构成,这4个页面风别与实时定位、健康监测、行为监测、信息设置4个功能一一对应。同时为了保护用户的隐私安全,我们增加了登录页面。登录页面基于Bmob后端云实现。通过Bmob 提供的实时数据与文件存储功能,储存用户的注册信息。同时调用Bmob的API接口完成验证码功能的实现[19]。在登录页面上,若用户已经注册,拥有用户名和密码,则直接在该界面输入正确的手机号码和密码进入应用,若用户还未注册,则可以点击登录界面中的“注册”按钮跳转到用户注册界面,输入注册的手机号码以及收到的验证码进行注册,注册完成后回到登录界面输入手机号码以及密码即可登录。除此以外,本APP 还具有密码修改功能,若用户忘记自己的密码,可以点击“忘记密码”进入密码找回页面,在密码修改页面输入之前注册的手机号码,在收到并填写验证码输入新密码,点击确认修改即完成密码修改。返回登陆界面输入修改后的账号与密码即可完成登录并进入应用。
定位页面通过调用高德地图接口实现实时的定位。高德Web服务API向开发者提供对应的HTTP接口,移动端APP调用这些接口使用对应地理数据服务。用户进入该页面后,系统提醒用户打开手机的GPS定位功能,并赋予APP读取定位信息的权限[20]。用户赋予相关权限后,APP将在该页面展示用户的经纬度信息,同时显示用户周围的地理环境信息。健康页面通过WiFi热点的形式与体征智能监测模块建立TCP/IP通信,接收来自智能手表的监测到的驾驶员的健康数据,根据通信协议从数据中解析出用户的心率、血氧、血压、体温等有效数据,并将数据展示在健康页面的展示列表上,用户可以对自身的健康状态有更直观的感受。点击展示列表,可观测到详细的健康状况,实时显示用户健康变化情况,并针对不同的健康状况给予不同的健康建议。需要注意的是,使用健康观测功能时必须连接相对应的健康手表,否则无法观测到用户实时的健康状况。功能页面通过手机蓝牙连接树莓派设备,树莓派实时监测用户的驾驶行为。当驾驶员出现违规驾驶行为后,树莓派将监测到的违规驾驶行为通过蓝牙发送到移动端APP,APP对监测到的打电话次数、抽烟次数、喝水次数进行显示,同时显示驾驶员是否存在疲劳驾驶行为,并以红色文字提醒驾驶员注意驾驶安全。除此以外,如果酒精浓度检测单元判断驾驶员存在酒驾行为,会把酒驾信息发送给移动端APP,APP在接收到驾驶员存在酒驾行为之后会立即打电话并发送短信通知驾驶员的家属,告知他们驾驶员存在酒驾行为,让他们提醒驾驶员停止违规行为。信息设置页面主要实现用户设置紧急联系号码以及对于设备ID号的填写等功能。
3 系统功能测试实验
为了验证系统的各项功能是否实现,各项功能完成的效果,系统各设备之间通信是否成功,APP是否能正常接收数据并进行实时展示,进行相关测试。测试环境为封闭路段,SUV汽车驾驶室,摄像头安装在车内后视镜斜对汽车驾驶员,酒精选取52°饮用酒,测试采用的移动端设备有Android和HARMONY两种系统分别进行测试。测试结果如下。
1)测试酒精浓度检测模块。为判断该模块是否能够正常检测驾驶员具有饮酒驾驶行为,我们对酒精浓度检测模块进行饮酒吹气测试,饮酒吸气测试,未饮酒吹气测试,未饮酒吸气测试,上述测试共进行100次测试,测试的结果如表1所示。
表1 酒精检测测试
2)测试行为检测模块。测试疲劳检测模型和驾驶行为监测模型的准确率结果如表2所示。
表2 监测模型算法精度
3)测试APP在不同操作系统上的性能。将APP分别在Android系统和HARMONY系统上部署测试并记录各个页面的点击响应时间如表3所示。
4)测试各模块与系统的联调。将树莓派通过蓝牙与手机连接,体征智能监测模块通过WIFI热点与手机端APP连接后。移动端APP各数据展示页面如图7所示。
上述测试实验表明智能安全驾驶监测系统各功能实现完成并且效果理想,对于违规驾驶等行为识别率高,同时APP各界面打开流畅,运行无卡顿,各模块之间通信正常,该系统可靠性较高适用于汽车运输行业,可以有效减少交通事故的发生。
表3 APP响应时间
图7 移动端APP数据页面
4 结束语
本文设计并开发了一种智能安全驾驶监测系统,创新型的提出了防作弊酒精浓度检测以及在判断驾驶行为时的预处理方法,可以有效的监测驾驶员是否存在酒驾、违规驾驶、疲劳驾驶等行为,以及监测驾驶员的身体健康状况。同时系统中硬件设备高度集成化,连接车载电源即可供电,移动端APP逻辑简单、交互友好。未来本文提出的智能安全驾驶监测系统可以在长途客运车辆、汽运车辆中推广,可以有效地减少交通事故的发生机率。