使用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使用multiprocessing模块实现带回调函数的异步调用方法
Apr 18 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
Python实现保证只能运行一个脚本实例
Jun 24 Python
python安装oracle扩展及数据库连接方法
Feb 21 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
Jul 30 Python
Python实现图片转字符画的示例代码
Aug 21 Python
基于Python闭包及其作用域详解
Aug 28 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
Apr 29 Python
Python求均值,方差,标准差的实例
Jun 29 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
Python OpenCV 图像平移的实现示例
Jun 04 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与javascript对多项选择的处理
2006/10/09 PHP
剖析 PHP 中的输出缓冲
2006/12/21 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
密码强度检测效果实现原理与代码
2013/01/04 Javascript
关于javaScript注册click事件传递参数的不成功问题
2014/07/18 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
2016/05/05 Javascript
微信小程序 wxapp导航 navigator详解
2016/10/31 Javascript
setTimeout学习小结
2017/02/08 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
微信小程序日历效果
2018/12/29 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python实现获取操作系统版本信息方法
2015/04/08 Python
Python 字典与字符串的互转实例
2017/01/13 Python
Python爬虫天气预报实例详解(小白入门)
2018/01/24 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
Python子类继承父类构造函数详解
2019/02/19 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
通过python检测字符串的字母
2020/02/18 Python
利用python在excel中画图的实现方法
2020/03/17 Python
Python之多进程与多线程的使用
2021/02/23 Python
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
电子专业推荐信范文
2013/11/18 职场文书
先进党支部事迹材料
2014/01/13 职场文书
李开复演讲稿
2014/05/24 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
合法的离婚协议书范本
2014/10/23 职场文书
教育教学工作反思
2016/02/24 职场文书
Python Pandas pandas.read_sql函数实例用法
2021/06/21 Python