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中is和id的用法
Apr 03 Python
Python的Bottle框架中获取制定cookie的教程
Apr 24 Python
Python常用小技巧总结
Jun 01 Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 Python
Python递归函数实例讲解
Feb 27 Python
Python字符串匹配之6种方法的使用详解
Apr 08 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
Jun 11 Python
Python CSV文件模块的使用案例分析
Dec 21 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
Mar 05 Python
python 匿名函数与三元运算学习笔记
Oct 23 Python
python 解决函数返回return的问题
Dec 05 Python
pandas将list数据拆分成行或列的实现
Dec 13 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
第十三节--对象串行化
2006/11/16 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
摘自织梦CMS中的图片处理类
2015/08/08 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
jQuery中阻止冒泡事件的方法介绍
2014/04/12 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
python生成带有表格的图片实例
2019/02/03 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
怎样有效的进行自我评价
2013/10/06 职场文书
公务员平时考核实施方案
2014/03/11 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
详解nginx.conf 中 root 目录设置问题
2021/04/01 Servers
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技