如何实现简单的人脸检测—基于Haar特征提取的Adaboost强化分类器实现

如何实现简单的人脸检测—基于Haar特征提取的Adaboost强化分类器实现

分类器的测试结果:

在这里插入图片描述

Ⅰ.背景知识了解:

​ 1.什么是Haar特征提取?

在这里插入图片描述

​ Haar特征很简单,分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和。Haar特征值反映了图像的灰度变化情况。

​ 缺点:==矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述特定走向(水平、垂直、对角)的结构。 ==

​ 2.什么是Adaboost分类器?

在这里插入图片描述

​ Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这Adaboost些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。使用Adaboost分类器可以排除一些不必要的训练数据特征,并放在关键的训练数据上面。

Ⅱ.搭建步骤:

​ 1.加载Adaboost官网的haarcascade_frontalface_default.xml和haarcascade_eye.xml文件(链接提取码:gr49)

扫描二维码关注公众号,回复: 11252166 查看本文章
# load xml
face_xml = cv2.CascadeClassifier('E:/DeepLearn/face Detection/xml/haarcascade_frontalface_default.xml')#面部检测
eye_xml = cv2.CascadeClassifier('E:/DeepLearn/face Detection/xml/haarcascade_eye.xml')#眼睛检测

​ 2.加载本地图片路径

# load jpg
img = cv2.imread('E:/DeepLearn/21.jpg')
cv2.imshow('face', img)

​ 3.颜色转换为灰度图

# haar gray
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 将原图转换为灰度图
==这里需要注意的是:使用haar的特征提取只能是灰度图。==

​ 4.检测

# detect face
faces = face_xml.detectMultiScale(gray, 1.3, 5)  # 灰度图数据+scale缩放比例+目标大小下限5像素
print('face=', len(faces))#打印图片中人脸的数目

5.绘图

​ 对识别出的目标进行绘制矩形框,而未识别出人脸的图片则打印“No Detection”。

# draw
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
    roi_face = gray[y:y + h, x:x + w]
    roi_color = img[y:y + h, x:x + w]
    # gray
    eyes = eye_xml.detectMultiScale(roi_face)
    print('eye=', len(eyes))
    for (e_x, e_y, e_w, e_h) in eyes:
        cv2.rectangle(roi_color, (e_x, e_y), (e_x + e_w, e_y + e_h), (0, 255, 0), 2)
if len(faces) == 0:
    font = cv2.FONT_HERSHEY_SCRIPT_SIMPLEX
    cv2.putText(img, "No Detection", (100, 150), font, 1, (0, 0, 255), 2, cv2.LINE_AA)
    # 图片+text+text的起始位置+字体+scale缩放+字体颜色值+线宽+风格
cv2.imshow('dat', img)
cv2.waitKey(0)

Ⅲ.测试与评估

​ 我们选取了3张不同角度的美女人脸进行检测。

在这里插入图片描述

​ 而测试的结果如下:

在这里插入图片描述

​ 分析检测:

使用haar+Adaboost的人脸检测方法对角度要求较高,仅支持正脸检测,对图片的适应性较差,但是对初学者的上手学习还是比较友好的。

猜你喜欢

转载自blog.csdn.net/acceptedday/article/details/104445414