python基于opencv实现人脸识别


Posted in Python onJanuary 04, 2021

将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()

python基于opencv实现人脸识别

注意,此算法只能检测正脸,并且任何算法都有一定的准确率。如上图所示,图像中有一处被错误地检测为人脸。

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()

python基于opencv实现人脸识别

识别摄像头中的人脸

#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()

以上就是python基于opencv实现人脸识别的详细内容,更多关于python opencv 人脸识别的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python设置windows桌面壁纸的实现代码
Jan 28 Python
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
May 09 Python
Python读写/追加excel文件Demo分享
May 03 Python
python将秒数转化为时间格式的实例
Sep 16 Python
python生成lmdb格式的文件实例
Nov 08 Python
python导入模块交叉引用的方法
Jan 19 Python
基于python-opencv3的图像显示和保存操作
Jun 27 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
Pytorch 使用 nii数据做输入数据的操作
May 26 Python
python连接mysql数据库并读取数据的实现
Sep 25 Python
python中doctest库实例用法
Dec 31 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 Python
利用python绘制正态分布曲线
Jan 04 #Python
Python 打印自己设计的字体的实例讲解
Jan 04 #Python
Python关于拓扑排序知识点讲解
Jan 04 #Python
Python经典五人分鱼实例讲解
Jan 04 #Python
Python约瑟夫生者死者小游戏实例讲解
Jan 04 #Python
python邮件中附加文字、html、图片、附件实现方法
Jan 04 #Python
python自动化发送邮件实例讲解
Jan 04 #Python
You might like
B2K与车机的中波PK
2021/03/02 无线电
smarty+adodb+部分自定义类的php开发模式
2006/12/31 PHP
php图像处理类实例
2015/07/28 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
由prototype_1.3.1进入javascript殿堂-类的初探
2006/11/06 Javascript
JS提交并解析后台返回的XML的代码
2008/11/03 Javascript
类似CSDN图片切换效果脚本
2009/09/17 Javascript
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
点球小游戏python脚本
2018/05/22 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
便利店的创业计划书
2014/01/15 职场文书
超市创业计划书
2014/04/24 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
医学生求职自荐书
2014/06/12 职场文书
党政领导班子民主生活会整改措施
2014/09/18 职场文书
2015年实习生工作总结报告
2015/04/28 职场文书
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫