使用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实现定制交互式命令行的方法
Jul 03 Python
django实现用户登陆功能详解
Dec 11 Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 Python
Python 使用PIL numpy 实现拼接图片的示例
May 08 Python
python中的json总结
Oct 11 Python
python树莓派红外反射传感器
Jan 21 Python
python监控进程状态,记录重启时间及进程号的实例
Jul 15 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
Sep 02 Python
Python如何基于smtplib发不同格式的邮件
Dec 30 Python
详解用Python调用百度地图正/逆地理编码API
Jul 02 Python
Python3读写ini配置文件的示例
Nov 06 Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 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
一个好用的分页函数
2006/11/16 PHP
PHP操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
如何用PHP做到页面注册审核
2017/03/02 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
javascript常见操作汇总
2014/09/03 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
详解如何较好的使用js
2016/12/16 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
浅谈PDF.js使用心得
2018/06/07 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
python opencv实现图像边缘检测
2019/04/29 Python
python进阶之自定义可迭代的类
2019/08/20 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
python读取ini配置的类封装代码实例
2020/01/08 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
手术室护士长竞聘书
2014/03/31 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis