python_基于OpenCV库Adaboost的人脸识别

作者: Kedi | 来源:发表于2016-02-21 20:49 被阅读3183次

以前用Matlab写神经网络的面部眼镜识别算法,研究算法逻辑,采集大量训练数据,迭代,计算各感知器的系数。。。相当之麻烦~而现在运用调用pythonOpenCV库Adaboost算法,无需知道算法逻辑,无需进行模型训练,人脸识别变得相当之简单了。
需要用到的库是opencv(open source computer vision),下载安装方式请参照python_OpenCV安装

首先讲讲需要用到的新函数:

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个自己的照骗,展示一下最终的识别效果:

1--识别前 1——识别后 2——识别前
2——识别后

问题:
1.斜的脸识别率不高
2.大小不同的图片识别率不同,所有最好把图片处理成差不多大小的图片
3.眼部有遮挡物时,眼睛识别率底,比如:有眼睛,有头发

希望有能解决上面问题的朋友能够交流一下~

相关文章

  • python_基于OpenCV库Adaboost的人脸识别

    以前用Matlab写神经网络的面部眼镜识别算法,研究算法逻辑,采集大量训练数据,迭代,计算各感知器的系数。。。相当...

  • OpenCV

    ios学习之基于 OpenCV的人脸识别

  • 图像识别案例

    Python学习:基于Opencv来快速实现人脸识别(完整版) Opencv之python下车牌识别 OpenCV...

  • iOS 端基于OpenCV实现简单人脸识别

    iOS 端基于OpenCV实现人脸识别 一、OpenCV的编译 OpenCV是一个基于BSD[https://ba...

  • openCV

    人脸识别追踪 OpenCV是一个开源发行的跨平台计算机视觉库。 人脸识别使用到了OpenCV里面的Objdetec...

  • Android中使用OpenCV

    三点: 集成OpenCV 使用官方的人脸识别模型写个Demo 训练库 一、集成OpenCV OpenCV集成还是很...

  • avcapture

    iOS人脸识别、自定义相机、图像扫描、系统自带二维码识别基于 OpenCV 的人脸识别 视频捕获 用到的类,主要有...

  • opencv api 笔记

    前言opencv在图像处理中使用广泛,许多常见的应用场景例如人脸识别,车牌识别等都是基于opencv开发的。本文是...

  • Win10使用Face_ recognition+openCV人

    [toc] Face_ recognition+openCV人脸识别 本章利用face-recognition库进...

  • 基于Python的开源人脸识别库:离线识别率高达99.38%

    基于Python的开源人脸识别库:离线识别率高达99.38% [](javascript:;)[](javascr...

网友评论

    本文标题:python_基于OpenCV库Adaboost的人脸识别

    本文链接:https://www.haomeiwen.com/subject/ydtbkttx.html