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实现2048小游戏
Jan 19 Python
python实现用户答题功能
Jan 17 Python
Python程序员面试题 你必须提前准备!(答案及解析)
Jan 23 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
python excel使用xlutils类库实现追加写功能的方法
May 02 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
详解django自定义中间件处理
Nov 21 Python
python 执行文件时额外参数获取的实例
Dec 18 Python
PyQt 图解Qt Designer工具的使用方法
Aug 06 Python
Django上线部署之IIS的配置方法
Aug 22 Python
python实现简单坦克大战
Mar 27 Python
python实现PolynomialFeatures多项式的方法
Jan 06 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中3种方法删除字符串中间的空格
2014/03/10 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
PHP实现上传多图即时显示与即时删除的方法
2017/05/09 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
jQuery Selector选择器小结
2010/05/06 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
JS变量及其作用域
2017/03/29 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
jQuery实现碰到边缘反弹的动画效果
2018/02/24 jQuery
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
跟老齐学Python之for循环语句
2014/10/02 Python
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
Python实现微信翻译机器人的方法
2019/08/13 Python
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
采用怎样的方法保证数据的完整性
2013/12/02 面试题
大二自我鉴定
2014/01/31 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
2014年党支部承诺书
2014/05/30 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
2014党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
SpringBoot快速入门详解
2021/07/21 Java/Android