首页 > 其他分享 >OpenCV 人脸检测

OpenCV 人脸检测

时间:2024-08-09 09:28:02浏览次数:24  
标签:检测 image face OpenCV 人脸 图像 cv

目录

一:相关依赖文件下载
二:实现步骤(图片检测)
  (一)读取图片
   (二)灰度转换
  (三)获取人脸识别训练数据
  (四)探测人脸,获取相关数据
   (五)根据相关数据在原图像上画出人脸位置
  (六)全部代码
三:实现视频检测人脸
  步骤相同,我们只需要将视频中每一帧图像进行处理,调用上面的图像人脸检测即可
相关知识补充:
(一)CascadeClassifier级联分类器
  基本原理
  detectMultiScale方法
一:相关依赖文件下载
https://github.com/opencv/opencv
在这里插入图片描述
在这里插入图片描述

二:实现步骤(图片检测)
(一)读取图片

image= cv.imread("./d.png")  #读取图片

(二)灰度转换

gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) #在灰度图像基础上实现的

(三)获取人脸识别训练数据

face_detector = cv.CascadeClassifier("./haarcascade_frontalface_alt_tree.xml")  #级联检测器获取文件

这个xml文件,就是opencv在GitHub上共享出来的具有普适的训练好的数据。我们可以直接的拿来使用

(四)探测人脸,获取相关数据

faces = face_detector.detectMultiScale(gray,1.1,2)

#第一个参数是灰度图像
#第二个参数是尺度变换,就是向上或者向下每次是原来的多少倍,这里是1.02倍
#第三个参数是人脸检测次数,设置越高,误检率越低,但是对于迷糊图片,我们设置越高,越不易检测出来,要适当降低
(五)根据相关数据在原图像上画出人脸位置

    for x,y,w,h in faces:
        cv.rectangle(image,(x,y),(x+w,y+h),(0,0,255),2)
    cv.imshow("face_detection",image)

在这里插入图片描述

(六)全部代码

import cv2 as cv
import numpy as np

def face_detect_demo(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) #在灰度图像基础上实现的
    face_detector = cv.CascadeClassifier("./haarcascade_frontalface_alt_tree.xml")  #级联检测器获取文件
    faces = face_detector.detectMultiScale(gray,1.1,2)    #在多个尺度空间上进行人脸检测
    #第一个参数是灰度图像
    #第二个参数是尺度变换,就是向上或者向下每次是原来的多少倍,这里是1.02倍
    #第三个参数是人脸检测次数,设置越高,误检率越低,但是对于迷糊图片,我们设置越高,越不易检测出来,要试单降低
    for x,y,w,h in faces:
        cv.rectangle(image,(x,y),(x+w,y+h),(0,0,255),2)
    cv.imshow("face_detection",image)



src = cv.imread("./d.png")  #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
cv.imshow("input image",src)    #通过名字将图像和窗口联系

face_detect_demo(src)

cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows()  #销毁所有窗口

三:实现视频检测人脸
步骤相同,我们只需要将视频中每一帧图像进行处理,调用上面的图像人脸检测即可

import cv2 as cv
import numpy as np

def face_detect_demo(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) #在灰度图像基础上实现的
    face_detector = cv.CascadeClassifier("./haarcascade_frontalface_default.xml")  #级联检测器获取文件
    faces = face_detector.detectMultiScale(gray,1.1,2)    #在多个尺度空间上进行人脸检测
    #第一个参数是灰度图像
    #第二个参数是尺度变换,就是向上或者向下每次是原来的多少倍,这里是1.02倍
    #第三个参数是人脸检测次数,设置越高,误检率越低,但是对于迷糊图片,我们设置越高,越不易检测出来,要试单降低
    for x,y,w,h in faces:
        cv.rectangle(image,(x,y),(x+w,y+h),(0,0,255),2)
    cv.imshow("face_detection",image)

def video_face_detect():
    capture = cv.VideoCapture(0)
    while True:
        ret,frame = capture.read()  #frame是每一帧图像,ret是返回值,为0是表示图像读取完毕
        frame = cv.flip(frame,1)
        if ret == False:
            break
        face_detect_demo(frame)
        c = cv.waitKey(10)
        if c == 27:
            break

video_face_detect()

cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows()  #销毁所有窗口

相关知识补充:
(一)CascadeClassifier级联分类器
是Opencv中做人脸检测的时候的一个级联分类器
有两种选择:一是使用老版本的CvHaarClassifierCascade函数,一是使用新版本的CascadeClassifier类。
老版本的分类器只支持类Haar特征,而新版本的分类器既可以使用Haar,也可以使用LBP特征。
基本原理
xml中存放的是训练后的特征池,特征size大小根据训练时的参数而定,检测的时候可以简单理解为就是将每个固定size特征(检测窗口)与输入图像的同样大小区域比较,如果匹配那么就记录这个矩形区域的位置,然后滑动窗口,检测图像的另一个区域,重复操作。
由于输入的图像中特征大小不定,比如在输入图像中眼睛是50x50的区域,而训练时的是25x25,那么只有当输入图像缩小到一半的时候,才能匹配上,所以这里还有一个逐步缩小图像,也就是制作图像金字塔的流程。
cascPath = “./haarcascade_frontalface_default.xml”
cv2.CascadeClassifier(cascPath)  #构造方法加载入xml特征文件
detectMultiScale方法
faces = faceCascade.detectMultiScale(gray,1.1,2,30)
def detectMultiScale(self, image, scaleFactor=None, minNeighbors=None, flags=None, minSize=None, maxSize=None): # real signature unknown; restored from doc

#第一个参数image:是灰度图像
#第二个参数scaleFactor:是尺度变换,就是向上或者向下每次是原来的多少倍,这里是1.02倍
#第三个参数minNeighbors:是人脸检测次数,设置越高,误检率越低,但是对于迷糊图片,我们设置越高,越不易检测出来,要适当降低
#第四个参数flags:
  CASCADE_DO_CANNY_PRUNING=1, 利用canny边缘检测来排除一些边缘很少或者很多的图像区域 
  CASCADE_SCALE_IMAGE=2, 正常比例检测 CASCADE_FIND_BIGGEST_OBJECT=4, 只检测最大的物体 
  CASCADE_DO_ROUGH_SEARCH=8 初略的检测
#最后两个参数用来限制得到的目标区域的范围

注意:

flags对于新的分类器没有用

设置minNeighbors:是在人脸附近进行指定次数的检测,获取最准确的范围,设置越高,误检率越低,但是对于迷糊图片,我们设置越高,越不易检测出来,要适当降低
在这里插入图片描述

标签:检测,image,face,OpenCV,人脸,图像,cv
From: https://blog.csdn.net/m0_37302966/article/details/141017312

相关文章

  • OpenCV 数字验证码识别
    目录一:依赖环境安装二:安装tesseract-ocr  (一)介绍  (二)下载地址  (三)下载traineddata训练数据三:代码实现一:依赖环境安装pipinstallPillowpip3installpytesseract二:安装tesseract-ocr(一)介绍其中pytesseract会直接调用tesseract模块,我们需要进行安装不......
  • 基于paddlehub 未戴口罩检测算法
    一、简介以前大夏天戴着口罩别人觉得你不正常,现在上街不戴口罩你不正常。本文要讲的未戴口罩算法是基于paddlehub提供的模型,paddlehub是百度飞浆(PaddlePaddle)下的深度学习模型开发工具。PaddleHub旨在为开发者提供丰富的、高质量的、直接可用的预训练模,先看实际效果图......
  • OpenCV 基本使用
    OpenCV基本使用参考教程:GitHub-gaoxiang12/slambook2:edition2oftheslambook1.安装OpenCV1.1下载OpenCV参考教程:无法定位软件包libjasper-dev的解决办法-CSDN博客视觉slam14讲ch5opencv安装ubuntu20.04_libvtk5-dev-CSDN博客OpenCV提供了大量的开源图像算......
  • 【漏洞复现】致远OA多个任意文件上传批量检测验证
    目录 wpsAssistServlet任意文件上传》》》漏洞描述《《《》》》影响范围《《《》》》环境搭建《《《》》》漏洞复现《《《ajax.do任意文件上传CNVD-2021-01627漏洞》》》漏洞描述《《《》》》影响范围《《《》》》漏洞复现《《《A6htmlofficeservlet任意文件上......
  • OpenCV专栏介绍
    在当今人工智能和计算机视觉领域,OpenCV作为一个功能强大的开源库,已经成为实现各种视觉算法的基石。本“OpenCV”专栏致力于帮助读者深入理解并掌握OpenCV的使用,从而在计算机视觉项目中发挥关键作用。专栏导读随着技术的不断进步,计算机视觉在自动驾驶、人脸识别、图像处理......
  • AppleScript实现FaceTime数据检测,FaceTime蓝号检测,无痕检测是否开通FaceTime功能
    FaceTime是苹果公司iOS和macOS(以前称MacOSX或OSX)内置的一款视频通话软件,通过Wi-Fi或者蜂窝数据接入互联网,在两个装有FaceTime的设备之间实现视频通话。其要求通话双方均具有装有FaceTime的苹果设备,苹果ID以及可接入互联网的3G/4G/5G或者Wi-Fi网络。 一、Windows电脑上部署苹......
  • 基于YOLOv10深度学习的交通信号灯检测识别系统【python源码+Pyqt5界面+数据集+训练代
    《博主简介》小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~......
  • 1392、STM32单片机温湿度检测阈值报警4个继电器加4个负载风扇等无线蓝牙远程(程序+原
    毕设帮助、开题指导、技术解答(有偿)见文未 目录方案选择单片机的选择显示器选择方案一、设计功能二、实物图三、原理图四、程序源码五、PCB图资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。方案选择单片机的选......
  • 实时人脸换脸——基于C++与Onnxruntime调用GPU实现实时换脸
    1、概述1.1算法概述人脸换脸是一种使用人工智能技术来实时或离线地将视频中的人脸替换成另一张人脸的技术。近年来,随着深度学习技术的发展,这一领域取得了显著进展。常见的人脸换脸项目有:Deepfake:这是最著名的换脸算法之一,使用深度学习技术合成人脸图像,通常使用卷积神......
  • 基于深度学习网络的人员行为视频检测系统matlab仿真,带GUI界面
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印):  2.算法涉及理论知识概要       基于GoogLeNet深度学习网络的人员行为视频检测系统是一个高度复杂的计算机视觉应用,它利用深度神经网络的强大功能来识别和分类视频中的人员行为。GoogLeNet,也称为......