c++ - 基于机器视觉的疲劳驾驶检测算法笔记,抛砖引玉
天蓬老师
天蓬老师 2017-04-17 15:33:28
0
0
761

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,欢迎交流学习!谢谢!

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

Antworte allen(0)
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage