Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python中使用opencv-python进行人脸检测

Python中使用opencv-python进行人脸检测

作者头像
ccf19881030
发布于 2024-05-24 04:38:57
发布于 2024-05-24 04:38:57
25200
代码可运行
举报
文章被收录于专栏:ccf19881030的博客ccf19881030的博客
运行总次数:0
代码可运行

Python中使用opencv-python进行人脸检测

之前写过一篇VC++中使用OpenCV进行人脸检测的博客。以数字图像处理中经常使用的lena图像为例,如下图所示:

使用OpenCV进行人脸检测十分简单,OpenCV官网给了一个Python人脸检测的示例程序,

Python人脸检测目录
Python人脸检测目录

objectDetection.py代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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='data/haarcascades/haarcascade_frontalface_alt.xml')
parser.add_argument('--eyes_cascade', help='Path to eyes cascade.', default='data/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

所在目录为D:\env_build\opencv4.9.0\opencv\sources\samples\python\tutorial_code\objectDetection\cascade_classifier\objectDetection.py

人脸识别的背景

人脸识别可以用在身份认证,门禁等场合中,可以通过训练大量的人脸数据获取人脸的特征。但是实际场景可以比较复杂,由于灯光、视角、视距、摄像头抖动以及数字噪声的变化,图像细节变得不稳定;还有戴了口罩、帽子之后对于人脸的检测就变得更麻烦了。Haar 特征是一种用于实现实时人脸跟踪的特征。每一个 Haar 特征都描述了相邻图像区域的对比模式。例如,边,顶点和细线都能生成具有判别性的特征。

haar级联数据获取

在 sources 的一个文件夹 data/haarcascades。该文件夹包含了所有 OpenCV 的人脸检测的 XML 文件,这些可用于检测静止图像、视频和摄像头所得到图像中的人脸。如下图所示:

haar级联数据
haar级联数据
  • 人脸检测器(默认):haarcascade_frontalface_default.xml
  • 人脸检测器(快速 Harr):haarcascade_frontalface_alt2.xml
  • 人脸检测器(侧视):haarcascade_profileface.xml
  • 眼部检测器(左眼):haarcascade_lefteye_2splits.xml
  • 眼部检测器(右眼):haarcascade_righteye_2splits.xml
  • 身体检测器:haarcascade_fullbody.xml
  • 上半身检测器:haarcascade_upperbody.xml 其中,本文中我们使用默认的人脸检测器xml配置文件haarcascade_frontalface_default.xml ,可以从https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/Resources/haarcascade_frontalface_default.xml处下载

资源图片地址

人脸资源图片地址为:https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/Resources/lena.png

Python中使用opencv-python库进行人脸检测示例代码

示例代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cv2

faceCascade = cv2.CascadeClassifier("Resources/haarcascade_frontalface_default.xml")
img = cv2.imread("Resources/lena.png")
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = faceCascade.detectMultiScale(imgGray, 1.1, 4)

for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

cv2.imshow("Result", img)
cv2.waitKey(0)

运行结果如下图所示:

程序运行结果
程序运行结果

使用OpenCV官方的python人脸检测示例代码进行实时人脸和眼睛检测

opencv4.9.0\opencv\sources\samples\python\tutorial_code\objectDetection\cascade_classifier\objectDetection.py修改后的示例代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)

face_cascade_name = "data/haarcascades/haarcascade_frontalface_alt.xml"
eyes_cascade_name = "data/haarcascades/haarcascade_eye_tree_eyeglasses.xml"

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 = 0
#-- 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

上述代码从摄像头实时采集数据,使用haar级联人脸正面和眼睛的训练测试结果xml配置文件,对采集到的每一帧图像进行人脸和眼睛的检测,并做椭圆标记,如下图所示:

实时人脸和眼睛检测
实时人脸和眼睛检测

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
VC++中使用OpenCV进行人脸检测
对于上面的图像,如何使用OpenCV进行人脸检测呢? 使用OpenCV进行人脸检测十分简单,OpenCV官网给了一个Python人脸检测的示例程序,
ccf19881030
2024/05/24
1840
VC++中使用OpenCV进行人脸检测
人脸识别初探之人脸检测(一)
人脸识别是个说小不小的工程,在完成这个项目之前,先把人脸检测熟悉一下。人脸检测用到的函数如下:
用户9831583
2022/06/16
10.1K0
人脸识别初探之人脸检测(一)
OpenCV学习入门(一):人脸检测
该文章介绍了如何使用OpenCV和CascadeClassifier类来检测人脸,并使用绿色方框标出眼睛和鼻子。该代码基于OpenCV 2.4.9,使用C++编写,并使用了CascadeClassifier类进行人脸检测。此外,还介绍了如何通过编写代码来读取视频流,并使用OpenCV库进行实时人脸检测和眼睛、鼻子的定位和标注。
用户1150922
2018/01/08
1.4K0
OpenCV学习入门(一):人脸检测
OpenCV 人脸检测级联分类器解读
1.基本概念 opencv中的人脸检测使用基于Harr的级联分类和基于LBP的级联分类。 Harr是在2001年,由Viola和Jones等人提出的,它的脸部检测的基本思想是:对于面部正面的大部分区域而言,会有眼睛所在的区域比前额和脸颊更暗,嘴巴应该比脸颊更暗等情况。和这样类似的比较大约有20个,通过这样的比较决定该区域是否为人脸。 LBP是在2006年由Ahonen等人提出的,相比于Harr,LBP有更快的速度。通过比较想读亮度直方图来确定是否为人脸。但是对于稳定性,LBP要弱于前者。 Opencv自带训练好的人脸检测模型,存储在sources/data/haarcascades文件夹和sources/data/lbpcascades文件夹下。其中几个.xml文件如下: 人脸检测器(默认):haarcascade_frontalface_default.xml 人脸检测器(快速Harr):haarcascade_frontalface_alt2.xml 人脸检测器(侧视):haarcascade_profileface.xml 眼部检测器(左眼):haarcascade_lefteye_2splits.xml 眼部检测器(右眼):haarcascade_righteye_2splits.xml 嘴部检测器:haarcascade_mcs_mouth.xml 鼻子检测器:haarcascade_mcs_nose.xml 身体检测器:haarcascade_fullbody.xml 人脸检测器(快速LBP):lbpcascade_frontalface.xml
chaibubble
2022/05/07
4450
OpenCV检测篇(二):笑脸检测
本文介绍了如何使用OpenCV和CascadeClassifier类进行人脸和笑脸检测。首先,作者通过使用OpenCV库和CascadeClassifier类加载了人脸和笑脸的检测器,并对视频流进行实时人脸和笑脸检测。然后,作者使用CascadeClassifier类加载了人脸检测器,并提取了人脸区域,在人脸区域上进行笑脸检测。最后,作者使用waitKey()函数等待按键,并返回键值。
刘潇龙
2017/04/07
3.3K0
人脸检测到识别OpenCV源码测试
samples/cpp/tutorial_code/objectDetection/objectDetection.cpp
用户9831583
2022/06/16
1.1K0
python+opencv 实现图像人脸检测及视频中的人脸检测
人脸检测的常见步骤如下,如果想要将人脸准确地检测出来,需要通过建立人脸模型,获取准确区分人脸的分类器,这里我们使用网上公开的扩展包或已经训练好的分类器。
叶庭云
2020/09/17
14.2K0
python+opencv  实现图像人脸检测及视频中的人脸检测
OpenCV人脸检测 人脸打码
.xml文件路径为本地绝对路径,应用代码时需要修改。 代码如下: #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #include <stdio.h> using namespace std; using namespace cv; void detectAndDisp
chaibubble
2022/05/07
2.3K0
OpenCV人脸检测 人脸打码
Python制作动态人脸识别:实时人脸检测动效
人脸识别技术在现代社会中应用广泛,从安防监控到手机解锁,都是其典型应用。在这篇博客中,我们将使用Python来实现一个简单的实时人脸检测动效。通过利用OpenCV库,我们能够轻松捕捉摄像头视频流并检测人脸。
屿小夏
2024/09/25
3460
关于OpenCV for Python入门-自带人脸检测算法比较
本来学习OpenCV的目的就是为了做人脸识别、车辆识别、人群计数等等,识别人脸首先要进行人脸检测,OpenCV中内置了Haar Cascade人脸分类器,其中包括haarcascade_frontalface_alt、haarcascade_frontalface_alt_tree、haarcascade_frontalface_alt2、haarcascade_frontalface_default这四种,本文不求甚解,只是从比对上判断一下这几种内置分类器的可用性。
python与大数据分析
2022/04/02
7060
关于OpenCV for Python入门-自带人脸检测算法比较
openCV人脸识别简单案例[通俗易懂]
我们使用机器学习的方法完成人脸检测,首先需要大量的正样本图像(面部图像)和负样本图像(不含面部的图像)来训练分类器。我们需要从其中提取特征。下图中的 Haar 特征会被使用,就像我们的卷积核,每一个特征是一 个值,这个值等于黑色矩形中的像素值之后减去白色矩形中的像素值之和。
全栈程序员站长
2022/09/01
8180
OpenCV 人脸检测(一)
OpenCV的Haar级联分类器可以通过对比分析相邻图像区域的特征来判断给定图像或子图像与已知对象是否匹配,从而给图像进行分类。提取图像的细节对产生稳定可靠的分类结果很有用。这些提取的结果被称为特征。特征的数量通常应该比像素数少得多。两个图像的相似程度可以通过它们的特征向量的距离来计算。
用户6021899
2019/09/25
1.9K0
OpenCV 人脸检测(一)
OpenCV:人脸检测。
前段时间断更了好久,一部分原因就是学习OpenCV去了。 OpenCV是一个开源、跨平台的计算机视觉库,可以用于各种图像和视频处理操作。 比如最近写的一篇文章里就发现了计算机视觉的内容。 但基于什么小
小F
2020/10/09
1.9K0
OpenCV:人脸检测。
python+opencv 实现图像人脸检测及视频中的人脸检测
原文链接:https://yetingyun.blog.csdn.net/article/details/108153075 创作不易,未经作者允许,禁止转载,更勿做其他用途,违者必究。
叶庭云
2022/01/10
1.5K0
python+opencv 实现图像人脸检测及视频中的人脸检测
人工智能视觉:基于OpenCV的人脸识别技术的深度解析
OpenCV 的全称是 Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV 是由英特尔公司发起并参与开发,以 BSD 许可证授权发行,可以在商业和研究领域中免费使用。OpenCV 可用于开发实时的图像处理、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的 IPP 进行加速处理。
爱喝兽奶的熊孩子
2024/05/24
3.2K0
人工智能视觉:基于OpenCV的人脸识别技术的深度解析
OpenCV进行人脸识别(Python)
https://gitee.com/mirrors/opencv/tree/4.x/data/haarcascades
码客说
2022/09/27
9670
OpenCV进行人脸识别(Python)
Python-OpenCV人脸检测(代码)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012162613/article/details/43523507
李智
2019/05/26
1.9K0
opencv-python 基本例子3个
其中的内容均参考自官网的说明: http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_tutorials.html
py3study
2020/01/09
1.1K0
opencv-python 基本例子3个
超有趣!手把手教你使用树莓派实现实时人脸检测
选自hackster 作者:MJRoBot 机器之心编译 本文介绍了如何在树莓派上,使用 OpenCV 和 Python 完成人脸检测项目。该项目不仅描述了识别人脸所需要的具体步骤,同时还提供了很多扩
机器之心
2018/05/10
2.4K0
keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四)
本文介绍了一种基于深度学习的人脸表情识别与分类方法,首先通过OpenCV和Tensortflow库进行人脸检测与表情图像预处理,然后使用Keras框架搭建了一个基于CNN的模型,利用迁移学习进行预训练,最后在COCO数据集上进行微调,实现了表情识别与分类的功能。
悟乙己
2018/01/02
4.3K0
keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四)
相关推荐
VC++中使用OpenCV进行人脸检测
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验