基于机器视觉的疲劳驾驶检测算法笔记,抛砖引玉

李智伟 发布于 2017/03/14 21:09
阅读 423
收藏 0

1

命令行输入 vid =webcam();登录账号,下载摄像头驱动。

2

//打开摄像头

//r2014a webcam操作  

vid=webcam();

videoFrame = snapshot(vid);

frameSize = size(videoFrame);

videoPlayer = vision.VideoPlayer('Position', [100 100 [frameSize(2), frameSize(1)]+30]);

for ii = 1:600%600 frame images

 

   % trigger(vid);

   im=snapshot(vid); % Get the frame in im

   % im=getdata(vid,1); % Get the frame in im

    imshow(im)

end

 

3

检测是否能打开摄像头看见自己 。

4

代码建议在图形工作站运行。

5

matlab版本不一样 有些类的属性不一样。

6

检测的是眼睛和嘴巴的行为情况,来判断的是不是疲劳。

7

我训练的时候,眼镜的图片不是带眼镜的,而且眼镜有时候反光,不好定位人眼。

8

用到的算法:一个是人脸检测的算法,然后根据人眼在人脸的几个位置定位人眼。

人脸检测用的模版匹配。还有就是用聚类的方法分割出来人的嘴巴部分。再用支持向量机来综合嘴巴的状态和人眼状态来判断是不是疲劳。DB里面就是训练时候用的人眼和嘴巴的数据。如果想效果最好的,最好是自己训练,因为每个人的眼睛嘴巴的形态还是有点不同。

9

人脸那个界面的左上角有文字提示。

10

对疲劳和不是疲劳的特征进行训练,我用的SVM训练,训练好之后,当下次有位置类型的特征来的时候,就可以用SVM进行识别分类。说的多一点就是用SVM来找到一个最优的决策面。

11

为什么卡顿 :

这个聚类会很耗时间。根据你采集的数据量。就是单张图像的数据量。

12

分类这里。其实就是算法耗时。你如果把这个算法全部注释了,单独看视频,是很流畅的。 说得明白点就是数据采集的速度快了,处理速度跟不上。

13

如果要跟上实时性一般的做法就是用好的硬件。或者优化算法。实际产品中要保证数据采集和处理同步。即使异步延迟也会很短。估计就几毫秒。这个是对于在线实时处理。如果是离线处理就不需要要求这些。

 

说句题外话,楼主正在找视觉算法研发助理的工作,坐标深圳。有岗位空缺者请联系本人微信374949137,欢迎交流学习!谢谢!

加载中
0
露露娜
露露娜

我正在做这方面的课题,和楼主的思路相似,现在卡在一个地方好久了,跪求楼主分享一下你的代码,如果可以真的非常感谢!!!我的邮箱252153742@qq.com.

0
RookieSa
RookieSa
我用了dlib以及opencv做的,效果还可以吧。
返回顶部
顶部