广告
返回顶部
首页 > 资讯 > 后端开发 > Python >opencv基于Haar人脸检测和眼睛检测
  • 854
分享到

opencv基于Haar人脸检测和眼睛检测

2024-04-02 19:04:59 854人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

本文为大家分享了OpenCV基于Haar人脸检测和眼睛检测的具体代码,供大家参考,具体内容如下 在这里,我们将进行人脸检测。最初,该算法需要大量正图像(面部图像)和负图像(无面部图像

本文为大家分享了OpenCV基于Haar人脸检测和眼睛检测的具体代码,供大家参考,具体内容如下

在这里,我们将进行人脸检测。最初,该算法需要大量正图像(面部图像)和负图像(无面部图像)来训练分类器。然后,我们需要从中提取特征。为此,使用下图所示的Haar功能。它们就像我们的卷积核。每个特征都是通过从黑色矩形下的像素总和中减去白色矩形下的像素总和而获得的单个值。

现在,每个内核的所有可能大小和位置都用于计算许多功能。(试想一下它需要多少计算?即使是一个24x24的窗口也会产生超过160000个特征)。对于每个特征计算,我们需要找到白色和黑色矩形下的像素总和。为了解决这个问题,他们引入了整体形象。无论您的图像有多大,它都会将给定像素的计算减少到仅涉及四个像素的操作。很好,不是吗?它使事情变得超快。

但是在我们计算的所有这些功能中,大多数都不相关。例如,考虑下图。第一行显示了两个良好的功能。选择的第一个特征似乎着眼于眼睛区域通常比鼻子和脸颊区域更暗的性质。选择的第二个功能依赖于眼睛比鼻梁更黑的属性。但是,将相同的窗口应用于脸颊或其他任何地方都是无关紧要的。那么,我们如何从16万多个功能中选择最佳功能?它是由Adaboost实现的。

为此,我们将所有功能应用于所有训练图像。对于每个功能,它会找到最佳的阈值,该阈值会将人脸分为正面和负面。显然,会出现错误或分类错误。我们选择错误率最低的特征,这意味着它们是对人脸和非人脸图像进行最准确分类的特征。(此过程并非如此简单。在开始时,每个图像的权重均相等。在每次分类后,错误分类的图像的权重都会增加。然后执行相同的过程。将计算新的错误率。还要计算新的权重。继续进行此过程,直到达到所需的精度或错误率或找到所需的功能数量为止。

最终分类器是这些弱分类器的加权和。之所以称为弱分类,是因为仅凭它不能对图像进行分类,而是与其他分类一起形成强分类器。该论文说,甚至200个功能都可以提供95%的准确度检测。他们的最终设置具有大约6000个功能。(想象一下,从160000多个功能减少到6000个功能。这是很大的收获)。

因此,现在您拍摄一张照片。取每个24x24窗口。向其应用6000个功能。检查是否有脸。哇…这不是效率低下又费时吗?是的。作者对此有一个很好的解决方案。

在图像中,大多数图像是非面部区域。因此,最好有一种简单的方法来检查窗口是否不是面部区域。如果不是,请一次性丢弃它,不要再次对其进行处理。相反,应将重点放在可能有脸的区域。这样,我们将花费更多时间检查可能的面部区域。

为此,他们引入了级联分类器的概念。不是将所有6000个功能部件应用到一个窗口中,而是将这些功能部件分组到不同阶段的分类器中,并一一应用。(通常前几个阶段将包含很少的功能)。如果窗口在第一阶段失败,则将其丢弃。我们不考虑它的其余功能。如果通过,则应用功能的第二阶段并继续该过程。经过所有阶段的窗口是一个面部区域。这个计划怎么样!

作者的检测器具有6000多个特征,具有38个阶段,在前五个阶段具有1、10、25、25和50个特征。(上图中的两个功能实际上是从Adaboost获得的最佳两个功能)。根据作者的说法,每个子窗口平均评估了6000多个特征中的10个特征。
首先,创建一个cv :: CascadeClassifier并使用cv :: CascadeClassifier :: load方法加载必要的XML文件。然后,使用cv :: CascadeClassifier :: detectMultiScale方法完成检测,该方法返回检测到的脸部或眼睛的边界矩形


from __future__ import print_function
import cv2 as cv
import argparse
def detectAndDisplay(frame):
    frame_gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)#灰度处理
    frame_gray = cv.equalizeHist(frame_gray)#直方图均衡化
    #-- Detect faces
    faces = face_cascade.detectMultiScale(frame_gray)
    for (x,y,w,h) in faces:
        center = (x + w//2, y + h//2)#获取方框中心位置
        frame = cv.ellipse(frame, center, (w//2, h//2), 0, 0, 360, (255, 0, 255), 4)#画椭圆
        faceROI = frame_gray[y:y+h,x:x+w]#获取感兴趣的区域,即人脸矩形
        #-- In each face, detect eyes
        eyes = eyes_cascade.detectMultiScale(faceROI)
        for (x2,y2,w2,h2) in eyes:
            eye_center = (x + x2 + w2//2, y + y2 + h2//2)#获取眼睛中心
            radius = int(round((w2 + h2)*0.25))#获取半径
            frame = cv.circle(frame, eye_center, radius, (255, 0, 0 ), 4)
    cv.imshow('Capture - Face detection', frame)
parser = argparse.ArgumentParser(description='Code for Cascade Classifier tutorial.')
parser.add_argument('--face_cascade', help='Path to face cascade.', default='haarcascades/haarcascade_frontalface_alt.xml')
parser.add_argument('--eyes_cascade', help='Path to eyes cascade.', default='haarcascades/haarcascade_eye_tree_eyeglasses.xml')
parser.add_argument('--camera', help='Camera divide number.', type=int, default=0)
args = parser.parse_args()
face_cascade_name = args.face_cascade
eyes_cascade_name = args.eyes_cascade
face_cascade = cv.CascadeClassifier()
eyes_cascade = cv.CascadeClassifier()
#-- 1. Load the cascades
if not face_cascade.load(cv.samples.findFile(face_cascade_name)):
    print('--(!)Error loading face cascade')
    exit(0)
if not eyes_cascade.load(cv.samples.findFile(eyes_cascade_name)):
    print('--(!)Error loading eyes cascade')
    exit(0)
camera_device = args.camera
#-- 2. Read the video stream
cap = cv.VideoCapture(camera_device)
if not cap.isOpened:
    print('--(!)Error opening video capture')
    exit(0)
while True:
    ret, frame = cap.read()
    if frame is None:
        print('--(!) No captured frame -- Break!')
        break
    detectAndDisplay(frame)
    if cv.waiTKEy(10) == 27:
        break

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: opencv基于Haar人脸检测和眼睛检测

本文链接: https://www.lsjlt.com/news/134685.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • opencv基于Haar人脸检测和眼睛检测
    本文为大家分享了opencv基于Haar人脸检测和眼睛检测的具体代码,供大家参考,具体内容如下 在这里,我们将进行人脸检测。最初,该算法需要大量正图像(面部图像)和负图像(无面部图像...
    99+
    2022-11-12
  • python基于Opencv实现人脸口罩检测
    一、开发环境 python 3.6.6 opencv-python 4.5.1 二、设计要求 1、使用opencv-python对人脸口罩进行检测 三、设计原理 设计流程图如图3-1...
    99+
    2022-11-12
  • 人脸检测——基于Flask和PaddleHub
    目录 前言 分析与设计 实现 1. 部署人脸检测模型 2. 使用Flask构建app2.1 目录结构2.2 forms.py2.3 utils.py2.4 app.py2.5 ind...
    99+
    2023-03-23
    基于Flask和PaddleHub 人脸检测
  • 基于python3+OpenCV实现人脸和眼睛识别
    基于python3+OpenCV的人脸和眼睛识别,供大家参考,具体内容如下 一、OpenCV人脸检测的xml文件下载 人脸检测和眼睛检测要用到haarcascade_eye.xml和...
    99+
    2022-11-12
  • 基于Python OpenCV和 dlib实现眨眼检测
    目录了解“眼睛纵横比”(EAR)使用面部标志和 OpenCV 检测眨眼眨眼检测结果总结今天,我们使用面部标记和 OpenCV 检测视频流中的眨眼次数。 为了构建我们的眨眼检测器,我们...
    99+
    2022-11-12
  • Android 利用OpenCV制作人脸检测APP
    目录前言第一步:下载并安装Android studio第二步:下载SDK tools第三步:新建一个Android APP项目第四步:下载Opencv第五步:导入OpenCV第六步:...
    99+
    2022-11-12
  • 如何实现基于opencv的行人检测
    这篇文章主要为大家展示了“如何实现基于opencv的行人检测”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现基于opencv的行人检测”这篇文章吧。基于方向梯度直方图(HOG)/线性支持向...
    99+
    2023-06-22
  • 基于Flask和PaddleHub怎么实现人脸检测功能
    这篇文章主要介绍“基于Flask和PaddleHub怎么实现人脸检测功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Flask和PaddleHub怎么实现人脸检测功能”文章能帮助大家解决问题。...
    99+
    2023-07-05
  • 如何在python中使用OpenCV检测人脸
    这期内容当中小编将会给大家带来有关如何在python中使用OpenCV检测人脸,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相...
    99+
    2023-06-14
  • 人脸检测实战终极之OpenCV+Python实现人脸对齐
    目录前言实现面部矫正器导入必要的包对齐人脸展示结果前言 这篇博文的目的是演示如何使用 OpenCV、Python 和面部标志对齐人脸。 给定一组面部标志(输入坐标),我们的目标是将图...
    99+
    2022-11-12
  • 基于Python实现人脸识别和焦点人物检测功能
    写在前面的话 基于dlib库的模型,实现人脸识别和焦点人物的检测。最后呈现的效果为焦点人物的识别框颜色与其他人物框不一样。 准备工作 需要安装好python环境,安装好dlib、o...
    99+
    2022-11-12
  • Android如何利用OpenCV制作人脸检测APP
    这篇文章将为大家详细讲解有关Android如何利用OpenCV制作人脸检测APP,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。无图无真相,先把APP运行的结果给大家看看。如上图所示,APP运行后,点击“选...
    99+
    2023-06-21
  • 基于Python的人脸检测与分类过程详解
    目录人脸识别算法简介人脸检测简述数据集介绍算法介绍测试网络结果预览人脸识别 算法简介 我们的算法可以分成两个部分,识别人脸位置和确定人脸分类。这两个部分可以看成:1.检测出人脸之间相...
    99+
    2022-11-11
  • 基于opencv的行人检测(支持图片视频)
    基于方向梯度直方图(HOG)/线性支持向量机(SVM)算法的行人检测方法中存在检测速度慢的问题,如下图所示,对一张400*490像素的图片进行检测要接近800毫秒,所以hog+svm...
    99+
    2022-11-12
  • Java基于虹软实现人脸识别、人脸比对、活性检测等
    目录虹软一、注册虹软开发者平台二、开始使用SDK虹软 免费,高级版本试用支持在线、离线有 Java SDK,C++ SDK 一、注册虹软开发者平台 点击注册 注册完成后可在&ldq...
    99+
    2022-11-13
  • Android 开发笔记 07-02 篇:OpenCV 人脸检测篇
    OpenCV 库导入可参考:https://blog.csdn.net/zhrjyl/article/details/104442030 Demo:链接:https://pan.baidu.com/s/1z0WsF0nI5GuXil...
    99+
    2022-06-06
    人脸检测 opencv Android
  • 基于Android studio3.6的JNI教程之ncnn之人脸检测mtcnn
      代码链接: https://github.com/watersink/mtcnn-linux-as 本代码可以在模拟器下进行跑。   环境: windows10 Andro...
    99+
    2022-06-06
    Android Studio studio jni Android
  • Android基于OpenCV实现Harris角点检测
    目录什么是角点? 为什么要检测角点? Harris角点检测 API操作效果 源码 什么是角点? 角点就是极值点,即在某方面属性特别突出的点。当然,你可以自己定义角点的属性(设置特定...
    99+
    2022-11-12
  • Android基于OpenCV实现QR二维码检测
    目录QR二维码QR二维码格式QR二维码结构APIQRCodeDetector类结构检测QR二维码识别QR二维码检测并识别QR二维码操作结果源码QR二维码 QR码(英语:Quick...
    99+
    2022-11-12
  • Android基于OpenCV实现霍夫直线检测
    目录霍夫直线检测点和线的对偶性极坐标参数方程API操作效果霍夫直线检测 点和线的对偶性 图像空间中的点,对应霍夫空间中的直线 图像空间中的直线,对应霍夫空间中的...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作