基于MATLAB驾驶行为的疲劳实时检测研究

[摘要]为了有效地检测出驾驶员的驾驶疲劳,本文设计了一种基于驾驶行为的实时疲劳驾驶检测模型。该算法选取与疲劳相关的驾驶行为指标,包括速度均值与标准差,加速度绝对均值与标准差,综合考虑报警设备的报警频率与驾驶时长来划分疲劳以及非疲劳数据作为输入数据,基于K近邻(KNN)算法建立疲劳检测模型。结果表明基于KNN的驾驶疲劳检测模型的AUC值为0.98,能够有效识别疲劳驾驶。

关键词:KNN; 驾驶疲劳; 驾驶行为; 交通安全

Real time fatigue detection based on driving behavior

Song Ye

College of Automobile, Chang'an University

[Abstract] In order to detect the driver's fatigue effectively, a real-time fatigue driving detection model based on driving behavior is designed in this paper. This algorithm selects the driving behavior indicators related to fatigue, including the mean and standard deviation of speed, and the absolute mean and standard deviation of acceleration, and takes the alarm frequency and driving time of alarm equipment into consideration to divide the fatigue and non-fatigue data into the input data. The fatigue detection model is established based on the k-nearest neighbor (KNN) algorithm. The results show that the AUC value of knn-based driving fatigue detection model is 0.98, which can effectively identify fatigue driving.

Keyword: KNN; driving fatigue; driving behavior; traffic safety

  1. 引言

今年来,我国汽车保有量持续增长,客货运输量稳步提升,为我国经济健康快速发展提供了保障,但也带来一个严重的社会问题:交通事故,如何破解这个难题,提升我国交通安全管理水平,收到越来越多学者的关注。统计数据表明驾驶人疲劳是致使交通事故的主要原因之一[1-3],由驾驶疲劳引发的交通事故比例占到事故总数的20%-30%,占特大交通事故45%左右[4]。研究表明事故发生之前如果驾驶员反应时间提前0.5s,就能避免60%的交通事故。因此,研究设计一种可靠的驾驶疲劳检测系统,对降低道路事故发生概率、减少人员伤亡和财产损失有着极为重要的意义。

目前,对于驾驶疲劳检测算法的研究可以分为三类。第一类是基于生理特征的检测算法,主要是使用脑电信号、心电信号、肌电信号等对疲劳进行检测。如Yeo等[5]采用支持向量机算法对正常和疲劳状态下的脑电信号进行分类,以此判断驾驶员的疲劳状态。Ma等[6]使用深度学习网络PCANet提高了脑电信号在疲劳分类中的精度与效率。第一类方法准确度较高,但设备昂贵,使用过程中需与驾驶员身体直接接触,在一定程度上会影响驾驶员的操作[6-8]。

第二类是基于面部特征的检测算法,主要通过眼动、头部、嘴部等行为的特征对疲劳进行检测。如Hardeep等[9]提出一种利用红外光进行人眼定位和跟踪的方法,通过分析眼睛的开闭状态,判断驾驶员的疲劳状态;Mandalapu等[10]通过提取驾驶员嘴部特征、眼部特征和打哈欠特征,构建了一种疲劳检测模型。牛清宁等[11]利用Smart Eye系统提取驾驶员的眼睛数据进行疲劳驾驶检测。Mario等[]采用红外检测算法实现人脸检测并使用Adaboost进行队眼睛与嘴巴的定位;WeiYun采取HOG、CLNG以及旋转变化算法实现人脸检测。此类方法一般通过图像处理技术来获取行为特征信息,具有非接触和安装方便的特点,但容易受光线、环境、驾驶员个人习惯等影响,影响检测效果。

第三类是基于驾驶操作行为的检测算法,主要通过方向盘运动变化、车速变化、油门刹车的使用等对疲劳进行检测。如Sandberg等[12]通过对车速、车辆横向位置、方向盘转角和航偏角对疲劳进行检测。张希波等采用双时间窗法从方向盘转角中提取出最大零速百分比和最大角度标准差两个指标,构建了疲劳驾驶检测模型。屈肖蕾通过驾驶模拟器提取出方向盘以及车辆状态信息的疲劳特征,构建了基于SVM的疲劳驾驶检测模型。毛喆通过驾驶模拟实验分析驾驶员的横纵向的操作特征并且对比分析了基于PCA的模糊聚类以及神经网络的检测方法。第三类方法往往可以使用车辆已有传感器采集数据进行指标构建,具有非接触、数据来源丰富、成本低等优点,但也存在非直接检测、准确率不高等缺点。由于驾驶员是否较难采集,此方面研究多以模拟实验和驾驶实验数据为主,很少使用驾驶人非实验数据的研究成果,很难满足实际使用的需求。

本文将以营运货车非实验行驶GPS数据基础构建驾驶行为表征指标,进而根据表征指标建立疲劳驾驶识别模型,并利用异常驾驶行为疲劳检测数据进行模型标定和验证。

  1. 数据说明

数据来源于上海某公司开发的AI主动安全云平台,该平台可实现对车辆操作监控与报警。本文选取了10辆车的驾驶数据作为基础数据,时间为2017年12月19日至2017年12月31日,数据总量为1796094条,数据内容主要包括车牌号、定位时间、速度、加速度、当前所处经纬度以及异常驾驶行为(包括打哈欠、车道偏离、跟车距离过近等)报警数据。

表1 数据参数及其说明

数据参数

参数说明

车牌号

车牌号

定位时间

定位时间

速度

速度值

加速度

加速度值

经纬度

当前所处经纬度

异常驾驶行为报警

若发生异常驾驶行为则予以报警

  1. 疲劳驾驶行为检测模型构建

2.1 驾驶疲劳特征选取

《道路旅客运输企业安全管理规范》中指出,如果驾驶员连续驾驶时间超过4h并且未休息满20分钟,则予以疲劳驾驶报警;根据前人研究,当驾驶员处于疲劳状态后其环境感知能力和驾驶操作能力会显著降低,可能导致遗漏重要路况信息,无法对潜在的驾驶危险进行判断与修正,因而会频繁地出现异常驾驶行为。故本文将车辆持续行驶4h以上并且频发异常驾驶行为的时间段数据定义为疲劳数据;选取各车辆刚起步并且未发生异常驾驶行为的时间段定义为非疲劳数据。

驾驶行为信号通常为非周期信号,尽管存在着不确定性,但仍然具有一定的统计规律。已有研究表明,反映数据分布以及波动特征的统计特征可以有效地判别驾驶员的疲劳状态,车速与加速度是反映驾驶员驾驶状况的重要指标。本文考虑到驾驶疲劳累积效应,根据一定长度的时间滑动窗来计算速度均值、速度绝对值、加速度绝对均值和加速度标准差。滑动窗口长度直接关系到检测算法使用的检测信息大小,影响疲劳检测算法的效果。因此对于本文的疲劳检测模型来说,选择一个合适的时间滑动窗窗口长度至关重要。

为进一步探究疲劳和非疲劳状态下车速和加速度的变化特征,需要对10组数据中的驾驶车速与加速度在特定时间窗口长度的均值和标准差进行显著性分析,对其非疲劳状态和疲劳状态下的车速和加速度的均值以及标准差进行单因素方差分析。在方差分析前使用夏皮罗-威尔克检验对各个指标的数据进行正态性检测,结果显示各指标均符合正态分布。疲劳与非疲劳状态下的四个指标在给定显著性水平 =0.05的情况下的方差分析结果如表2所示,各指标的p值均小于显著水平 =0.05,表明被试者在非疲劳以及疲劳状态下的加速度与速度的标准差以及速度均值均存在着显著性差异,即表示这四个指标能够作为驾驶疲劳检测的特征参数。

2.2 基于KNN的驾驶疲劳识别模型

2.2.1 模型框架

鉴于疲劳检测问题为二分类问题,本文采用K近邻法(k-nearest neighbor, k-NN)作为基础模型,来对表征驾驶行为的特征进行分类。

驾驶数据集表述为:

其中 表示驾驶数据中的第i个特征向量 且 , i = 1,2,...,N; 为0-1变量,1为处于疲劳状态,0为非疲劳状态。

KNN方法通过测试样本的k 个近邻的标签来计算测试样本的类标签。根据给定的距离度量,对于任意一个测试样本x, 可以找到它的k个最近邻实例,用 来表示。在 中,根据分类决策规则确定xy 类,其描述为:

(1)

其中h = 1,2,...,N并且 j = 0,1**。** 为 中的一个训练样本, 为 的类标签。 为第j 个类别。 作为一个决策函数呈现. I 视作为指标函数。如果 = ,则I 为1,即表明此样本为疲劳状态,否则I 为0,即表明此样本为非疲劳状态。

k 值的选择是KNN的至关重要的因素。若选取了较小的k值,整体的模型将变得复杂且易于导致过拟合;若选取了较大的k值,将会导致模型欠拟合并且模型将忽略训练样本的大量的有效信息,导致模型精度下降。因此,选取适合的k值,将对检测模型有着重大的意义。

2.2.2 模型评估指标

为直观地表现疲劳检测模型对驾驶员疲劳状态的检测情况,建立以疲劳为正状态的二分类混淆矩阵,见表4。

表 4 混淆矩阵

真实

疲劳(Positive)

非疲劳(Negative)

模型检测

疲劳(Positive)

TP

FP

非疲劳(Negative)

FN

TN

其中,TP为正确检测出疲劳状态的样本数;TN为正确检出非疲劳状态的样本数;FP为错检出疲劳状态的样本数;FN为错检出非疲劳状态的样本数。

为了检测模型的有效性,需要有衡量模型泛化能力的评价标准,即性能度量,其中包括敏感性(Sensitivity)、特异性(Specificity)以及正确率(Accuracy),公式分别为:

其中,ALL表示检测样本数;正确率(Accuracy)表示预测正确的结果占总样本的百分比,敏感性表示在实际为非疲劳的样本中被预测为非疲劳样本的概率,特异性表示在实际为疲劳的样本中被预测为疲劳样本的概率。

敏感性与特异性皆能够很好地评判疲劳检测模型对于驾驶疲劳的辨别程度。敏感性过低会导致检测模型提供错误的报警信息而干扰驾驶员的正常驾驶;特异性过低会导致不能及时地提供确切的报警而引发驾驶危险。因此引入ROC曲线,它是反映敏感性与特异性连续变量的综合指标,曲线下面积(AUC值)越大,检测模型效果越好。

2.2.3 时间窗长度及k值选取

为消除不同特征指标的量纲差异,本文对所有的样本进行归一化处理,将所有的原样本规整到[0,1]区间内,归一化公式为:

(2)

归一化后的数据通过机器学习第三方模块Scikit-learn(sklearn)中的KNN算法库实现算法仿真。对不同k值、不同时间窗口长度的分类器进行仿真验证,结果如图所示

图 1 不同时间窗口长度的AUC值

从图中可以看出,时间窗越长,模型AUC值越高,并且随着时间长度的递增,AUC值增长速度越缓慢趋于稳定,最终稳定在0.95~1。考虑到疲劳检测模型的准确性和实时性,我们选择60s的驾驶行为特征作为模型的输入信息。

对于k值,将以数据训练集与测试集的正确率(Accuracy)为基准,采用网格搜索法进行选取。在给定60s驾驶信息作为输入的情况下,采用不同k值的模型效果见图2

图 2 k值的选取

从图2可以看出,训练集与测试集的正确率随着k值的增加而降低。因此,本文采用k 值为1,时间窗为60s的驾驶行为特征作为输入,以KNN算法为基础建立本文的疲劳检测模型。

  1. 模型对比()

将本文基于KNN算法的检测模型与基于同类分类算法的检测模型的性能度量进行比较。多种方法所采用的分类算法以及检测结果,如表4与图3。其中KNN表示本文所使用的k近邻算法;SVC表示支持向量机,其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解;AdaBoost表示自适应增强算法,它为多个弱分类器(一般为单层决策树)结合而成的强分类器;GBDT(GradientBoostingClassifier)表示梯度提升树分类器,GBDT是通过采用加法模型(即基函数的线性组合),以及不断减小训练过程中产生的残差来达到将数据分类的算法;GaussianNB表示朴素贝叶斯分类器;LDA(LinearDiscriminantAnalysis)表示为线性判别分析,LDA的基本思想为在给定训练样本,设法将样本投影到一条直线上,使得同类样例的投影点尽可能的接近,异类样例的投影点尽可能的远,在对新样本进行分类时,将其投影到同样的这条直线上,再根据新样本投影点的位置确定类别;QDA(QuadraticDiscriminantAnalysis)表示为二次判别分析,其为线性判别分析的变体的分类器;LogisticRegression表示为逻辑回归,其基本思想为假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。

表4 多种分类算法的性能度量

分类器
AUC值
测试集正确率
K近邻(KNN)
0.98
0.98
梯度提升树(GBDT)
0.95
0.89
自适应增强算法(AdaBoost)
0.88
0.79
二次判别分析(QDA)
0.71
0.65
支持向量机(SVC)
0.70
0.63
高斯贝叶斯(GaussianNB)
0.67
0.60
逻辑回归(LogisticRegression)
0.66
0.63
线性判别分析(LDA)
0.65
0.65

图 3 多种分类算法的性能对比

由表6以及图3的检测结果可以看出,不同于其它的分类算法,本文以KNN作为疲劳检测模型的分类算法的AUC值达到了最高的0.98,且其测试集正确率皆优于现有的分类方法,这说明本文采用的方法对于驾驶疲劳的预测效果更好。本文方法对驾驶人在正常以及疲劳这2个状态下的分类检测情况如表所示6。

表6 疲劳检测结果

类别

检测结果/%

测为疲劳

测为非疲劳

疲劳

98.59

1.41

非疲劳

1.35

98.65

由表7可以看出,本文采用的方法对非疲劳以及疲劳两种状态的检测正确率均高于98%,尤其对于驾驶员疲劳的检测正确率达到了98.59%。当驾驶员处于疲劳状态时难以保持驾驶稳定性从而对交通安全造成较大的隐患,因此对于疲劳的检测效果尤为重要,将决定疲劳检测模型的实际应用的价值。故本文的方法确保了疲劳检测的有效性,在实际应用中起到实时预警的作用。

4 结论

通过实时采集驾驶员驾驶速度以及加速度信号,根据报警频繁程度与驾驶时长确定疲劳状态,进一步选取速度以及加速度的标准差和绝对均值作为特征指标,基于KNN算法进行驾驶疲劳检测,并且根据特定的模型评估指标,选取出最终的疲劳检测模型,最终模型AUC值高达0.98。

该检测模型通过采集驾驶员60s的驾驶行为信息判断驾驶员驾驶疲劳状态,当驾驶员处于疲劳状态时予以报警。

由于数据获取特征有限,笔者只分析了驾驶行为中的加速度以及速度的影响,在之后的研究中将引入更多的行为特征作为输入变量,以提高检测结果的指导性。

参考文献

[1] Mott G E, Forsman P, Short K R, et al. Efficient driver drowsiness detection at moderate levels of drowsiness.[J]. Accident Analysis and Prevention, 2013, 50(1): 341-350.

[2] Li Z J, Li S B, Li R J, et al. Online detection of driver fatigue using steering wheel angles for real driving conditions[J]. Sensors, 2017, 17(3): 495-507.

[3] 钟铭恩,黄杰鸿,乔允浩,等.生理疲劳和心理疲劳对车辆驾驶的影响对比[J].中国安全生产科学技术, 2017, 13(1): 22-27.

[4]柳龙飞.基于人脸分析的驾驶疲劳检测方法研究[D].武汉科技大学,2019.

[5]Yeo M V M, Li X, Shen K, et al. Can SVM be used for automatic EEG detection of drowsiness during car driving [J]. Safety Science, 2009, 47 (1): 115 124.

[6]肖赛,雷叶维.驾驶疲劳致因及监测研究进展[J].交通科技与经济, 2017(4):14-19.

[7]Chuang C H, Huang C S, Ko L W, et al. An EEG-based perceptual function integration network for application to drowsy driving[J]. Knowledge-Based Systems, 2015, 80(C): 143-152.

[8] Han W, Yang Y, Huang G B, et al. Driver drowsiness detection based on novel eye openness recognition method and unsupervised feature learning[C]. IEEE International Conference on Systems, Man, and Cybernetics, Kowloon, 2015: 1470-1475.

[9]Singh H, Bhatia J S, Kaur J. Eye tracking based driver fatigue monitoring and warning system [C].2011 IEEE International Conference on Power Electronics. IEEE, 2011: 1-6.

[10]Devi M S, Bajaj P R. Fuzzy based driver fatigue detection [J]. Systems Man and Cybernetics (SMC), 2010 IEEE International Conference on, 2010: 3139 - 3144.

[11]牛清宁,周志强,金立生等.基于眼动特征的疲劳驾驶检测方法[J]. 哈尔滨工程大学学报,2015(03):394-398.

[12] Mario Martinez-Zarzuela,Francisco Javier Diaz Pernas..AdaBoost Face Detection on the GPU Using Hair-Like Features[J].IEEE,2017,78(9):407-412.

[13]Wei Yun,Tian Qing,Guo Jianhua.Muti-Vehicle Detection Algorithm through Combining Harr and Hog Feathres[J].Mathematics and Computers in Simulation,2019,79(8):130-145.

[14]Sandberg D, Wahde M. Particle swarm optimization of feedforward neural networks for the detection of drowsy driving [J]. Neural Networks, IEEE International Joint Conference on, 2008: 788-793.

[15]张希波,成波,冯睿嘉.基于方向盘操作的驾驶人疲劳状态实时检测方法[J].清华大学学报:自然科学版,2010,50(7):1072-1076.

[16]屈肖蕾.基于转向操作和车辆状态的疲劳驾驶检测方法研究[D].北京:清华大学,2012.

[17]毛喆.机动车疲劳驾驶行为识别方法研究[D]:武汉理工大学,2009.

[18]石晓玲,杨英仓.基于车辆行驶轨迹特征的驾驶人疲劳状态识别技术研究[J].中国新通信, 2017, 19(2): 158-160.

[19] Bila C, Sivrikaya F, Khan M A, et al. Vehicles of the future: a survey of research on safety issues[J]. IEEE Transactions on Intelligent Transportation Systems, 2017, 18(5): 1046-1065.

[20]汪宴宾.基于驾驶行为特征与眼动特征的驾驶疲劳辨识方法研究[D]:西南交通大学,2015.

相关推荐
昨日之日20061 小时前
Moonshine - 新型开源ASR(语音识别)模型,体积小,速度快,比OpenAI Whisper快五倍 本地一键整合包下载
人工智能·whisper·语音识别
浮生如梦_1 小时前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
深度学习lover1 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
热爱跑步的恒川2 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
励志成为嵌入式工程师3 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉3 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer3 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
wheeldown4 小时前
【数据结构】选择排序
数据结构·算法·排序算法
阡之尘埃4 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
观音山保我别报错5 小时前
C语言扫雷小游戏
c语言·开发语言·算法