python+opencv 实现图像人脸检测及视频中的人脸检测

您所在的位置:网站首页 写时间流逝很快的成语有哪些 python+opencv 实现图像人脸检测及视频中的人脸检测

python+opencv 实现图像人脸检测及视频中的人脸检测

2024-06-27 18:08:37| 来源: 网络整理| 查看: 265

执着于理想,纯粹于当下。

文章目录一、数据和知识准备1. 下载HAAR与LBP数据2. opencv相关知识二、python+opencv实现人脸检测1. 图像单人脸检测2. 图像多人脸检测3. 视频中人脸检测4. 摄像头人脸检测一、数据和知识准备1. 下载HAAR与LBP数据

人脸检测的常见步骤如下,如果想要将人脸准确地检测出来,需要通过建立人脸模型,获取准确区分人脸的分类器,这里我们使用网上公开的扩展包或已经训练好的分类器。

将haarcascades与lbpcascades里面的相关xml文件下载到本地,便于之后调用,辅助进行人脸检测。

下载地址:https://github.com/opencv/opencv/tree/master/data

2. opencv相关知识cv.CascadeClassifier():是OpenCV中人脸检测的一个级联分类器,既可以使用Haar特征,也可以使用LBP特征。以Haar特征分类器为基础的对象检测技术是一种非常有效的技术,它是基于机器学习且使用大量的正负样本训练得到分类器。detectMultiScale函数:检测人脸算法,其参数如下: image:要检测的输入图像 scaleFactor:表示每次图像尺寸减小的比例 minNeighbors:表示每一个目标至少要被检测到多少次才算是真的人脸,因为周围的像素和不同的窗口大小都可能检测成人脸 minSize:表示目标的最小尺寸 maxSize:表示目标的最小尺寸Haar-like矩形特征:是用于物体检测的数字图像特征。这类矩形特征模板由两个或多个全等的黑白矩形相邻组合而成,而矩形特征值是白色矩形的灰度值的和减去黑色矩形的灰度值的和,矩形特征对一些简单的图形结构,如线段、边缘比较敏感。如果把这样的矩形放在一个非人脸区域,那么计算出的特征值应该和人脸特征值不一样,所以这些矩形就是为了把人脸特征量化,以区分人脸和非人脸。LBP:是一种特征提取方式,能提取出图像的局部的纹理特征,最开始的LBP算子是在3X3窗口中,取中心像素的像素值为阀值,与其周围八个像素点的像素值比较,若像素点的像素值大于阀值,则此像素点被标记为1,否则标记为0。这样就能得到一个八位二进制的码,转换为十进制即LBP码,于是得到了这个窗口的LBP值,用这个值来反映这个窗口内的纹理信息。LBPH是在原始LBP上的一个改进,在opencv支持下可以直接调用函数直接创建一个LBPH人脸识别的模型。 比如:cv2.face.LBPHFaceRecognizer_create()。二、python+opencv实现人脸检测1. 图像单人脸检测代码语言:txt复制import cv2 as cv def face_detection(image): # 创建一个级联分类器 加载一个.xml分类器文件 它既可以是Haar特征也可以是LBP特征的分类器 face_detecter = cv.CascadeClassifier(r'./face_detection/haarcascades/haarcascade_frontalface_default.xml') # 多个尺度空间进行人脸检测 返回检测到的人脸区域坐标信息 faces = face_detecter.detectMultiScale(image=image, scaleFactor=1.1, minNeighbors=5) print('检测人脸信息如下:\n', faces) for x, y, w, h in faces: # 在原图像上绘制矩形标识 cv.rectangle(img=image, pt1=(x, y), pt2=(x+w, y+h), color=(0, 0, 255), thickness=2) cv.imshow('result', image) src = cv.imread(r'./test/036.jpg') cv.imshow('input image', src) face_detection(src) cv.waitKey(0) cv.destroyAllWindows()

运行效果如下:

代码语言:txt复制检测人脸信息如下: [[ 61 53 110 110]] Process finished with exit code 02. 图像多人脸检测代码语言:txt复制import cv2 as cv def face_detection(image): # 转成灰度图像 gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) # 创建一个级联分类器 加载一个.xml分类器文件 它既可以是Haar特征也可以是LBP特征的分类器 face_detecter = cv.CascadeClassifier(r'./face_detection/haarcascades/haarcascade_frontalface_default.xml') # 多个尺度空间进行人脸检测 返回检测到的人脸区域坐标信息 faces = face_detecter.detectMultiScale(image=gray, scaleFactor=1.1, minNeighbors=5) print('检测人脸信息如下:\n', faces) for x, y, w, h in faces: # 在原图像上绘制矩形标识 cv.rectangle(img=image, pt1=(x, y), pt2=(x+w, y+h), color=(0, 0, 255), thickness=2) cv.imshow('result', image) src = cv.imread(r'./test/044.jpg') cv.imshow('input image', src) face_detection(src) cv.waitKey(0) cv.destroyAllWindows()

运行效果如下:

代码语言:txt复制检测人脸信息如下: [[329 157 49 49] [ 88 156 44 44] [157 158 54 54] [240 159 50 50] [ 86 370 68 68] [ 79 254 54 54] [339 250 58 58] [155 254 59 59] [251 247 59 59] [199 371 80 80] [308 370 69 69]] Process finished with exit code 03. 视频中人脸检测代码语言:txt复制import cv2 # 加载视频 cap = cv2.VideoCapture('test.mp4') # 创建一个级联分类器 加载一个.xml分类器文件 它既可以是Haar特征也可以是LBP特征的分类器 face_detect = cv2.CascadeClassifier(r'./face_detection/haarcascades/haarcascade_frontalface_default.xml') while True: # 读取视频片段 ret, frame = cap.read() if not ret: # 读完视频后falg返回False break frame = cv2.resize(frame, None, fx=0.5, fy=0.5) # 灰度处理 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 多个尺度空间进行人脸检测 返回检测到的人脸区域坐标信息 face_zone = face_detect.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=8) # 绘制矩形和圆形检测人脸 for x, y, w, h in face_zone: cv2.rectangle(frame, pt1=(x, y), pt2=(x + w, y + h), color=[0, 0, 255], thickness=2) cv2.circle(frame, center=(x + w // 2, y + h // 2), radius=w // 2, color=[0, 255, 0], thickness=2) # 显示图片 cv2.imshow('video', frame) # 设置退出键和展示频率 if ord('q') == cv2.waitKey(40): break # 释放资源 cv2.destroyAllWindows() cap.release()

截取新版倚天屠龙记某一集36:35到36:39的片段,简单实现实时检测人脸并显示,运行效果如下:

任何算法都不会100%识别准确,由于噪声、误差、算法、训练集等影响,某些时候也会出现一些错误识别。自己进行简单测试时也会发现,人物动作、视频中镜头切换过快、背景变化等因素,可能会造成对视频中人脸检测不准确。

4. 摄像头人脸检测代码语言:txt复制import cv2 as cv # 识别电脑摄像头并打开 cap = cv.VideoCapture(0, cv.CAP_DSHOW) # 创建一个级联分类器 加载一个.xml分类器文件 它既可以是Haar特征也可以是LBP特征的分类器 face_detect = cv.CascadeClassifier(r'./face_detection/haarcascades/haarcascade_frontalface_default.xml') while True: # 读取视频片段 flag, frame = cap.read() frame = cv.flip(frame, 1) if not flag: # 读完视频后falg返回False break # 灰度处理 gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # 多个尺度空间进行人脸检测 返回检测到的人脸区域坐标信息 face_zone = face_detect.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5) # 绘制矩形和圆形检测人脸 for x, y, w, h in face_zone: cv.rectangle(frame, pt1=(x, y), pt2=(x + w, y + h), color=[0, 0, 255], thickness=2) cv.circle(frame, center=(x + w // 2, y + h // 2), radius=w // 2, color=[0, 255, 0], thickness=2) # 显示图片 cv.imshow('video', frame) # 设置退出键q 展示频率 if ord('q') == cv.waitKey(30): break # 释放资源 cv.destroyAllWindows() cap.release()

程序运行,即可调用电脑的摄像头识别面对摄像头的人脸,正脸和静止状态检测人脸的效果好。

作者:叶庭云 微信公众号:修炼Python CSDN:https://yetingyun.blog.csdn.net/ 本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。 觉得文章对你有帮助、让你有所收获的话,期待你的点赞呀,不足之处,也可以在评论区多多指正。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭