最近老总让我整个疲劳检测的demo。
查资料发现下面好文章。必须得转。
转自:http://blog.csdn.net/u011100984/article/details/38364857
人脸识别非常容易受到光线条件变化,人脸方向,面部表情等等的影响,所以就需要尽可能的减少这些差异。否则人脸识别算法会经常认为相同条件下的两张不同人脸之间具有非常大的相似性,而不是认为一个人的两张脸。
最简单的人脸预处理的方式就是直方图均衡equalizeHist(),在人脸检测中用过,这对于光线和位置变化不是很明显的情况足够,但是在现实世界条件下为了保证可靠性,我们需要很多复杂的技术,包括面部特征检测(检测眼,鼻,嘴,眉毛等)。为了简单我们仅仅使用眼检测并且忽略其他面部特征例如嘴和鼻,它们相比于眼睛来说不太重要。
眼睛检测
眼睛检测对于人脸预处理来说非常有用,因为对于正脸,我们总是假设人的眼睛应该是水平的并且在人脸的对立位置,并且不管面部表情,光线变化,相机属性,相机距离等的影响,眼睛都应该是人脸上具有相当标准的位置以及尺寸。当人脸检测器检测到一个人脸实际是别的东西的时候,忽略错误位置是非常有用的。很少出现人脸检测器和双眼检测器同时出错的情况,所以如果使用检测到的人脸和双眼来处理图像,那么不会检测出很多错误位置(但是不会给出很多人脸供处理,因为人眼检测器不像人脸检测器那么有效)。
opencv2.4中一些预训练的人眼检测器可以检测睁开或者闭合的眼睛,而有一些只能检测睁开的眼睛。
能够检测人眼睁开或者闭合的检测器如下:
• haarcascade_mcs_lefteye.xml(and haarcascade_mcs_righteye.xml)
• haarcascade_lefteye_2splits.xml(and haarcascade_righteye_2splits.xml)
只能检测睁开的眼睛的检测器:
• haarcascade_eye.xml
• haarcascade_eye_tree_eyeglasses.xml
【注意】睁开或者闭合人眼检测器会指定训练的是哪只眼睛,所以需要使用不同的检测器来对应左眼和右眼,然而只检测睁开眼睛的检测器可以使用同一个检测器来表示左眼或者右眼。haarcascade_eye_tree_eyeglasses.xml对于人带着眼镜的情况能够检测出来人眼,但是如果不戴眼镜的情况就不太可靠了。
XML带有“left eye”的名字意味着人的实际的左眼,所以对于相机图像来说就是右边的眼睛。
上面四个人眼检测器是按照最可靠到最低可靠度来排列的,所以如果你不需要检测带着眼睛的情况,那么第一个检测器会是最好的选择。
人眼搜索区域
人眼检测中,裁剪图像只显示大概眼睛区域是非常重要的,就像人脸检测的情况,然后继续裁剪一个小的矩形表示左眼的大概区域(如果使用左眼检测器)右眼同理。如果你在整个人脸或者是整幅图上检测,会非常慢以及低的可靠度。不同人眼检测器适合不同的人脸区域,例如如果在实际人眼的最接近区域检测使用haarcascade_eye.xml是效果最好的,而haarcascade_mcs_lefteye.xml和haarcascade_lefteye_2splits.xml是对于人眼所在区域的大区域进行检测的效果最好。
下面列出了不同人眼检测器的优质的人脸搜索区域(使用LBP)使用检测到的人脸矩阵的相对坐标。
原文链接:https://www.f2er.com/xml/296379.html