Python基于OpenCV库Adaboost实现人脸识别功能详解


Posted in Python onAugust 25, 2018

本文实例讲述了Python基于OpenCV库Adaboost实现人脸识别功能。分享给大家供大家参考,具体如下:

以前用Matlab写神经网络的面部眼镜识别算法,研究算法逻辑,采集大量训练数据,迭代,计算各感知器的系数。。。相当之麻烦~而现在运用调用pythonOpenCV库Adaboost算法,无需知道算法逻辑,无需进行模型训练,人脸识别变得相当之简单了。
需要用到的库是opencv(open source computer vision),下载安装方式如下:

使用pip install numpy语句安装numpy

(如果出现错误:Microsoft Visual C++ 9.0 is required <unable to find vcvarsall.bat>,使用管理员身份安装 Microsoft Visual C++ 9.0,重新启动计算机,再使用使用pip install numpy语句安装numpy

opencv2.4.10下载

下载之后解压(随便解压到哪里),将解压目录opencv文件夹中,build->python->2.7->x86下的文件cv2.pyd 复制到python2.7\Lib\site-packages

测试是否安装成功,执行解压目录下的sources\samples\python\drawing.py或者进入python环境,使用import cv2

首先讲讲需要用到的新函数:

CascadeClassifier()函数,导入分类器

cv2.CascadeClassifier('xxxxx.xml')
#haarcascade_frontalface_alt.xml脸部识别文件
#haarcascade_eye.xml眼部识别文件

函数的参数是xml完整路径(具体看你的opencv安装在哪里的,在opencv\sources\data\haarcascades下面),xml文件中是封装好的算法

detectMultiScale()函数,进行识别

detectMultiScale(image,scaleFactor,minNeighbors,flags,minSize,maxSize)
  • 最终返回值为识别出的矩阵框[x, y, w, h],(x,y)左上角起始坐标,w宽,h高
  • image:用于检测的图像
  • scaleFactor:前后两次相继的扫描中,搜索窗口的比例系数.例如1.1指将搜索窗口依次扩大10%。图片小的时候,比例系数尽量小能提高准确率
  • minNeighbors:构成检测目标的相邻矩形的最小个数。一般使用2or3,为0时返回所有的被检候选矩形框。

rectangle()函数,在图片上画矩阵

cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2)
  • image是原始图片
  • (x,y)是矩形左上角
  • (x+w,y+h)是矩形右下角
  • (0,255,0)是矩形的BGR颜色, 为红色
  • 2, 是绘制矩形的线宽

程序逻辑:

导入Haar级联分类器算法,读入要处理图片,将图片变成时候的大小,用detectMultiScale()函数先识别出人脸,在原图上框出,然后提取出识别出的人脸矩形框,在人脸矩形框内识别出眼睛,在原图上框出,展示出识别完的图像。

完整程序及注解:

import cv2
face_cascade = cv2.CascadeClassifier('D:\opencv\sources\data\haarcascades/haarcascade_frontalface_alt.xml')
eye_cascade = cv2.CascadeClassifier('D:\opencv\sources\data\haarcascades/haarcascade_eye.xml')
img1 = cv2.imread('face1.png')
img = cv2.resize(img1,(240,320),interpolation=cv2.INTER_LINEAR)
faces = face_cascade.detectMultiScale(img,1.2,2)
for (x,y,w,h) in faces:
  cv2.rectangle(img,(x,y),(x+w,x+h),(255,0,0),2)#用颜色为BGR(255,0,0)粗度为2的线条在img画出识别出的矩型
  face_re = img[y:y+h,x:x+w]#抽取出框出的脸部部分,注意顺序y在前
  eyes = eye_cascade.detectMultiScale(face_re)#在框出的脸部部分识别眼睛
  for (ex,ey,ew,eh) in eyes:
    cv2.rectangle(face_re,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
cv2.imshow('img',img)
key = cv2.waitKey(0)
if key==27:
  cv2.destoryWindow('img')

最后po个作者的照骗,展示一下最终的识别效果:

Python基于OpenCV库Adaboost实现人脸识别功能详解
1--识别前

Python基于OpenCV库Adaboost实现人脸识别功能详解
1——识别后

Python基于OpenCV库Adaboost实现人脸识别功能详解
2——识别前

Python基于OpenCV库Adaboost实现人脸识别功能详解
2——识别后

问题:

1.斜的脸识别率不高
2.大小不同的图片识别率不同,所有最好把图片处理成差不多大小的图片
3.眼部有遮挡物时,眼睛识别率底,比如:有眼睛,有头发

欢迎有能解决上面问题的朋友能够交流一下~

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python操作gmail实例
Jan 14 Python
Python定时执行之Timer用法示例
May 27 Python
Python3访问并下载网页内容的方法
Jul 28 Python
Python并发之多进程的方法实例代码
Aug 15 Python
python文件转为exe文件的方法及用法详解
Jul 08 Python
详解python实现交叉验证法与留出法
Jul 11 Python
简单了解django索引的相关知识
Jul 17 Python
Python图像处理之图片文字识别功能(OCR)
Jul 30 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
Python内置类型性能分析过程实例
Jan 29 Python
Python填充任意颜色,不同算法时间差异分析说明
May 16 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
Python使用matplotlib绘制三维图形示例
Aug 25 #Python
Python实现的括号匹配判断功能示例
Aug 25 #Python
Django中使用Celery的教程详解
Aug 24 #Python
python tornado微信开发入门代码
Aug 24 #Python
python使用rpc框架gRPC的方法
Aug 24 #Python
Python面向对象之静态属性、类方法与静态方法分析
Aug 24 #Python
python中文编码与json中文输出问题详解
Aug 24 #Python
You might like
PHP数据库开发知多少
2006/10/09 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
PHP 图像尺寸调整代码
2010/05/26 PHP
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
使用clipboard.js实现复制功能的示例代码
2017/10/16 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
axios拦截设置和错误处理方法
2018/03/05 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
Django实现图片文字同时提交的方法
2015/05/26 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
解决pandas read_csv 读取中文列标题文件报错的问题
2018/06/15 Python
深入浅析Python2.x和3.x版本的主要区别
2018/11/30 Python
详解python中递归函数
2019/04/16 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
python 基于wx实现音乐播放
2020/11/24 Python
Python用Jira库来操作Jira
2020/12/28 Python
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
Mankind西班牙男士护肤品网站:购买皮肤护理、护发和剃须
2017/04/27 全球购物
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
Python的两道面试题
2013/06/29 面试题
国家助学金获奖感言
2014/01/31 职场文书
酒店开业庆典主持词
2014/03/21 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
助学金感谢信
2015/01/20 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书