zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

【中】带你玩转人脸识别--人脸检测,多个检测,视频检测

人脸 -- 视频 检测 多个 玩转 人脸识别
2023-09-27 14:25:47 时间

作者丨苏凉
编辑丨3D视觉开发者社区

前 言

在上一篇文章中我们主要了解到用OpenCV如何对图像进行读取,对图像进行灰度转换和尺寸大小的调整,还有如何在图像上画矩形等操作。

那么这篇文章主要给大家介绍如何用OpenCV进行人脸检测以及数据训练、人脸识别等操作。话不多说,直接进入正题!!
在这里插入图片描述

1.级联分类器

CascadeClassifier是OpenCV下objdetect模块中用来做目标检测的级联分类器的一个类。它可以帮助我们对物体进行检测。

级联分类器的原理可参考该篇文章,在此不作过多赘述:

https://www.cnblogs.com/wumh7/p/9403873.html

2.路径

它在我们安装OpenCV的配置环境内,安装在哪个路径就去哪个路径找即可:

在这里插入图片描述

3.人脸检测函数

CascadeClassifier参数:声明检测人脸的级联分类器的所在路径。如下图,人脸检测级联分类器为:

在这里插入图片描述

在写入路径时,斜线需为 /,且需加上文件类型 .xml后缀。

detecMultiScale参数:为每次对人脸检测的缩放倍数、检测次数以及人脸检测的范围,详见代码展示:

import cv2 as cv

img = cv.imread('./facefile/gray_face1.jpg')
# 指定图像大小
img_resize = cv.resize(img,dsize=(400,500))

# 定义检测函数
def test():
  #定义级联分类器的路径
    face_test =cv.CascadeClassifier('D:/test001/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
    #对图像进行检测,1.01为检测的倍数,5为检测次数,0为默认参数,后面两个为最小检测范围和最大检测范围为100*100和300*300像素
    face = face_test.detectMultiScale(img_resize,1.01,5,0,(100,100),(300,300))
    for x,y,w,h in face:
        cv.rectangle(img_resize,(x,y),(x+w,y+h),color = (0,0,255),thickness=1)
    cv.imshow('LYF',img_resize)

test()
# 空格退出
while True:
    if ord(' ') == cv.waitKey(0):
        break
# 释放内存
cv.destroyAllWindows()

运行结果:

在这里插入图片描述

4.多个人脸检测

其实与单个人脸检测一样,只不过需要调整detecMultiscale中的参数即可。

如果效果不佳,也可以选择换一个联级分类器。

import cv2 as cv

img = cv.imread('./facefile/chinamembers.jpg')
# 指定图像大小
img_resize = cv.resize(img,dsize=(700,600))

# 定义检测函数
def test():
    face_test =cv.CascadeClassifier('D:/test001/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
    face = face_test.detectMultiScale(img_resize,1.05,5,0,(50,50),(100,100))
    for x,y,w,h in face:
        cv.rectangle(img_resize,(x,y),(x+w,y+h),color = (0,0,255),thickness=1)
    cv.imshow('chinaMembers',img_resize)

test()
# 空格退出
while True:
    if ord(' ') == cv.waitKey(0):
        break
# 释放内存
cv.destroyAllWindows()

运行结果:

在这里插入图片描述

5.摄像头人脸检测(VideoCapture)

VideoCapture:调用摄像头,0为默认摄像头,也可以加入视频文件进行识别。


import cv2 as cv

# 定义检测函数
def test(img):
    gray_img = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    face_test =cv.CascadeClassifier('D:/test001/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
    face = face_test.detectMultiScale(gray_img)
    for x,y,w,h in face:
        cv.rectangle(img,(x,y),(x+w,y+h),color = (0,0,255),thickness=1)
    cv.imshow('chinaMembers',img)

# 调用摄像头
cap = cv.VideoCapture(0) #0为默认摄像头,如有外接则调整参数即可


# 空格退出
while True:
    flag,frame = cap.read()
    if not flag: #无值则退出
        break
    test(frame) #有值则调用函数
    if ord(' ') == cv.waitKey(0):
        break

# 释放摄像头
cap.release()
# 释放内存
cv.destroyAllWindows()

在这里插入图片描述

结 语

到这里,我们的人脸检测部分就结束啦!

下篇带大家进入人脸信息的录入和保存、数据训练以及人脸识别等内容。

在这里插入图片描述

版权声明:本文为作者授权转载,由3D视觉开发者社区编辑整理发布,仅做学术分享,未经授权请勿二次传播,版权归原作者所有。

3D视觉开发者社区是为所有开发者打造的3D视觉分享与交流平台,旨在将3D视觉技术开放给开发者。平台为开发者提供了3D视觉领域免费课程、独家资源与专业技术支持。

点击加入3D视觉开发者社区,和开发者们一起讨论分享吧~