使用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控制台中实现进度条功能
Nov 10 Python
python图像常规操作
Nov 11 Python
tensorflow训练中出现nan问题的解决
Feb 10 Python
Python3导入自定义模块的三种方法详解
Apr 13 Python
python 实现倒排索引的方法
Dec 25 Python
Python3 pandas 操作列表实例详解
Sep 23 Python
pytorch实现focal loss的两种方式小结
Jan 02 Python
在Mac中PyCharm配置python Anaconda环境过程图解
Mar 11 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
Apr 08 Python
Python SQLAlchemy库的使用方法
Oct 13 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
Jun 01 Python
python开发人人对战的五子棋小游戏
May 02 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 会话(session 时间设定)使用入门代码
2008/06/05 PHP
php中static静态变量的使用方法详解
2010/06/04 PHP
php下正则来匹配dede模板标签的代码
2010/08/21 PHP
php木马webshell扫描器代码
2012/01/25 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
2014/12/15 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
javascript显式类型转换实例分析
2015/04/25 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
使用js获取伪元素的content实例
2017/10/24 Javascript
vuex 的简单使用
2018/03/22 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
python获取本地计算机名字的方法
2015/04/29 Python
python 读写、创建 文件的方法(必看)
2016/09/12 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
通过代码实例了解Python异常本质
2020/09/16 Python
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
抽象类和接口的区别
2012/09/19 面试题
反四风对照检查材料思想汇报
2014/09/16 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
python周期任务调度工具Schedule使用详解
2021/11/23 Python