利用opencv带你玩转人脸识别-中篇(人脸检测,检测多个,视频检测快速入门)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
🐚作者简介苏凉专注于网络爬虫数据分析
🐳博客主页苏凉.py的博客
🌐系列专栏python-opencv快速入门
👑名言警句海阔凭鱼跃天高任鸟飞。
📰要是觉得博主文章写的不错的话还望大家三连支持一下呀
👉关注✨点赞👍收藏📂
文章目录
每日推荐
给大家推荐一款神器。无论你是学生党还是上班族都可以使用这里涵盖了面试题库在线刷题各个大厂的面试/笔试真题等。如果你还是学生最重要的一点就是模拟面试功能智能AI1v1面试帮助你早日拿到大厂offer点击链接即可直达=>牛客网-找工作神器
前言
在上一篇文章中我们主要了解到用opencv如何对图像进行读取以及对图像进行灰度转换和尺寸大小的调整还有如何在图像上画矩形等操作。那么这篇文章主要给大家介绍如何用opencv进行人脸检测以及数据训练人脸识别等操作。话不多说直接进入正题
⚜上期传送锚点
利用opencv带你玩转人脸识别-上篇读取图片灰度转换尺寸修改绘制矩形快速入门
1.人脸检测
级联分类器
CascadeClassifier是opencv下objdetect模块中用来做目标检测的级联分类器的一个类。它可以帮助我们对物体进行检测。
级联分类器的原理可参考该篇文章在这里不过多赘述
⏭opencv中级联分类器的原理
路径
它在我们安装opencv的配置环境内安装在哪个路径就去哪个路径找即可
人脸检测函数
-
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()
运行结果
多个人脸检测
其实与单个人脸检测一样只不过需要调整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()
运行结果
摄像头人脸检测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()
结语
到这里我们的人脸检测就结束啦下期带大家进入人脸信息的录入和保存以及数据训练人脸识别等内容。
关注我咱们下期再见
更多题库和知识点总结面试技巧请看=>牛客网快来和我一起刷题吧