Haar-like人脸检测

3,866次阅读
8条评论

2001年viola和jones发表的论文《Robust Real Time Object Detection》是人脸检测的一个里程碑,用该方法识别图片或者视频中的人脸有比较高的检测率,不过人脸的姿势(非正脸),光照等其他因素的影响还是比较严重的影响到了检测率。

下面我讲我浅薄的理解写下来,如果有误,还请大家指正:

Haar-like检测器 = Haar-like特征 + 积分图方法 + AdaBoost + 级联
其基本过程有以下几步: 1、使用Haar-like特征做检测; 2、使用积分图对Haar-like特征值求解加速; 3、使用AdaBoost算法训练区分人脸和非人脸的强分类器; 4、使用筛选式级联把强分类器级联到一起,提高准确率。

详细的细节可以参考下面的几篇文章: 《Robust Real Time Object Detection》 《Rapid Object Detection using a Boosted Cascade of Simple Features》 《基于 AdaBoost 算法的人脸检测》

计算出海量的矩形特征后,如何区分出哪些矩形特征才是对分类器有效? 对一个特征而言,是否有效,要看对所有样本而言(正样本和负样本),该特征值能否有明显的区分度,能够以较大的概率区分出样本中的正样本或负样本。

MATLAB2012b以上的版本和opencv都集成了Haar-like人脸检测相关的函数,下面简单展示下用opencv-Python调用函数的实现:

# get frame from Video
import cv2
imagePath1 = "222.jpg"
im = cv2.cv.LoadImage(imagePath1)
thumb = cv2.cv.CreateImage((im.width / 2, im.height / 2), 8, 3)
cv2.cv.Resize(im, thumb)
cv2.cv.SaveImage("222_1.jpg", thumb)
imagePath = "222_1.jpg"
faceCascade = cv2.CascadeClassifier("./haarcascade_frontalface_alt2.xml")
image = cv2.imread(imagePath)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor=1.15,
    minNeighbors=5,
    minSize=(5, 5),
    flags=cv2.cv.CV_HAAR_SCALE_IMAGE
)
print "Found faces!".format(len(faces))
for(x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow("Faces found", image)
cv2.waitKey(0)

效果如下: Haar-like人脸检测

admin
版权声明:本站原创文章,由admin2017-06-24发表,共计1232字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(8条评论)
admin 博主
2017-06-24 11:31:52 回复

杨总监新作,人脸认识一定要顶一下

admin 博主
2017-06-24 11:32:09 回复

擦,打错字了,人脸识别