python基于opencv实现人脸识别
作者:我坚信阳光灿烂 发布时间:2021-10-15 12:49:16
将opencv中haarcascade_frontalface_default.xml文件下载到本地,我们调用它辅助进行人脸识别。
识别图像中的人脸
#coding:utf-8
import cv2 as cv
# 读取原始图像
img = cv.imread('face.png')
# 调用熟悉的人脸分类器 识别特征类型
# 人脸 - haarcascade_frontalface_default.xml
# 人眼 - haarcascade_eye.xml
# 微笑 - haarcascade_smile.xml
face_detect = cv.CascadeClassifier('haarcascade_frontalface_default.xml')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 检查人脸 按照1.1倍放到 周围最小像素为5
face_zone = face_detect.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
print ('识别人脸的信息:',face_zone)
# 绘制矩形和圆形检测人脸
for x, y, w, h in face_zone:
# 绘制矩形人脸区域 thickness表示线的粗细
cv.rectangle(img, pt1=(x, y), pt2=(x+w, y+h),color=[0,0,255], thickness=2)
# 绘制圆形人脸区域 radius表示半径
cv.circle(img, center=(x+w//2, y+h//2), radius=w//2, color=[0,255,0], thickness=2)
# 设置图片可以手动调节大小
cv.namedWindow("Easmount-CSDN", 0)
# 显示图片
cv.imshow("Easmount-CSDN", img)
# 等待显示 设置任意键退出程序
cv.waitKey(0)
cv.destroyAllWindows()
注意,此算法只能检测正脸,并且任何算法都有一定的准确率。如上图所示,图像中有一处被错误地检测为人脸。
CascadeClassifier:
是OpenCV中人脸检测的一个级联分类器,既可以使用Haar,也可以使用LBP特征。以Haar特征分类器为基础的对象检测技术是一种非常有效的技术。它是基于机器学习且使用大量的正负样本训练得到分类器。
Haar-like矩形特征:
是用于物体检测的数字图像特征。这类矩形特征模板由两个或多个全等的黑白矩形相邻组合而成,而矩形特征值是白色矩形的灰度值的和减去黑色矩形的灰度值的和,矩形特征对一些简单的图形结构,如线段、边缘比较敏感。如果把这样的矩形放在一个非人脸区域,那么计算出的特征值应该和人脸特征值不一样,所以这些矩形就是为了把人脸特征量化,以区分人脸和非人脸。
LBP:
是一种特征提取方式,能提取出图像的局部的纹理特征,最开始的LBP算子是在3X3窗口中,取中心像素的像素值为阀值,与其周围八个像素点的像素值比较,若像素点的像素值大于阀值,则此像素点被标记为1,否则标记为0。这样就能得到一个八位二进制的码,转换为十进制即LBP码,于是得到了这个窗口的LBP值,用这个值来反映这个窗口内的纹理信息。LBPH是在原始LBP上的一个改进,在opencv支持下我们可以直接调用函数直接创建一个LBPH人脸识别的模型。比如:cv.face.LBPHFaceRecognizer_create()。
detectMultiScale:
检测人脸算法,其参数:
– image表示要检测的输入图像
– objects表示检测到的人脸目标序列
– scaleFactor表示每次图像尺寸减小的比例
– minNeighbors表示每一个目标至少要被检测到3次才算是真的目标,因为周围的像素和不同的窗口大小都可以检测到人脸
– minSize表示目标的最小尺寸
– maxSize表示目标的最大尺寸
识别视频中的人脸
将视频中每一帧图像取出,进行图像人脸识别,标记识别到的人脸,显示每一帧图像。
#coding:utf-8
import cv2 as cv
import numpy as np
# 加载视频
cap = cv.VideoCapture('wang.mp4')
# 调用熟悉的人脸分类器 识别特征类型
# 人脸 - haarcascade_frontalface_default.xml
# 人眼 - haarcascade_eye.xm
# 微笑 - haarcascade_smile.xml
face_detect = cv.CascadeClassifier('haarcascade_frontalface_default.xml')
while True:
# 读取视频片段
flag, frame = cap.read()
if flag == False:
break
# 灰度处理
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
# 检查人脸 按照1.1倍放到 周围最小像素为5
face_zone = face_detect.detectMultiScale(gray, scaleFactor = 1.5, minNeighbors = 8)
# 绘制矩形和圆形检测人脸
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)
# 设置退出键和展示频率
if ord('q') == cv.waitKey(25):
break
# 释放资源
cv.destroyAllWindows()
cap.release()
识别摄像头中的人脸
#coding:utf-8
import cv2 as cv
# 识别电脑摄像头并打开
cap = cv.VideoCapture(0)
# 调用熟悉的人脸分类器 识别特征类型
# 人脸 - haarcascade_frontalface_default.xml
# 人眼 - haarcascade_eye.xm
# 微笑 - haarcascade_smile.xml
face_detect = cv.CascadeClassifier('haarcascade_frontalface_default.xml')
while True:
# 读取视频片段
flag, frame = cap.read()
if flag == False:
break
# 灰度处理
gray = cv.cvtColor(frame, code=cv.COLOR_BGR2GRAY)
# 检查人脸 按照1.1倍放到 周围最小像素为5
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)
# 设置退出键和展示频率
if ord('q') == cv.waitKey(40):
break
# 释放资源
cv.destroyAllWindows()
cap.release()
来源:https://www.cnblogs.com/wojianxin/p/12780466.html
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 异步 innerHTMLinnerHTML 插入节点的性能的问题,通常是我们最关注的。在回答这问题时,James Padolsey 给出了他
- 每个产品诞生的背后都凝结着一位或是多位设计师的心血,在产品的诞生过程中文化、科技、环保、创意等这些方方面面的细节集结成一个绚丽的故事,因为有
- 见下:<% FOR i = 1 TO 1000 n =
- 引用Nmap库实现扫描功能,本节课比较简单一看就会。编写环境:Python2.x编写:首先安装Nmap程序,并添加环境变量pip insta
- MySQL目前不支持列的Default 为函数的形式,如达到你某列的默认值为当前更新日期与时间的功能,你可以使用TIMESTAMP列类型下面
- MySQL默认编码是latin1,因业务需要把它转到UTF8。1、导出数据导出表结构 mysqldump -d dataname >
- 即将上线的百度C2C平台百度“有啊”开始对百度HI用户进行邀请,其首页页面、“有啊”LOGO也首次曝光。从曝光的图片看,百度“有啊”的主色调
- 今天也碰到了el表达式无法解析的事情,于是在网上查询了下,大多说是因为web.xml中声明的版本问题于是收集了如下版本:web-app_2_
- 如何在Access数据库中立即得到所插入记录的自动编号?首先,我们要保证获得记录集的方式支持bookmark属性,如在1、3插入一条有自动编
- Limit语法:SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offsetL
- Laravel 的上一个 LTS(长期支持)版本是 Laravel 5.1,发布于 2015 年 6 月,按照对 LTS 版本的约定,两年的
- PDOStatement::getColumnMetaPDOStatement::getColumnMeta — 返回结果集中一列的元数据(
- 假如一个页面中的文本采用的都是同样的字体、同样的字号、同样的颜色,做为读者的你能轻易的区分出哪里是标题,哪里是正文内容吗?所以通常情况下,设
- 什么是设计模式设计模式是针对软件开发中出现的常见问题的可重用解决方案。它们并不特定于任何编程语言或框架,而是描述了可应用于各种情况的一般原则
- 经常在工作中会使用到XPath的相关知识,但每次总会在一些关键的地方不记得或不太清楚,所以免不了每次总要查一些零碎的知识,感觉即很烦又浪费时
- 首先你要确定错误的原因: 让IE显示详细的出错信息: 菜单--工具--Internet选项--高级--显示友好的HTTP错误信息,去掉这个选
- 自动上次ymPrompt组件发布,自己就曾发现在IE8下遮罩的半透明滤镜有时无效的问题,后来也有网友提出过这个问题,但自己一直也没有太多关注
- 本文实例讲述了Codeigniter控制器controller继承问题。分享给大家供大家参考,具体如下:在项目中经常用到这样一种情况,后台中
- 当数据库服务器变得十分繁忙导致性能下降时,你会怎么办?购买更多的硬件升级你的服务器,还是重新考虑数据库服务器设计使得数据库平台具备良好的可升
- 一、介绍说明mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似Fiddler、Charles的功能,只不过它是一个控制台的形