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 错误和异常小结
Oct 09 Python
python基础_文件操作实现全文或单行替换的方法
Sep 04 Python
python批量替换页眉页脚实例代码
Jan 22 Python
对Python3 序列解包详解
Feb 16 Python
Python3实现的反转单链表算法示例
Mar 08 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
Python实现从N个数中找到最大的K个数
Apr 02 Python
python网络编程之五子棋游戏
May 14 Python
python字符串的index和find的区别详解
Jun 20 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
高考要来啦!用Python爬取历年高考数据并分析
Jun 03 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 PDOStatement:bindParam插入数据错误问题分析
2013/11/13 PHP
php实现斐波那契数列的简单写法
2014/07/19 PHP
php随机取mysql记录方法小结
2014/12/27 PHP
php DES加密算法实例分析
2019/09/18 PHP
PHP7 新增常量
2021/03/09 PHP
JS画线(实例代码)
2013/11/20 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
ECMAScript6轮播图实践知识总结
2016/08/17 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
Angular排序实例详解
2017/06/28 Javascript
微信小程序实现时间预约功能
2018/11/27 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
Python将多份excel表格整理成一份表格
2018/01/03 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
python利用platform模块获取系统信息
2020/10/09 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
机电专业大学生求职信
2013/10/04 职场文书
行政部主管岗位职责
2013/12/28 职场文书
四年级科学教学反思
2014/02/10 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
《陈涉世家》教学反思
2014/04/12 职场文书
食品安全汇报材料
2014/08/18 职场文书
水电维修专业推荐信
2014/09/06 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python
MySQL系列之三 基础篇
2021/07/02 MySQL