在疲劳检测算法中,个人感觉最好的算法是 Dlib 这个库可以实现人脸的关键点的检测,有了人眼睛的点位,便可以检测眨眼之类的频率来进行人眼识别;
但是在matlab中调用dlip需要比较复杂的操做,有兴趣的可以网上搜索做法;
这篇文章主要要做的是基于matlab现有的方法来进行疲劳检测,主要的做法如下:
第一步:先检测出人脸的位置
第二步:检测出人眼睛的位置
然后获得俩个眼睛的小图片进行分析
通过相关的操做得到眼睛对应的位置
然后对图像进行区域分割,得到连通域,然后对连通域进行分析
这里使用的是色彩分割工具,使用色彩分割将眼睛用得到的颜色提取出来,然后变成二值化的图像;
获得二值图像后,提取眼睛的轮廓;
提取后的二值图像有时候会出现干扰,所以需要使用,灰度积分投影的方法进行过滤掉噪声部分;
经过灰度积分头应的方法可以将噪声去掉
第三步:通过形态学等操做,提取出人的眼睛的轮廓
下面依旧是通过灰度积分投影的方法获得眼睛的矩形框;
由于这个图像右遮挡,所以效果不明显
然后使用对比眼睛的长度和高度来判断是睁眼睛还是闭眼睛
当然也会有翻车的时候,因为没有算法是绝对完美的嘛
第四步:计算人眼的张开大小来判断眨眼频率
计算眨眼频率就是不断的读取视频的每个帧然后去处理
然后就可以根据 视频逐帧的获取人眼睛的开闭生成一个文件用来存储人眼睁开和闭合的状态
然后按照方法对文件进行分析