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在linux中输出带颜色的文字的方法
Jun 19 Python
python使用cPickle模块序列化实例
Sep 25 Python
总结网络IO模型与select模型的Python实例讲解
Jun 27 Python
Python实现基于C/S架构的聊天室功能详解
Jul 07 Python
解决安装pycharm后不能执行python脚本的问题
Jan 19 Python
浅谈python常用程序算法
Mar 22 Python
基于Django框架的权限组件rbac实例讲解
Aug 31 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
Nov 15 Python
pytorch中tensor张量数据类型的转化方式
Dec 31 Python
Python 面向对象之类class和对象基本用法示例
Feb 02 Python
Django 多对多字段的更新和插入数据实例
Mar 31 Python
Python 无限级分类树状结构生成算法的实现
Jan 21 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/12/06 PHP
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
2016/05/26 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
offsetParent 算法分析
2010/04/05 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
浅谈Javascript中Object与Function对象
2015/09/26 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
2016/04/29 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
python文件选择对话框的操作方法
2019/06/27 Python
python读写文件write和flush的实现方式
2020/02/21 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
基于python实现操作redis及消息队列
2020/08/27 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
小学防溺水制度
2014/01/29 职场文书
纪律教育月活动总结
2014/08/26 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
MongoDB数据库的安装步骤
2021/06/18 MongoDB