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 获取本机ip地址的两个方法
Feb 25 Python
用Python和MD5实现网站挂马检测程序
Mar 13 Python
基于Python实现的百度贴吧网络爬虫实例
Apr 17 Python
Python字符串格式化
Jun 15 Python
最近Python有点火? 给你7个学习它的理由!
Jun 26 Python
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
python字符串查找函数的用法详解
Jul 08 Python
Python列表的切片实例讲解
Aug 20 Python
Django框架model模型对象验证实现方法分析
Oct 02 Python
opencv之颜色过滤只留下图片中的红色区域操作
Jun 05 Python
python 还原梯度下降算法实现一维线性回归
Oct 22 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 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
2016/05/30 PHP
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
JavaScript等比例缩放图片控制超出范围的图片
2013/08/06 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
node.js基于express使用websocket的方法
2017/11/09 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
jQuery实现飞机大战小游戏
2020/07/05 jQuery
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
Python多进程分块读取超大文件的方法
2016/04/13 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
解决Python二维数组赋值问题
2019/11/28 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
市政施工员自我鉴定
2014/01/15 职场文书
公司前台辞职报告
2014/01/19 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
详解Go与PHP的语法对比
2021/05/29 PHP
Python OpenCV超详细讲解基本功能
2022/04/02 Python