使用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 20 Python
python中单例常用的几种实现方法总结
Oct 13 Python
如何用Python做一个微信机器人自动拉群
Jul 03 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
Feb 20 Python
Django models文件模型变更错误解决
May 11 Python
python中format函数如何使用
Jun 22 Python
python如何操作mysql
Aug 17 Python
python pip如何手动安装二进制包
Sep 30 Python
python操作ini类型配置文件的实例教程
Oct 30 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 Python
python快速安装OpenCV的步骤记录
Feb 22 Python
使用Python开发贪吃蛇游戏 SnakeGame
Apr 30 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网页标题中文乱码的有效解决方法
2014/03/05 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
动态加载js的几种方法
2006/10/23 Javascript
javascript 异常处理使用总结
2009/06/21 Javascript
JavaScript类和继承 prototype属性
2010/09/03 Javascript
客户端js判断文件类型和文件大小即限制上传大小
2013/11/20 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
AngularJS实现的base64编码与解码功能示例
2018/05/17 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
Vue3.0的优化总结
2020/10/16 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
python实现高斯投影正反算方式
2020/01/17 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
销售人员中英文自荐信
2013/09/22 职场文书
运动会广播稿80字
2014/01/23 职场文书
挂科检讨书范文
2014/02/20 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
社区灵活就业证明
2014/11/03 职场文书
师德标兵事迹材料
2014/12/19 职场文书
邀请函的格式
2015/01/30 职场文书
如何写观后感
2015/06/19 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python
ipad隐藏软件app图标方法
2022/04/19 数码科技