使用opencv实现人脸检测:Haar级联分类器

这篇具有很好参考价值的文章主要介绍了使用opencv实现人脸检测:Haar级联分类器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 人脸检测介绍

1.1 什么是人脸检测

人脸检测的目标是确定图像或视频中是否存在人脸。如果存在多个面,则每个面都被一个边界框包围,因此我们知道这些面的位置。

人脸检测算法的主要目标是准确有效地确定图像或视频中人脸的存在和位置。这些算法分析数据的视觉内容,搜索与面部特征相对应的模式和特征。通过采用机器学习、图像处理和模式识别等各种技术,人脸检测算法旨在将人脸与视觉数据中的其他对象或背景元素区分开来。

人脸很难建模,因为有许多变量可以改变,例如面部表情、方向、照明条件以及太阳镜、围巾、口罩等部分遮挡。检测结果给出了面部位置参数,并且可以要求有多种形式,例如覆盖面部中央部分、眼睛中心或包括眼睛、鼻子和嘴角、眉毛、鼻孔等的标志的矩形。

1.2 常用的人脸检测算法

在人们日常生活中,最常见的生物识别方式一定是人脸识别,身份验证、门禁、监控等都需要用上人脸识别。对于数据结构工程师和算法工程师来说,人脸识别算法是需要接触的常见算法之一。那本文列举了七种最常见的人脸识别算法。

  • 卷积神经网络(CNN)

卷积神经网络(CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,也是人工神经网络和人工智能的常见算法之一,隶属于机器学习中的深度学习。它的原理是:模型学习直接对图像、视频、文本或声音执行分类结果。它常用于计算机视觉、自然语言处理和最大的图像分类数据集。

  • 特征脸(Eigenface)

特征脸(Eigenface)是指用于机器视觉领域中的人脸识别问题的一组特征向量,用于确定图像数据集中的人脸方差,被认为是第一种有效的人脸识别方法。原理是通过机器学习对人脸进行编码解码。一组特征脸是通过对大量人脸图像的统计分析确定的“标准化人脸成分”的集合,注意这种算法不使用数字图片,而是通过统计数据库,面部特征被分配数字值,人脸是这些值以不同百分比的组合。

  • Fisherfaces

Fisherfaces是最流行的人脸识别算法之一,是特征脸(Eigenface)算法的延伸品,在训练过程中的类别区分方面比特征脸更加优秀。Fisherfaces的优点在于它能够对光照和面部表情变化进行内插和外推。若在与处理阶段与PCA方法结合,算法准确度高达93%。

  • 内核方法:PCA和SVM

主成分分析(PCA)是一种有用的通用统计方法,在人脸识别过程中,PCA能减少源数据同时保留最相关的信息,原理是:生成一组加权特征向量,这些特征向量依次构建特征脸(大量不同的人脸图像),而这些人脸图像的线性组合代表训练集中的每个图像,PCA作用是从训练图像集的协方差矩阵中接收这些特征向量。

支持向量机(SVM)属于机器学习算法,它使用两组分类原则来区分人脸和非人脸,对于每个类别,SVM模型将接收一个标记的训练数据集来对新的测试数据进行分类。

  • Haar Cascade

Haar Cascade是一种用于在图像上定位对象的对象检测方法,他将从大量正样本和负样本中学习,前者包括感兴趣的对象,后者包括除你要查找对象之外的任何内容。训练后,分类器可在新图像上找到感兴趣的对象。Haar Cascade常与局部二值模式算法结合用于刑事鉴定的人脸识别。

  • 三维识别

3D人脸识别的基本原理是人类头骨的独特结构,人的头骨结构具有独特性,可用几十个参数来描述,它的原理是将3D面部扫描与数据库模式进行比较,它最大的优势是不会因为化妆、面部毛发等外界因素影响到检测识别。

  • 皮肤纹理分析

皮肤纹理识别通常使用高分辨率图像。皮肤纹理分析的特殊情况使用不同的独特参数,如痣、肤色、肤色等,常用于人脸检测、不良图像过滤、手势分析等。

1.3 Haar级联分类器

人脸检测是计算机视觉中的一个重要任务,在现实生活中有着广泛的应用价值。Haar级联分类器是OpenCV中实现人脸检测其中一种算法,它通过分析相邻图像区域之间的对比度,确定给定图像或子图像是否与已知类型匹配。我们来考虑如何在层次结构中组合多个Haar级联分类器,以便用一个分类器识别父区域(就目标而言是一张人脸),用其他分类器识别子区域(比如眼睛)。在OpenCV源代码的副本中会有一个文件data/haarcascades。该文件夹包含了所有OpenCV的人脸检测的XML文件,这些文件可用于检测静止图像、视频和摄像头所得到图像中的人脸。

从文件名可知这些级联是用于人脸、眼睛、鼻子和嘴的跟踪。这些文件需要正面、直立的人脸图像。创建人脸检测器时会使用这些文件,创建自己的级联,并训练这些级联来检测各种对象。

使用haar级联分类器人脸检测,计算机视觉,人工智能,opencv,人脸检测

代码地址:https://github.com/opencv/opencv/tree/4.x/data/haarcascades

2 使用opencv进行人脸检测

在静态图像或视频中检测人脸的操作非常相似。视频人脸检测只是从摄像头读出每帧图像,然后采用静态图像中的人脸检测方法进行检测。当然,视频人脸检测还涉及其他的概念,例如跟踪,而静态图像中的人脸检测就没有这样的概念,但它们的基本理论是一致的。

2.1 静态图像人脸检测

检测步骤为读取静态图像,调用模型进行检测。

在OpenCV中,人脸检测使用的是cv2.CascadeClassifier.detectMultiScale()函数,它可以检测出图片中所有的人脸。

cv2.detectMultiScale(self, image, scaleFactor=None, minNeighbors=None, flags=None, minSize=None, maxSize=None)
参数:

image: 输入图像, 灰度图;
scaleFactor: 图像尺寸缩小比例, 决定两个不同大小的窗口扫描之间有多大的跳跃;
minNeighbors: 被检测到几次才算目标;
minSize: 目标最小尺寸;
maxSize: 目标最大尺寸;

人脸检测代码:

import cv2

image = cv2.imread('../data/girl01.jpg')
# 获取XML文件,加载人脸检测器
faceCascade = cv2.CascadeClassifier('../data/haarcascade_frontalface_default.xml')

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

# 调用函数detectMultiScale
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.15, minNeighbors=5, minSize=(5, 5))
print(faces)
print("发现{0}个人脸!".format(len(faces)))
# 逐个标注人脸
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+w), (0, 255, 0), 2)

cv2.imshow("face", image)
cv2.imwrite("../data/detect_result.jpg", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

检测结果如下:

[[242 115 159 159]]
发现1个人脸!

 使用haar级联分类器人脸检测,计算机视觉,人工智能,opencv,人脸检测

2.2 视频人脸检测

检测步骤为读取视频的每一帧图像,对每一帧图像逐一进行人脸检测

import cv2

# 1.读取视频
cv2.namedWindow("CaptureFace")
cap = cv2.VideoCapture('../data/girl.mp4')

# 2.人脸识别器分类器
classfier = cv2.CascadeClassifier('../data/haarcascade_frontalface_alt2.xml')
color = (0, 255, 0)

while cap.isOpened():
    flag, frame = cap.read()
    frame = cv2.flip(frame, 1)  # 镜像操作

    if not flag:
        break

    # 3.灰度转换
    grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 4.人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
    facerects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
    if len(facerects) > 0:  # 大于0则检测到人脸
        for faceRect in facerects:  # 单独框出每一张人脸
            x, y, w, h = faceRect

            # 5.画图
            cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 3)
    cv2.imshow("CaptureFace", frame)
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()


运行结果显示如下:

使用haar级联分类器人脸检测,计算机视觉,人工智能,opencv,人脸检测

2.3 摄像头人脸检测

检测步骤为打开摄像头,捕获摄像头的每一帧数据,针对每一帧数据进行检测文章来源地址https://www.toymoban.com/news/detail-861776.html

import cv2


# 1.调用摄像头
cv2.namedWindow("CaptureFace")
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)

# 2.人脸识别器分类器
classfier = cv2.CascadeClassifier('../data/haarcascade_frontalface_alt2.xml')
color = (0, 255, 0)

while cap.isOpened():
    flag, frame = cap.read()
    frame = cv2.flip(frame, 1)  # 镜像操作

    if not flag:
        break

    # 3.灰度转换
    grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 4.人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
    facerects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
    if len(facerects) > 0:  # 大于0则检测到人脸
        print('检测到人脸')
        for faceRect in facerects:  # 单独框出每一张人脸
            x, y, w, h = faceRect

            # 5.画图
            cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 3)
    cv2.imshow("CaptureFace", frame)
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break
检测到人脸
检测到人脸
检测到人脸
检测到人脸
检测到人脸
检测到人脸

到了这里,关于使用opencv实现人脸检测:Haar级联分类器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv 基于haar特征的级联分类器实现图象识别原理

    暑假的时候做了一个智能机械臂,用到了opencv里的级联分类器,这里写一下我的理解 级联分类器上手简单,同时Haar特征支持一些特殊图形的检测,例如人脸,我训练的是一个纯色模型,效果并不好,不建议用该种方法识别一些颜色梯度变化不明显的物体 (1)haar特征    图

    2024年02月07日
    浏览(35)
  • OpenCV实现人脸检测(Haar特征)

    OpenCV是一个广泛应用于计算机视觉领域的开源库,提供了丰富的图像处理和分析功能。其中,人脸检测是OpenCV中最常见和重要的应用之一。在OpenCV中,可以使用Haar特征分类器实现人脸检测。 Haar特征是一种常用的特征描述方法,它通过在图像上移动不同大小和形状的滑动窗口

    2024年04月16日
    浏览(40)
  • 【opencv】传统目标检测:Haar检测器实现人脸检测

    传统目标分类器主要包括Viola Jones Detector、HOG Detector、DPM Detector,本文主要介绍VJ检测器,在VJ检测器基础上发展出了Haar检测器,Haar检测器也是更为全面、使用更为广泛的检测器。 Viola Jones Detector是作为人脸检测器被Viola和Jones提出来的,后来Rainer Lienhart和Jochen Maydt将这个检测

    2024年02月12日
    浏览(40)
  • 【youcans 的图像处理学习课】23. 人脸检测:Haar 级联检测器

    专栏地址:『youcans 的图像处理学习课』 文章目录:『youcans 的图像处理学习课 - 总目录』 基于 Haar 特征的级联分类器是 Paul Viola 在论文”Rapid Object Detection using a Boosted Cascade of Simple Features”中提出的一种目标检测方法。 Haar 级联分类器在每一级的节点中,使用 AdaBoost 算法学

    2024年02月07日
    浏览(52)
  • python opencv 级联Haar多目标检测

    一、基于OpenCV的haar分类器实现笑脸检测 1、Haar分类器介绍 🚀Haar分类器是一种基于机器学习的目标检测算法,它使用Haar特征描述图像中的目标。Haar特征是基于图像亮度的局部差异计算得出的,可以用来描述目标的边缘、角落和线条等特征。 使用Haar分类器进行目标检测的步

    2024年02月17日
    浏览(49)
  • Haar特征和级联分类器目标检测介绍及应用

    Haar特征和级联分类器是一种经典的目标检测算法,适用于检测物体在图像中的位置、大小和姿态等。本教程将详细介绍Haar特征和级联分类器的原理、实现和应用。 Haar特征是一种图像处理中的特征提取方法,用于描述图像中的纹理、边缘和线条等特征。基于Haar小波变换的思

    2024年02月08日
    浏览(53)
  • 【youcans 的 OpenCV 学习课】22. Haar 级联分类器

    专栏地址:『youcans 的图像处理学习课』 文章目录:『youcans 的图像处理学习课 - 总目录』 Haar 特征分类器是基于 Haar-like 特征提取的监督学习分类器。我们首先讨论 Haar 特征及其加速计算。 3.1 Haar 特征 Haar 特征用黑白两种矩形框组合成特征模板,在特征模板内用黑色矩形像

    2023年04月26日
    浏览(42)
  • OpenCV实战(31)——基于级联Haar特征的目标检测

    在机器学习基础一节中,我们介绍了机器学习的一些基本概念,并通过使用不同类别的样本来构建分类器。但这种方法训练分类器需要存储所有样本的表示,然后通过查看最近标记点(最近邻居)来预测新实例的标签。对于大多数机器学习方法,训练是一个迭代过程,在此过程

    2024年02月09日
    浏览(32)
  • 【OpenCV-Python】——Haar人脸检测&深度学习人脸检测&EigenFaces/FisherFaces/LBPH人脸识别

    目录 前言: 1、人脸检测 1.1 基于Haar的人脸检测 1.2 基于深度学习的人脸检测

    2024年02月05日
    浏览(54)
  • Haar级联分类器概述

    —— 才疏学浅, 难免有错误和遗漏, 欢迎补充和勘误. Haar级联分类器是基于Haar-like特征,运用积分图加速计算,并用Adaboost训练的强分类器级联的方法来进行人脸检测。 目前常用Haar-like特征的分类有: 图1. Haar-like特征分类 首先定义每个Haar-like特征的特征值 f i f_i f i ​ 为:

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包