使用python-cv2实现Harr+Adaboost人脸识别的示例


Posted in Python onOctober 27, 2020

Haar特征

哈尔特征使用检测窗口中指定位置的相邻矩形,计算每一个矩形的像素和并取其差值。然后用这些差值来对图像的子区域进行分类。

haar特征模板有以下几种:

使用python-cv2实现Harr+Adaboost人脸识别的示例

以第一个haar特征模板为例

使用python-cv2实现Harr+Adaboost人脸识别的示例

计算方式

1.特征 = 白色 - 黑色(用白色区域的像素之和减去黑色区域的象征之和)

2.特征 = 整个区域 * 权重 + 黑色 * 权重

使用haar模板处理图像

从图像的起点开始,利用haar模板从左往右遍历,从上往下遍历,并设置步长,同时考虑图像大小和模板大小的信息

假如我们现在有一个 1080 * 720 大小的图像,10*10 的haar模板,并且步长为2,那么我我们所需要的的计算量为: (1080 / 2 * 720 / 2) * 100 * 模板数量 * 缩放 约等于50-100亿,计算量太大。

积分图

使用积分图可大量减少运算时间,实际上就是运用了前缀和的原理

使用python-cv2实现Harr+Adaboost人脸识别的示例

Adaboost分类器

Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。

算法流程

该算法其实是一个简单的弱分类算法提升过程,这个过程通过不断的训练,可以提高对数据的分类能力。整个过程如下所示:

1. 先通过对N个训练样本的学习得到第一个弱分类器;
2. 将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器 ;
3. 将1和2都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器;
4. 最终经过提升的强分类器。即某个数据被分为哪一类要由各分类器权值决定。

我们需要从官网下载俩个Adaboost分类器文件,分别是人脸和眼睛的分类器:
下载地址:https://github.com/opencv/opencv/tree/master/data/haarcascades

使用python-cv2实现Harr+Adaboost人脸识别的示例

使用python-cv2实现Harr+Adaboost人脸识别的示例

代码实现

实现人脸识别的基本步骤:

1.加载文件和图片
2.进行灰度处理
3.得到haar特征
4.检测人脸
5.进行标记

我们使用cv2.CascadeClassifier()来加载我们下载好的分类器。

然后我们使用detectMultiScale()方法来得到识别结果

import cv2
import numpy as np
import matplotlib.pyplot as plt
# 1.加载文件和图片 2.进行灰度处理 3.得到haar特征 4.检测人脸 5.标记

face_xml = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_xml = cv2.CascadeClassifier('haarcascade_eye.xml')
img = cv2.imread('img.png')
cv2.imshow('img', img)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 1.灰色图像 2.缩放系数 3.目标大小
faces = face_xml.detectMultiScale(gray, 1.3, 5)
print('face = ',len(faces))
print(faces)
#绘制人脸,为人脸画方框
for (x,y,w,h) in faces:
  cv2.rectangle(img, (x,y), (x + w, y + h), (255,0,0), 2)
  roi_face = gray[y:y+h,x:x+w]
  roi_color = img[y:y+h,x:x+w]
  eyes = eye_xml.detectMultiScale(roi_face)
  print('eyes = ',len(eyes))
  for (ex,ey,ew,eh) in eyes:
    cv2.rectangle(roi_color, (ex,ey),(ex + ew, ey + eh), (0,255,0), 2)
cv2.imshow('dat', img)
cv2.waitKey(0)
face = 1
[[133 82 94 94]]
eyes = 2

使用python-cv2实现Harr+Adaboost人脸识别的示例

使用python-cv2实现Harr+Adaboost人脸识别的示例

到此这篇关于使用python-cv2实现Harr+Adaboost人脸识别的示例的文章就介绍到这了,更多相关python cv2 人脸识别内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python字符串的encode与decode研究心得乱码问题解决方法
Mar 23 Python
python将人民币转换大写的脚本代码
Feb 10 Python
python socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
Python进度条实时显示处理进度的示例代码
Jan 30 Python
python 内置模块详解
Jan 01 Python
python mac下安装虚拟环境的图文教程
Apr 12 Python
pycharm访问mysql数据库的方法步骤
Jun 18 Python
Python中一个for循环循环多个变量的示例
Jul 16 Python
python3.6编写的单元测试示例
Aug 17 Python
python pyinstaller打包exe报错的解决方法
Nov 02 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
python三引号如何输入
Jul 06 Python
基于python实现坦克大战游戏
Oct 27 #Python
Django xadmin安装及使用详解
Oct 26 #Python
python实现网页录音效果
Oct 26 #Python
python实现录音功能(可随时停止录音)
Oct 26 #Python
Python用dilb提取照片上人脸的示例
Oct 26 #Python
python用tkinter实现一个gui的翻译工具
Oct 26 #Python
Docker如何部署Python项目的实现详解
Oct 26 #Python
You might like
PHP中PDO的错误处理
2011/09/04 PHP
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
PHP生成word文档的三种实现方式
2016/11/14 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
2019/07/03 PHP
js jquery数组介绍
2012/07/15 Javascript
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
JS中的数组转变成JSON格式字符串的方法
2017/05/09 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
详解Python中where()函数的用法
2018/03/27 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
2019/08/20 Python
简单了解Django项目应用创建过程
2020/07/06 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
CSS3 选择器 伪类选择器介绍
2012/01/21 HTML / CSS
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
Java面试题及答案
2012/09/08 面试题
自我评价格式
2014/01/06 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
会计专业应届生自荐信
2014/06/28 职场文书
法律进社区活动总结
2015/05/07 职场文书
Nginx域名转发使用场景代码实例
2021/03/31 Servers
JavaScript实现复选框全选功能
2021/04/11 Javascript
Python函数式编程中itertools模块详解
2021/09/15 Python