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实现的一个p2p文件传输实例
Jun 04 Python
python中pygame模块用法实例
Oct 09 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 Python
Python中表达式x += y和x = x+y 的区别详解
Jun 20 Python
python遍历序列enumerate函数浅析
Oct 17 Python
python并发2之使用asyncio处理并发
Dec 21 Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 Python
Django页面数据的缓存与使用的具体方法
Apr 23 Python
python实现移动木板小游戏
Oct 09 Python
python 下载文件的几种方法汇总
Jan 06 Python
python使用pymysql模块操作MySQL
Jun 16 Python
python中的random模块和相关函数详解
Apr 22 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
Wordpress php 分页代码
2009/10/21 PHP
解析argc argv在php中的应用
2013/06/24 PHP
百度ping方法使用示例 自动ping百度
2014/01/26 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
2007/04/12 Javascript
javascript 兼容所有浏览器的DOM扩展功能
2012/08/01 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
APP中javascript+css3实现下拉刷新效果
2016/01/27 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
2016/12/30 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
详解vue-cli3多环境打包配置
2019/03/28 Javascript
微信小程序使用车牌号输入法的示例代码
2019/08/20 Javascript
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
详解Python中的条件判断语句
2015/05/14 Python
Python计算字符宽度的方法
2016/06/14 Python
python实现自动发送邮件
2018/06/20 Python
python实现文本界面网络聊天室
2018/12/12 Python
python树莓派红外反射传感器
2019/01/21 Python
安装docker-compose的两种最简方法
2019/07/30 Python
简单了解python调用其他脚本方法实例
2020/03/26 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
超市实习总结自我鉴定
2013/09/19 职场文书
文化宣传方案
2014/03/13 职场文书
运动会广播稿100字
2014/09/14 职场文书
董事长年会致辞
2015/07/29 职场文书
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python
详解Go语言中Get/Post请求测试
2022/06/01 Golang