建筑兔零基础自学python记录16|实战人脸识别项目——人脸检测05

本次我们要下图中的实现人脸检测~

 惯例来看一下源代码:

import cv2 as cv


def face_detect_demo():
    gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    face_detect = cv.CascadeClassifier('M:/python/pythoninstall/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
    face = face_detect.detectMultiScale(gray)
    for x,y,w,h in face:
        cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)
    cv.imshow('result',img)

img = cv.imread('photo1.jpg')

face_detect_demo()

while True:
    if ord('q') == cv.waitKey(0):
        break

cv.destroyAllWindows()

    (1)调用任务器路径

在我们解读代码之前,本次需要先加载一个opencv里的分类器。我的是直接已经预装了搜名字找到的。分类器搜“haarcascade_frontalface_alt2.xml

 具体的路径如图:

 

1.复制出来如下:M:\python\pythoninstall\Lib\site-packages\cv2\data

2.在此路径基础上,我们把文件名复制到路径后面。即:

M:\python\pythoninstall\Lib\site-packages\cv2\data\haarcascade_frontalface_alt2.xml

3.还要进一步操作把文件名中所有“\”改为“/”,改后为:

M:/python/pythoninstall/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml

这里文件路径一定要对,如果报错了。先来检查路径名!!!

然后就可以开始本次的学习了~本次主要学习的有:

    (2)定义和调用函数

#定义了一个名为 face_detect_demo (人脸检测)的函数
def face_detect_demo():

#调用之前定义的函数
face_detect_demo()

 第一段代码:def 是 Python 里用于定义函数的关键字。face_detect_demo 是函数的名称,可以自定义。

 第二段代码:调用之前定义的 face_detect_demo 函数,开始执行人脸检测操作。

(3)灰显图片

 gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

这个代码之前我们学过:建筑兔零基础自学python记录13|实战人脸识别项目——灰度转换02-CSDN博客

    灰度图像在人脸检测中更常用,因为 Haar 级联分类器通常在灰度图像上进行操作,这样可以减少计算量。

(4)cv.CascadeClassifier()人脸识别分类器

face_detect = cv.CascadeClassifier('M:/python/pythoninstall/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')

     cv.CascadeClassifier 是 OpenCV 库中的一个类,专门用于处理基于 Haar 级联分类器或 LBP级联分类器的对象检测任务。Haar 级联分类器是一种基于机器学习的目标检测方法,通过训练大量的正负样本,学习到目标对象(如人脸)的特征,从而实现对目标对象的检测。

(5)detectMultiScale()图像中检测对象

#输入的灰度图像中检测人脸
face = face_detect.detectMultiScale(gray)
  • detectMultiScale()主要用于在图像中检测对象(如人脸、眼睛等)。在输入图像中检测多个不同大小的对象,返回一个包含检测到的对象的矩形框信息的列表。每个矩形框由左上角坐标 (x, y) 以及宽度 w 和高度 h 表示,通常用于人脸、眼睛等物体的检测。

    我们可以鼠标悬停相关命令,会展开命令中相关参数提示~

 detectMultiScale()的参数主要包括:

detectMultiScale(image, scaleFactor=1.1, minNeighbors=3, flags=0, minSize=(0, 0), maxSize=(0, 0))
  • image
    • 必需参数,输入的待检测图像,通常是灰度图像。
  • scaleFactor
    • 可选参数,默认值为 1.1。该参数表示在每个图像尺度上图像缩小的比例。例如,scaleFactor = 1.1 表示每次将图像缩小 10% 进行检测较大的值会加快检测速度,但可能会遗漏一些对象;较小的值会增加检测时间,但可能会提高检测的准确性。
  • minNeighbors
    • 可选参数,默认值为 3。该参数表示每个候选矩形框应该保留的最小邻居数。这个参数用于控制误检测的情况,值越大,检测到的对象越可能是真实的对象,但可能会遗漏一些真实的对象;值越小,可能会检测到更多的对象,但误检测的可能性也会增加。
  • flags:可选参数,在较新的 OpenCV 版本中,这个参数的作用不大,通常保持默认值 0 即可。

  • minSize
    • 可选参数,默认值为 (0, 0)。该参数指定检测对象的最小尺寸,如果检测到的对象小于这个尺寸,则会被忽略。
  • maxSize
    • 可选参数,默认值为 (0, 0)。该参数指定检测对象的最大尺寸,如果检测到的对象大于这个尺寸,则会被忽略。

让我们尝试运用解读一下:

face = face_detect.detectMultiScale(gray,1.01, 5, 0, (100, 100), (300, 300))

    检测gray这个图,scaleFactor图像缩小比例=1.01,minNeighbors误检测值=5,flags=0,检测对象的最小尺寸(100,100),检测对象的最大尺寸(300,300)

(6)循环检测

for x,y,w,h in face:
    cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)

综上我们对整个代码进行解读:

import cv2 as cv

#定义人脸识别函数
def face_detect_demo():
    #变为灰色图
    gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    #调用人脸识别分类器
    face_detect = cv.CascadeClassifier('M:/python/pythoninstall/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
    #输入的灰度图像中检测人脸
    face = face_detect.detectMultiScale(gray)
    #用左上角(x,y)右下角(x+w,y+h)的红色矩形框(线宽2)在图片中寻找人脸
    for x,y,w,h in face:
        cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)
    cv.imshow('result',img)

img = cv.imread('photo1.jpg')

#调用人脸识别函数
face_detect_demo()

while True:
    if ord('q') == cv.waitKey(0):
        break

cv.destroyAllWindows()

大家一起来尝试一下吧~

 (7)总结

def定义函数

cv.CascadeClassifier()人脸识别分类器

图像中检测对象detectMultiScale(image, scaleFactor=1.1, minNeighbors=3, flags=0, minSize=(0, 0), maxSize=(0, 0))

补充:部分分类器的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值