法律状态公告日
法律状态信息
法律状态
2019-04-12
授权
授权
2017-04-19
实质审查的生效 IPC(主分类):G06K9/00 申请日:20161124
实质审查的生效
2017-03-22
公开
公开
技术领域
本发明属于图像处理技术领域,涉及一种实时视频疲劳检测的方法,具体是一种针对机车乘务员的实时视频疲劳检测的方法。
背景技术
因为机车乘务工作的特点及其轮乘工作制度使得乘务员的睡眠不规律,容易使乘务员在值乘前产生疲劳蓄积现象,且在值乘时,乘务员必须时刻注视各种仪表状态,瞭望轨道及周边情况,观察信号指示,过度使用眼睛极易产生疲劳。同时,乘务员还须随时应付可能发生的突发状况,致使精神上长期处于紧张状态,易导致心理疲劳。而过度疲劳会降低乘务员的反应速度,长时间疲劳会让乘务员进入盹睡状态,严重影响行车安全,所以,乘务员实时视频疲劳检测具有重要意义。
而当前技术发展尚不成熟,目前针对汽车驾驶员的疲劳检测研究较多,对于机车乘务员的实时视频疲劳检测较少,且到目前为止,仍没有在机车上进行实际应用。目前,中国铁路采用的手段是乘务员每分钟按压“无人警惕按钮”,虽然能对防止工作状态不佳、疲劳、盹睡起到作用,但是增加了乘务员的工作量及工作压力,且当乘务员熟练掌握后很容易转变为下意识重复动作,作用减弱,行车安全性有效保障不足。乘务员实时视频疲劳检测对于提高行车安全性具有重要意义。通过摄像机采集视频进行图像处理和分析,实时判断乘务员疲劳程度,及时示警,提高行车安全性。
目前,大部分的汽车驾驶员实时视频疲劳检测方法都受到光照影响,在光照条件复杂的情况下,可靠性和稳定性不足,且目前已有的检测系统都较为昂贵,多在高档车上安装,但实用性并不强,不利于推广。
发明内容
本发明的目的是提出一种性能稳定,实用性强,能够有效防止机车乘务员疲劳驾驶而影响机车运行安全的一种机车实时视频疲劳检测的方法,对于机车乘务员正面检测效果尤为显著。
为了实现上述目的,本发明采用了以下技术方案:
一种机车实时视频疲劳检测的方法,该方法可与现在中国的列车运行监控记录装置(LKJ2000)等结合起来,应用于机车车载安全防护系统(6A系统)的视频监控子系统,包括如下步骤:
第一步:
打开摄像头,提取视频帧,
第二步:
如果视频帧中有目标跟踪区域并且连续跟踪帧数G少于设定帧数,则开启CamShifi跟踪,然后转入第四步;如果视频帧中没有目标跟踪区域或者连续跟踪帧数G等于设定帧数,转入第三步;
第三步:
运用基于Haar特征的AdaBoost人脸检测分类器检测视频帧中是否有人脸,如果没有检测到人脸,则认为该视频帧中左眼和右眼都处于闭眼状态,然后转入第七步;如果检测到人脸,记录人脸位置及区域大小,根据人脸的“三庭五眼”,确定人眼区域作为目标跟踪区域,然后返回第二步;
第四步:
将目标跟踪区域作为CamShift跟踪算法的输入,获得可旋转矩形区域,所述可旋转矩形的中心为(center.x,center.y)、宽为width、高为height,将以(center.x,center.y)为中心、以γ*width为宽、以δ*height为高的矩形区域作为初始矩形区域,其中,参数γ和δ根据实际情况的需要确定;
运用缩减区域方法对初始矩形区域进行迭代a次的计算,再左右等分为左眼区域和右眼区域,然后分别对左眼区域和右眼区域运用缩减区域方法迭代b次的计算,得到缩减处理后左眼区域和缩减处理后右眼区域,然后以缩减处理后左眼区域中心和缩减处理后右眼区域中心的距离为两眼距离L,其中,迭代计算次数a和b根据实际情况的需要确定;
第五步:
判断缩减处理后左眼区域中心是否处于视频帧的边缘,如果是,则认为该视频帧中左眼处于闭眼状态,然后转入第七步;否则,转入第六步,
判断缩减处理后右眼区域中心是否处于视频帧的边缘,如果是,则认为该视频帧中右眼处于闭眼状态,然后转入第七步;否则,转入第六步,
第六步:
将缩减处理后左眼区域的中心为中心、以η*L为宽、以θ*L为高的矩形作为左眼矩形区域,将缩减处理后右眼区域中心为中心、以η*L为宽、以θ*L为高的矩形作为右眼矩形区域,参数η和θ根据实际情况的需要确定,分别对左眼矩形区域和右眼矩形区域进行图像处理,然后分别提取左眼轮廓和右眼轮廓,分别计算左眼轮廓和右眼轮廓的最小外接矩形的高宽比S,当高宽比S小于设定值时,认为该视频帧中眼睛状态为闭合,然后转入第七步;当高宽比S大于或等于设定值时,认为该视频帧中眼睛状态为睁开,然后转入第七步;
第七步:
分别统计左眼和右眼的睁闭眼次数,计算设定的时间段内所检测的视频帧中左眼为闭合状态的帧数与总帧数的比值F1,同时计算设定的时间段内所检测的视频帧中右眼为闭合状态的帧数与总帧数的比值F2;
第八步:
当F1>ε并且F2>ζ时,判断最近时间t内乘务员是否对机车进行有效操作,如果没有,则报警;否则,进入下一帧图像,重复第二步至第七步,参数ε、ζ和时间t根据实际情况的需要确定。
进一步的,在第四步中,所述缩减区域方法,具体步骤如下:
(1)对初始矩形区域图像进行灰度化处理并计算灰度平均值,再进行二值化处理,得到二值化图像,二值化图像的宽为width1,二值化图像的高为heightl,二值化图像的中心坐标为(center1.x,center1.y),所述二值化处理中的阈值根据灰度平均值确定;
(2)分别统计二值化图像中左右等分的两部分和上下等分的两部分的黑色像素点的个数,分别为W1、W2、H1和H2;
(3)缩减后矩形区域图像的宽width2由下式计算得到:
(4)缩减后矩形区域图像的高height2由下式计算得到:
(5)缩减后矩形区域图像的中心坐标(center2.x,center2.y)由下式计算得到:
式中,系数α和β根据实际情况的需要确定;
(6)根据步骤(3)得到的宽width2、步骤(4)得到的高height2和步骤(5)得到的中心坐标(center2.x,center2.y)得到缩减后矩形区域图像。
进一步的,在第五步中,所述图像的边缘是指x轴坐标小于n倍图像宽或大于(1-n)倍图像宽、y轴坐标小于n倍图像高或大于(1-n)倍图像高,n的值根据实际情况的需要确定。
进一步的,在第五步中,所述图像处理的具体步骤依次为模糊降噪、平滑滤波、均衡化处理以及利用OTSU算法计算阈值的二值化,然后利用边缘检测的方法提取眼睛轮廓。
在第八步中,判断最近三秒内是否对机车进行有效操作,如果没有,则报警,对于有效操作的定义包括乘务员的正常的驾驶操作及对特殊情况的一些操作(如按“无人警惕按钮”);对于报警及解除报警的方法与列车运行监控记录装置(LKJ2000)相结合,将报警分等级,可以通过按“无人警惕按钮”解除最初的一级疲劳警报和一级在线提醒,但当连续按下超过N(根据实际情况设置,可设为10~20)次“无人警惕按钮”时直接升级为二级报警并发出二级在线提醒;当持续报警时间超过时间T1(T1可设为60S),提升警报等级和在线提醒等级,当持续报警时间超过T2(T2可设为60S),联系地面监管中心,根据具体情况紧急迫停机车。
本发明的特点在于:
将CamShift跟踪算法和基于Haar特征的AdaBoost人脸检测算法相结合,减少光照条件的限制,在复杂光照条件下仍然可以进行稳定可靠的检测。在精确定位人眼时,使用迭代缩减区域的方法,速度非常快。方法结合中国铁路的实际情况,可以与列车运行监控记录装置(LKJ2000)等结合起来,适合推广使用。本发明对于所运用的摄像头没有特殊要求,一般摄像头都可以应用,降低了成本。
具体实施方式
下面通过实例对本发明的方法作进一步阐述。
第一步:
打开摄像头,提取视频帧,
第二步:
如果视频帧中有目标跟踪区域并且连续跟踪帧数G少于设定帧数,则开启CamShift跟踪,然后转入第四步;如果视频帧中没有目标跟踪区域或者连续跟踪帧数G等于设定帧数,转入第三步;本实施例中,设定帧数为30帧。
第三步:
运用基于Haar特征的AdaBoost人脸检测分类器检测视频帧中是否有人脸,如果没有检测到人脸,则认为该视频帧中左眼和右眼都处于闭眼状态,然后转入第七步;如果检测到人脸,记录人脸位置及区域大小,根据人脸的“三庭五眼”,确定人眼区域作为目标跟踪区域,然后返回第二步;
第四步:
将目标跟踪区域作为CamShift跟踪算法的输入,获得可旋转矩形区域,所述可旋转矩形的中心为(center.x,center.y)、宽为width、高为height,将以(center.x,center.y)为中心、以γ*width为宽、以δ*height为高的矩形区域作为初始矩形区域,其中,参数γ和δ根据实际情况的需要确定;本实施例中,γ=0.9,δ=0.6。
运用缩减区域方法对初始矩形区域进行迭代a次的计算,再左右等分为左眼区域和右眼区域,然后分别对左眼区域和右眼区域运用缩减区域方法迭代b次的计算,得到缩减处理后左眼区域和缩减处理后右眼区域,然后以缩减处理后左眼区域中心和缩减处理后右眼区域中心的距离为两眼距离L,其中,迭代计算次数a和b根据实际情况的需要确定;本实施例中,a=2,b=8。
缩减区域方法可用简易编程实现迭代计算,通过迭代计算得到一个最终缩减的区域,迭代条件为:a、迭代次数K小于设定次数;b、缩减区域的高大于初始矩形区域的高的0.3倍;c、缩减区域的宽大于初始矩形区域的宽的0.3倍。
第五步:
判断缩减处理后左眼区域中心是否处于视频帧的边缘,如果是,则认为该视频帧中左眼处于闭眼状态,然后转入第七步;否则,转入第六步,
判断缩减处理后右眼区域中心是否处于视频帧的边缘,如果是,则认为该视频帧中右眼处于闭眼状态,然后转入第七步;否则,转入第六步,
第六步:
将缩减处理后左眼区域的中心为中心、以η*L为宽、以θ*L为高的矩形作为左眼矩形区域,将缩减处理后右眼区域中心为中心、以η*L为宽、以θ*L为高的矩形作为右眼矩形区域,参数η和θ根据实际情况的需要确定,本实施例中,η=0.8,θ=0.4,分别对左眼矩形区域和右眼矩形区域进行图像处理,然后分别提取左眼轮廓和右眼轮廓,分别计算左眼轮廓和右眼轮廓的最小外接矩形的高宽比S,当高宽比S小于设定值时,认为该视频帧中眼睛状态为闭合,然后转入第七步;当高宽比S大于或等于设定值时,认为该视频帧中眼睛状态为睁开,然后转入第七步;本实施例中,高宽比S的设定值为0.3;
第七步:
分别统计左眼和右眼的睁闭眼次数,计算设定的时间段内所检测的视频帧中左眼为闭合状态的帧数与总帧数的比值F1,同时计算设定的时间段内所检测的视频帧中右眼为闭合状态的帧数与总帧数的比值F2;
第八步:
当F1>ε并且F2>ζ时,判断最近时间t内乘务员是否对机车进行有效操作,如果没有,则报警;否则,进入下一帧图像,重复第二步至第七步,参数ε、ζ和时间t根据实际情况的需要确定,本实施例中,ε=ζ=0.3,t=3s。
进一步的,在第四步中,所述缩减区域方法,具体步骤如下:
(1)对初始矩形区域图像进行灰度化处理并计算灰度平均值,再进行二值化处理,得到二值化图像,二值化图像的宽为width1,二值化图像的高为height1,二值化图像的中心坐标为(center1.x,center1.y),所述二值化处理中的阈值根据灰度平均值确定;
(2)分别统计二值化图像中左右等分的两部分和上下等分的两部分的黑色像素点的个数,分别为W1、W2、H1和H2;
(3)缩减后矩形区域图像的宽width2由下式计算得到:
(4)缩减后矩形区域图像的高height2由下式计算得到:
(5)缩减后矩形区域图像的中心坐标(center2.x,center2.y)由下式计算得到:
式中,系数α和β根据实际情况的需要确定,本实施例中,ε=ζ=0.5;
(6)根据步骤(3)得到的宽width2、步骤(4)得到的高height2和步骤(5)得到的中心坐标(center2.x,center2.y)得到缩减后矩形区域图像。
进一步的,在第五步中,所述图像的边缘是指x轴坐标小于n倍图像宽或大于(1-n)倍图像宽、y轴坐标小于n倍图像高或大于(1-n)倍图像高,n的值根据实际情况的需要确定。
进一步的,在第五步中,所述图像处理的具体步骤依次为模糊降噪、平滑滤波、均衡化处理以及利用OTSU算法计算阈值的二值化,然后利用边缘检测的方法提取眼睛轮廓。
在第八步中,判断最近三秒内是否对机车进行有效操作,如果没有,则报警,对于有效操作的定义包括乘务员的正常的驾驶操作及对特殊情况的一些操作(如按“无人警惕按钮”);对于报警及解除报警的方法与列车运行监控记录装置(LKJ2000)相结合,将报警分等级,可以通过按“无人警惕按钮”解除最初的一级疲劳警报和一级在线提醒,但当连续按下超过N(根据实际情况设置,可设为10~20)次“无人警惕按钮”时直接升级为二级报警并发出二级在线提醒;当持续报警时间超过时间T1(T1可设为60S),提升警报等级和在线提醒等级,当持续报警时间超过T2(T2可设为60S),联系地面监管中心,根据具体情况紧急迫停机车。
本发明所用到的基于Haar特征的AdaBoost人脸检测算法,在OpenCV中已有相应的函数接口,且OpenCV官网提供了一些人脸检测分类器,对于人脸的正面检测效果很好,可参考示例程序移植。另外,本发明中所用到的打开摄像头、提取视频帧、Camshifft跟踪算法以及灰度化和二值化等图像处理函数在OpenCV中都有相应的接口可以实现,如下所示是比较重要的几个函数:
1、打开摄像头:VideoCapture cap(0);
2、灰度化:void cvCvtColor(const CvArr*src,CvArr*dst,CV_BGR2GRAY);
3、二值化:void cvThreshold(const CvArr*src,CvArr*dst,double threshold,double max_value,int threshold_type);
4、人脸分类器检测:void detectMultiScale(InputArray image,CV—OUT std::vector<Rect>&objects,double scaleFactor=1.1,int minNeighbors=3,int flags=0,Size minSize=Size(),Size maxSize=Size());
5、寻找轮廓:void findContours(InputOutputArray image,OutputArrayOfArrays contours,OutputArray hierarchy,int mode,int method,Point offset=Point());
6、CamShift跟踪算法:int cvCamShift(const CvArr*prob_image,CvRect window,CvTermCriteria criteria,CvConnectedComp*comp,CvBox2D*box=NULL)。
其中,CamShift跟踪算法中的prob_image包含颜色区域信息,window就是人眼粗定位的矩形区域或精确定位人眼后根据两眼的位置关系设置矩形区域,需要在第三步中得出,而根据人脸及人眼的对称性等属性可以将精确定位后的左右眼的位置关系设为CamShift目标跟踪算法是否打开的一个关键的判断条件。
在Ubuntu 14.04系统下安装OpenCV 3.0,根据总流程图编程以及交叉编译可以稳定的运行,检测效果很好,可以满足实时视频检测的要求,能够有效减少遮挡及复杂光照对检测的影响。
机译: 一种确定机动车驾驶员疲劳状态的方法,方向疲劳检测,机动车
机译: 一种检测驾驶员疲劳和注意力分散,报告和处理大数据的系统和应用程序的方法
机译: 一种用于疲劳检测的方法