Haar

简介: 【6月更文挑战第11天】

haarcascade_frontalface_alt.xml 是 OpenCV 提供的预训练 Haar 特征分类器模型文件,用于人脸检测。它基于 Haar 特征级联分类器算法训练而成,能够在图像或视频中检测到人脸。

Haar 特征级联分类器

Haar 特征级联分类器是一种基于机器学习的人脸检测方法,最早由 Paul Viola 和 Michael Jones 在 2001 年提出。这个方法利用大量的正样本(包含人脸的图像)和负样本(不包含人脸的图像)进行训练,生成一个能够快速检测人脸的分类器。

haarcascade_frontalface_alt.xml 文件的作用

  1. 预训练模型

    • 该文件包含一个经过训练的分类器模型,能够检测图像中的人脸。这使得开发者无需自己训练模型即可使用人脸检测功能。
  2. 人脸检测

    • 通过加载这个 XML 文件,OpenCV 可以使用其中的特征和级联分类器进行人脸检测。

数据的由来

训练这种级联分类器模型需要大量的正样本和负样本:

  1. 正样本

    • 包含人脸的图像,用于告诉分类器什么是人脸。通常,这些图像会经过各种变换(例如,旋转、缩放)以增加样本的多样性。
  2. 负样本

    • 不包含人脸的图像,用于告诉分类器什么不是人脸。这些图像来自各种背景和场景,以确保分类器能够区分人脸和非人脸区域。

训练过程

训练过程主要包括以下步骤:

  1. Haar 特征提取

    • Haar 特征是一组简单的矩形特征,计算图像中不同区域的像素差异。常见的 Haar 特征包括边缘特征、线特征和四角特征。
  2. 积分图像

    • 为了加速特征计算,使用积分图像。积分图像在常数时间内计算任何矩形区域的像素和,从而大大加快特征计算速度。
  3. AdaBoost 算法

    • 使用 AdaBoost 算法选择最能区分人脸和非人脸的特征,并组合成一个强分类器。AdaBoost 通过多次迭代,从特征集中选择一组弱分类器,并赋予它们不同的权重。
  4. 级联分类器

    • 训练得到的分类器组成一个级联结构,分为多个阶段。每个阶段包含若干个弱分类器。输入图像从第一个阶段开始进行检测,如果某个阶段判断为非人脸,则立即丢弃该区域,减少计算量。如果通过所有阶段的检测,则认为该区域包含人脸。

示例代码

以下是一个使用 haarcascade_frontalface_alt.xml 进行人脸检测的示例代码:

import cv2

# 加载图像
image = cv2.imread('path_to_image.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 加载预训练的 Haar 特征分类器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_alt.xml')

# 检测人脸
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=4, flags=cv2.CASCADE_SCALE_IMAGE, minSize=(30, 30))

# 绘制矩形框
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)

# 显示结果
cv2.imshow('Detected Faces', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
目录
相关文章
|
3月前
Laplacian(拉普拉斯)边缘检测
【6月更文挑战第7天】Laplacian(拉普拉斯)边缘检测。
31 1
|
3月前
|
机器学习/深度学习 算法 BI
图像处理之HOG特征提取
图像处理之HOG特征提取
36 0
|
4月前
|
Serverless 计算机视觉
【OpenCV】-图像的矩
【OpenCV】-图像的矩
|
4月前
|
10月前
SURF特征检测
SURF特征检测
46 1
|
资源调度 算法 机器人
图像特征提取与描述_角点特征02:SIFT算法+SURF算法
前面两节我们介绍了Harris和Shi-Tomasi角点检测算法,这两种算法具有旋转不变性,但不具有尺度不变性,以下图为例,在左侧小图中可以检测到角点,但是图像被放大后,在使用同样的窗口,就检测不到角点了。
180 0
|
算法 数据可视化 计算机视觉
CV17 HOG特征提取算法
假设有这么一幅图片(gray格式),取出64*128大小的部分,通过选择其中的一个像素点及其周围的3x3区域,计算梯度和大小
280 0
|
机器学习/深度学习 XML 算法
CV16 人脸检测:Haar级联
因为Haar级联是在机器学习AdaBoost、Boosting的基础上提出的,由于我还没有学过机器学习,所以这部分的内容日后再描述,我将根据自己的理解浅显地解释一下
227 0
|
编解码 资源调度 算法
CV学习笔记-尺度不变特征变换(SIFT)
CV学习笔记-尺度不变特征变换(SIFT)
476 0
CV学习笔记-尺度不变特征变换(SIFT)
|
机器学习/深度学习 Python
梯度直方图(HOG)用于图像多分类和图像推荐(上)
梯度直方图(HOG)用于图像多分类和图像推荐
157 0
梯度直方图(HOG)用于图像多分类和图像推荐(上)