> 文档中心 > 利用opencv带你玩转人脸识别-中篇(人脸检测,检测多个,视频检测快速入门)

利用opencv带你玩转人脸识别-中篇(人脸检测,检测多个,视频检测快速入门)


🐚作者简介:苏凉(专注于网络爬虫,数据分析)
🐳博客主页:苏凉.py的博客
🌐系列专栏:python-opencv快速入门
👑名言警句:海阔凭鱼跃,天高任鸟飞。
📰要是觉得博主文章写的不错的话,还望大家三连支持一下呀!!!
👉关注✨点赞👍收藏📂

文章目录

  • 前言
    • 1.人脸检测
      • 级联分类器
      • 人脸检测函数
      • 多个人脸检测
      • 摄像头人脸检测(VideoCapture)
  • 结语

利用opencv带你玩转人脸识别-中篇(人脸检测,检测多个,视频检测快速入门)

前言

在上一篇文章中我们主要了解到用opencv如何对图像进行读取,以及对图像进行灰度转换和尺寸大小的调整,还有如何在图像上画矩形等操作。那么这篇文章主要给大家介绍如何用opencv进行人脸检测,以及数据训练,人脸识别等操作。话不多说,直接进入正题!!
⚜上期传送锚点:
利用opencv带你玩转人脸识别-上篇(读取图片,灰度转换,尺寸修改,绘制矩形快速入门)

利用opencv带你玩转人脸识别-中篇(人脸检测,检测多个,视频检测快速入门)

1.人脸检测

级联分类器

CascadeClassifier是opencv下objdetect模块中用来做目标检测的级联分类器的一个类。它可以帮助我们对物体进行检测。
级联分类器的原理可参考该篇文章,在这里不过多赘述:
⏭opencv中级联分类器的原理

路径

它在我们安装opencv的配置环境内,安装在哪个路径就去哪个路径找即可:
利用opencv带你玩转人脸识别-中篇(人脸检测,检测多个,视频检测快速入门)

人脸检测函数

  1. CascadeClassifier参数声明检测人脸的级联分类器的所在路径。如上图,人脸检测级联分类器为:
    利用opencv带你玩转人脸识别-中篇(人脸检测,检测多个,视频检测快速入门)
    在写入路径时,斜线需为 /,且需加上文件类型 .xml后缀。

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

import cv2 as cvimg = 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()

运行结果:
利用opencv带你玩转人脸识别-中篇(人脸检测,检测多个,视频检测快速入门)

多个人脸检测

其实与单个人脸检测一样,只不过需要调整detecMultiscale中的参数即可。
如果效果不佳,也可以选择换一个联级分类器

import cv2 as cvimg = 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()

运行结果:
利用opencv带你玩转人脸识别-中篇(人脸检测,检测多个,视频检测快速入门)

摄像头人脸检测(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()

利用opencv带你玩转人脸识别-中篇(人脸检测,检测多个,视频检测快速入门)

结语

到这里我们的人脸检测就结束啦,下期带大家进入人脸信息的录入和保存,以及数据训练,人脸识别等内容。
关注我,咱们下期再见!!
在这里插入图片描述