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中合并两个文本文件并按照姓名首字母排序的例子
Apr 25 Python
Python的垃圾回收机制深入分析
Jul 16 Python
Python引用模块和查找模块路径
Mar 17 Python
用python实现对比两张图片的不同
Feb 05 Python
Django学习笔记之ORM基础教程
Mar 27 Python
python实现txt文件格式转换为arff格式
May 31 Python
判断python字典中key是否存在的两种方法
Aug 10 Python
Python绘制正余弦函数图像的方法
Aug 28 Python
python3结合openpyxl库实现excel操作的实例代码
Sep 11 Python
Anaconda2 5.2.0安装使用图文教程
Sep 19 Python
详解python中groupby函数通俗易懂
May 14 Python
利用python绘制正态分布曲线
Jan 04 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
检测png图片是否完整的php代码
2010/09/06 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
PHP 自动加载的简单实现(推荐)
2016/08/12 PHP
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
jQuery基础知识小结
2014/12/22 Javascript
ExpressJS入门实例
2015/01/14 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
Javascript函数式编程简单介绍
2015/10/11 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
详解Vue数据驱动原理
2020/11/17 Javascript
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
python 统计代码行数简单实例
2017/05/04 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
python多线程下信号处理程序示例
2019/05/31 Python
Python和Anaconda和Pycharm安装教程图文详解
2020/02/04 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
CSS Grid布局教程之网格单元格布局
2014/12/30 HTML / CSS
小学运动会入场式解说词
2014/02/18 职场文书
需求分析说明书
2014/05/09 职场文书
扬尘污染防治方案
2014/06/15 职场文书
报到证办理个人委托书
2014/10/06 职场文书
小学家长意见怎么写
2015/06/03 职场文书
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS