在 python 中使用 Haar-Cascade 进行人脸检测

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

在 python 中使用 Haar-Cascade 进行人脸检测

介绍

在本文中,我们将讨论在 OpenCV python 中使用 Haar Cascade(级联)实现人脸检测器。

识别图像中的给定对象称为对象检测。可以使用多种技术来完成此任务,但在本文中,我们将使用带有预训练 XML 文件的 haar 级联。这是执行对象检测的最简单方法。

Haar 级联已用于低边缘设备上的对象检测,它是 OpenCV 中最流行的对象检测算法之一。

Haar 级联计算量不大;因此它适用于计算能力较小的小型设备。

Haar 级联

什么是 Haar 级联,它是如何工作的?

Haar 级联 是一种基于特征的对象检测算法,用于从图像中检测对象。Cascade 函数在大量正负图像上进行训练以进行检测。

该算法不需要大量计算并且可以实时运行。我们可以为动物、汽车、自行车等自定义对象训练自己的级联函数。

Haar 级联 不能用于人脸识别,因为它只能识别匹配的形状和大小。

Haar 级联使用 Cascade 函数和 Cascade 窗口。它尝试计算每个窗口的特征并进行正负分类。如果窗口可以是对象的一部分,则为正,否则为负。

在 python 中使用 Haar-Cascade 进行人脸检测

Haar 级联可以理解为二进制分类器。它为那些可以成为我们对象一部分的级联窗口指定正值,为那些不能成为我们对象的一部分的窗口指定负值。

  • Haar 级联可以实时工作。

  • 与现代对象检测算法相比,Haar 级联并不准确。

  • 它检测到许多误报。这可以在一定程度上进行调整,但不能完全删除。

  • 实现起来非常简单。

  • Haar 级联最大的缺点是它的误报检测。

预训练的 Haar 级联

有许多预训练的 haar 级联文件使实施变得超级容易。我们也可以训练自己的 haar 级联,但这需要大数据进行训练。

OpenCV 库在 GitHub 上管理所有流行的 haar 级联预训练文件的存储库

链接地址:https://github.com/opencv/opencv/tree/master/data/haarcascades

这些文件可用于各种对象检测任务,例如:

  • 人脸检测

  • 眼睛检测

  • 车辆检测

  • 鼻子/嘴巴检测

  • 身体检测

  • 车牌检测

在 python 中使用 Haar-Cascade 进行人脸检测

Haar 级联将其特征存储在一个 XML 文件中;这些文件可以直接加载到 OpenCV 中,使用 Haar 级联进行对象检测。

在 OpenCV 中实现 Haar 级联

如果你正在使用 OpenCV 提供的存储库中可用的任何预训练对象检测,则只需下载预训练的 XML 文件。

在 Python 中安装 OpenCV

可以使用 python 中的 pip 包管理器安装 OpenCV。

!pip install opencv-python
#---OR ---
!pip install opencv-contrib-python
在 OpenCV 中加载 Haar 级联

我们可以使用函数cv2.CascadeClassifier加载 haar-cascade XML 文件。

face_detector=cv2.CascadeClassifier(‘haarcascade_frontalface_default.xml’)
eye_dectector = cv2.CascadeClassifier(‘haarcascade_eye.xml’)

一旦加载了 XML 文件,我们就可以调用检测器函数。

results = face_detector.detectMultiScale(gray_img, scaleFactor=1.15,minNeighbors=5,minSize=(34, 35), flags=cv2.CASCADE_SCALE_IMAGE)
# import the necessary packages
import cv2

face_detector=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_dectector = cv2.CascadeClassifier('haarcascade_eye.xml')

image = cv2.imread('tomato.jpg')
gray_img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

results = face_detector.detectMultiScale(gray_img, scaleFactor=1.15,minNeighbors=5,minSize=(34, 35), flags=cv2.CASCADE_SCALE_IMAGE)
print(results)

results是检测到的对象周围的边界框坐标 (x,y,w,h) 的列表。

detectMultiScale中的参数:

  • scaleFactor:这表示对象的大小与原始图像相比减小了多少。

  • minNeighbors:此参数告诉在单个边界框中应该有多少个邻居。

  • minSize :这表示我们图像中对象的最小可能大小。如果我们的对象小于 minSize ,它将被忽略。

注意:对于对象检测,我们必须使用gray_image, minNeighborsscaleFactor等参数。

人脸检测

让我们以第一个使用预训练 haar 级联的对象检测示例为例,我们将使用 Python 从图片中检测人脸。

使用此链接下载用于人脸检测的级联文件:https://github.com/opencv/opencv/tree/master/data/haarcascades

import numpy as np
import cv2
#---loading the Haar 级联 detector using CascadeClassifier---face_detector=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
#---Loading the image from local -----
img = cv2.imread('team_india.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
results = face_detector.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in results:
    cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
  
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • results它包含图片中边界框的坐标。

  • detectMultiScale此方法仅适用于灰度图片。

  • cv2.rectangle允许我们在传递坐标后绘制矩形。

  • scaleFactor = 1.3FineTuning 参数,取值范围从 1 到 2。

在 python 中使用 Haar-Cascade 进行人脸检测
分级检测

Haarcascade 支持分级检测,这意味着 Haar 级联能够以分级方式检测单个帧内的多个对象。

假设我们必须检测人类的面部和眼睛。要继续执行任务,我们需要执行以下步骤。

  • 检测人脸

  • 对于每张脸,裁剪人脸并将其转发以进行眼睛检测

  • 在找到眼睛的坐标 ( ex,ey,ew,eh) 后,在原始图片中的眼睛周围绘制一个边界框。

  • 在原始图片上使用坐标(x,y,w,h)在面部周围绘制一个边界框。

import numpy as np
import cv2
face_detector1=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_detector1 = cv2.CascadeClassifier('haarcascade_eye.xml')
img = cv2.imread('uman.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces_result = face_detector.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces_result:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
eyes = eye_detector.detectMultiScale(roi_gray)
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
在 python 中使用 Haar-Cascade 进行人脸检测

实时实现人脸检测

我们可以在 OpenCV 视频流中使用 Haar 级联进行对象检测,只需要在 OpenCV 中读取视频或摄像头,其余的都是一样的。

视频源是一系列帧,因此代码与单个帧相同。由于其轻计算要求,Haar 级联每秒运行良好。

我们将读取 OpenCV 视频摄像头输入以实时拍摄图像。

import cv2
face_detector1 = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_dectector1 = cv2.CascadeClassifier('haarcascade_eye.xml')
# reading the input image now
cap = cv2.VideoCapture(0)
while cap.isOpened():
    _, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_detector1.detectMultiScale(gray,1.1, 4 )
    for (x,y, w, h) in faces:
    cv2.rectangle(frame, pt1 = (x,y),pt2 = (x+w, y+h), color = (255,0,0),thickness =  3)
    roi_gray = gray[y:y+h,x:x+w]
    roi_color = frame[y:y+h, x:x+w]
    eyes = eye_dectector1.detectMultiScale(roi_gray)
    for (ex,ey, ew, eh) in eyes:
        cv2.rectangle(roi_color, (ex,ey), (ex+ew, ey+eh), (0,255,0), 5)
    cv2.imshow("window", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
frame.release()

眼睛和面部的边界框将是实时的,并且每帧都会发生变化。

Haar 级联人脸检测的局限性

Haar 级联对于人脸、汽车等一些对象仍然很受欢迎,这些对象很容易区分。

Haar 级联不能用于深度目标检测,如谷物类型等。

Haar 级联算法有一些限制:

  • 与现代对象检测器相比,精度较低。

  • 高假阳性检测。

  • 需要手动调整参数。

  • 为自定义对象训练 haar 级联并不容易。

结论

在本文中,我们讨论了 haar 级联的工作原理以及如何在 python 中使用 OpenCV实现 haar 级联以进行对象检测。我们使用预训练的 haar 级联文件进行人脸检测和眼睛检测,然后我们实时执行相同的操作。

我们还谈到了 haar 级联算法的局限性,为什么它仍然被广泛使用,为什么它这么快。

  • 可以使用手动参数调整来修复误报率。

  • YOLO、SSD 和其他深度学习对象检测算法保证了更高的准确性。

  • 训练自定义 haar 级联既耗时又低效。

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓文章来源地址https://www.toymoban.com/news/detail-481130.html

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

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

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

相关文章

  • OpenCV实现人脸检测(Haar特征)

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

    2024年04月16日
    浏览(30)
  • 【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日
    浏览(28)
  • 【人脸检测1】Haar+Adaboost Demo

    # -*-coding:utf-8-*- #author: lyp time: 2018/8/10 import cv2 import numpy as np face_xml = cv2.CascadeClassifier(\\\'haarcascade_frontalface_default.xml\\\') eye_xml = cv2.CascadeClassifier(\\\'haarcascade_eye.xml\\\') img = cv2.imread(\\\'lyp.jpg\\\') cv2.imshow(\\\'src\\\', img) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_xml.detectMultiScale(gray, 1.3, 5) print(\\\'fa

    2024年02月10日
    浏览(46)
  • 【图像处理】使用Python进行实时人脸检测和识别

            你有没有想过用Python构建一个面部识别系统?不要再看了!在本教程中,我们将使用 face_recognition 库来检测和识别视频流、图像甚至使用网络摄像头实时检测和识别人脸。         人脸识别和人脸检测是计算机视觉领域的两个独立任务。         人脸检测

    2024年02月13日
    浏览(37)
  • 基于OpenCV的haar分类器实现人脸检测分析

    今天来分享两个基于OpenCV实现的识别人脸的不同应用。 1、Haar分类器介绍 🚀Haar分类器是一种基于 机器学习 的目标检测算法,它使用Haar特征描述图像中的目标。Haar特征是 基于图像亮度的局部差异 计算得出的,可以用来描述目标的边缘、角落和线条等特征。 使用Haar分类器

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

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

    2024年02月07日
    浏览(38)
  • OpenCV自带的HAAR级联分类器对脸部(人脸、猫脸等)的检测识别

    在计算机视觉领域,检测人脸等是一种很常见且非常重要的应用,我们可以先通过开放计算机视觉库OpenCV来熟悉这个人脸识别领域。另外OpenCV关于颜色的识别,可以查阅: OpenCV的HSV颜色空间在无人车中颜色识别的应用 HSV颜色识别的跟踪实践 https://blog.csdn.net/weixin_41896770/arti

    2024年02月16日
    浏览(30)
  • VC++中使用OpenCV进行人脸检测

    对于上面的图像,如何使用OpenCV进行人脸检测呢? 使用OpenCV进行人脸检测十分简单,OpenCV官网给了一个Python人脸检测的示例程序, objectDetection.py 代码如下: 所在目录为D:env_buildopencv4.9.0opencvsourcessamplespythontutorial_codeobjectDetectioncascade_classifierobjectDetection.py 人脸识别可以

    2024年02月21日
    浏览(32)
  • Python基于深度学习的人脸识别项目源码+演示视频,利用OpenCV进行人脸检测与识别 preview

    ​ 该人脸识别实例是一个基于深度学习和计算机视觉技术的应用,主要利用OpenCV和Python作为开发工具。系统采用了一系列算法和技术,其中包括以下几个关键步骤: 图像预处理 :首先,对输入图像进行预处理,包括读取图片、将图片灰度转换、修改图片的尺寸、绘制矩形

    2024年04月13日
    浏览(35)
  • Windows下使用QT+OpenCV完成人脸检测(获取摄像头的数据进行检测)

    Windows版本: Win10 X64 OpenCV版本: 2.4.13.6 QT版本: 5.12 OpenCV官网下载地址: ​ ​https://opencv.org​​​     目前官网OpenCV最新的版本是4.2.0 ,Windows版本的OpenCV在3.X版本后就不带X86的库,只有X64的库,如果需要X86的库,需要自己下载源码去重新编译。 由于我的QT软件在安装时没有安装

    2024年01月16日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包