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 多线程实现检测服务器在线情况
Nov 25 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
Python线程同步的实现代码
Oct 03 Python
python 定时器,轮询定时器的实例
Feb 20 Python
python-tkinter之按钮的使用,开关方法
Jun 11 Python
python识别图像并提取文字的实现方法
Jun 28 Python
python变量命名的7条建议
Jul 04 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 Python
利用Python检测URL状态
Jul 31 Python
django foreignkey外键使用的例子 相当于left join
Aug 06 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
Dec 13 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 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
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
2010/06/04 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
微信小程序--获取用户地理位置名称(无须用户授权)的方法
2019/04/29 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
Python去除列表中重复元素的方法
2015/03/20 Python
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
Anconda环境下Vscode安装Python的方法详解
2020/03/29 Python
使用python实现微信小程序自动签到功能
2020/04/27 Python
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
广州地球村科技数据库题目
2016/04/25 面试题
别名指示符是什么
2012/10/08 面试题
高中毕业生自我鉴定例文
2013/12/29 职场文书
预备党员政审材料
2014/02/04 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
认错检讨书
2014/10/02 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书
Django如何与Ajax交互
2021/04/29 Python
MySQL约束超详解
2021/09/04 MySQL