深度学习篇-Opencv中的Haar级联分类器
目录
深度学习篇—Opencv中的Haar级联分类器
OpenCV 中的 Haar 级联分类器 是一种基于 Haar 特征的目标检测方法 ,广泛应用于 人脸检测、眼睛检测、行人检测 等任务。Haar 级联分类器的核心是使用预先训练好的分类器模型,这些模型通常以 XML 文件的形式提供。OpenCV 自带了一些常用的 Haar 级联分类器配置文件 ,用户也可以根据需要训练自己的分类器。
1.Haar 级联分类器配置文件的结构
Haar 级联分类器的 配置文件 是一个 XML 文件 ,包含了 分类器的结构、特征、阈值 等信息。以下是配置文件的主要组成部分:
<cascade> 标签:
这是 XML 文件的根标签,包含了整个级联分类器的信息。
<stageType> 标签:
指定级联分类器的类型,通常是 "BOOST"(基于 AdaBoost 算法)。
<featureType> 标签:
指定特征类型,通常是 "HAAR"(Haar 特征)。
<height> 和 <width> 标签:
指定检测窗口的大小(以像素为单位),通常是 24x24。
<stageParams> 标签:
包含级联分类器的参数,如弱分类器的数量、最大误检率等。
<featureParams> 标签:
包含特征参数,如 Haar 特征的最大数量等。
<stages> 标签:
包含所有级联阶段的列表。每个阶段都是一个 <_> 标签,包含该阶段的弱分类器和其他参数。
<trees> 标签:
包含该阶段的决策树(弱分类器)。每个决策树是一个 <_> 标签,包含多个节点。
<feature> 标签:
指定 Haar 特征的矩形区域及其权重。
<threshold> 标签:
指定分类器的阈值,用于判断是否通过该阶段的分类。
2.OpenCV 自带的 Haar 级联分类器配置文件
OpenCV 提供了一些常用的 Haar 级联分类器配置文件 ,这些文件通常位于 OpenCV 安装目录的 data/haarcascades/ 目录下 。以下是一些常见的配置文件:
2.1人脸检测
2.1.1haarcascade_frontalface_default.xml
haarcascade_frontalface_default.xml:用于检测正面人脸。
2.1.2haarcascade_frontalface_alt.xml
haarcascade_frontalface_alt.xml:另一种正面人脸检测模型。
2.1.3haarcascade_frontalface_alt2.xml
haarcascade_frontalface_alt2.xml:改进的正面人脸检测模型。
2.1.4haarcascade_frontalface_alt_tree.xml
haarcascade_frontalface_alt_tree.xml:基于树结构的正面人脸检测模型。
2.2眼睛检测
2.2.1haarcascade_eye.xml
haarcascade_eye.xml:用于检测眼睛。
2.2.2haarcascade_eye_tree_eyeglasses.xml
haarcascade_eye_tree_eyeglasses.xml:用于检测戴眼镜的眼睛。
2.3微笑检测
2.3.1haarcascade_smile.xml
haarcascade_smile.xml:用于检测微笑。
2.4全身检测
2.4.1haarcascade_fullbody.xml
haarcascade_fullbody.xml:用于检测全身。
2.5上半身检测
2.5.1haarcascade_upperbody.xml
haarcascade_upperbody.xml:用于检测上半身。
2.6下半身检测
2.6.1haarcascade_lowerbody.xml
haarcascade_lowerbody.xml:用于检测下半身。
2.7行人检测
2.7.1haarcascade_pedestrian.xml
haarcascade_pedestrian.xml:用于检测行人。
3.使用 Haar 级联分类器配置文件
在 OpenCV 中使用 Haar 级联分类器配置文件非常简单。以下是一个使用 haarcascade_frontalface_default.xml 进行人脸检测的示例代码:
import cv2
#加载 Haar 级联分类器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
#读取图像
img = cv2.imread('test.jpg')
#转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#检测人脸
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
#绘制检测到的人脸
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
#显示结果
cv2.imshow('Detected Faces', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Haar 级联分类器是 OpenCV 中一种强大的目标检测工具 ,适用于多种检测任务。OpenCV 提供了多种 预训练的 Haar 级联分类器配置文件 ,用户也可以根据需要训练 自定义的分类器 。通过理解配置文件的结构和使用方法,可以更好地应用 Haar 级联分类器进行目标检测。