当前位置:   article > 正文

基于openCV实现人脸检测_判断图片是否正脸

判断图片是否正脸

openCV的人脸识别主要通过Haar分类器实现,当然,这是在已有训练数据的基础上。openCV安装在 opencv/opencv/sources/data/haarcascades_cuda(或haarcascades)中存在预先训练好的物体检测器(xml格式),包括正脸、侧脸、眼睛、微笑、上半身、下半身、全身等。

openCV的的Haar分类器是一个监督分类器首先对图像进行直方图均衡化并归一化到同样大小,然后标记里面是否包含要监测的物体。它首先由Paul Viola和Michael Jones设计,称为Viola Jones检测器。Viola Jones分类器在级联的每个节点中使用AdaBoost来学习一个高检测率低拒绝率的多层树分类器。它使用了以下一些新的特征

1. 使用类Haar输入特征:对矩形图像区域的和或者差进行阈值化

  2. 积分图像技术加速了矩形区域的45°旋转的值的计算,用来加速类Haar输入特征的计算。

3. 使用统计boosting来创建两类问题(人脸和非人脸)的分类器节点(高通过率,低拒绝率)

4. 把弱分类器节点组成筛选式级联。即,第一组分类器最优,能通过包含物体的图像区域,同时允许一些不包含物体通过的图像通过;第二组分 类器次优分类器,也是有较低的拒绝率;以此类推。也就是说,对于每个boosting分类器,只要有人脸都能检测到,同时拒绝一小部分非人脸, 并将其传给下一个分类器,是为低拒绝率。以此类推,最后一个分类器将几乎所有的非人脸都拒绝掉,只剩下人脸区域。只要图像区域通过了整 个级联,则认为里面有物体。

此技术虽然适用于人脸检测,但不限于人脸检测,还可用于其他物体的检测,如汽车、飞机等的正面、侧面、后面检测。在检测时,先导入训练好的参数文件,其中haarcascade_frontalface_alt2.xml对正面脸的识别效果较好,haarcascade_profileface.xml对侧脸的检测效果较好。当然,如果要达到更高的分类精度,可以收集更多的数据进行训练,这是后话。

以下代码基本实现了正脸、眼睛、微笑、侧脸的识别,若要添加其他功能,可以自行调整。

  1. // faceDetector.h
  2. // This is just the face, eye, smile, profile detector from OpenCV's samples/c directory
  3. //
  4. /* *************** License:**************************
  5. Jul. 18, 2016
  6. Author: Liuph
  7. Right to use this code in any way you want without warranty, support or any guarantee of it working.
  8. OTHER OPENCV SITES:
  9. * The source code is on sourceforge at:
  10. http://sourceforge.net/projects/opencvlibrary/
  11. * The OpenCV wiki page (As of Oct 1, 2008 this is down for changing over servers, but should come back):
  12. http://opencvlibrary.sourceforge.net/
  13. * An active user group is at:
  14. http://tech.groups.yahoo.com/group/OpenCV/
  15. * The minutes of weekly OpenCV development meetings are at:
  16. http://pr.willowgarage.com/wiki/OpenCV
  17. ************************************************** */
  18. #include "cv.h"
  19. #include "highgui.h"
  20. #include <stdio.h>
  21. #include <stdlib.h>
  22. #include <string.h>
  23. #include <assert.h>
  24. #include <math.h>
  25. #include <float.h>
  26. #include <limits.h>
  27. #include <time.h>
  28. #include <ctype.h>
  29. #include <iostream>
  30. using namespace std;
  31. static CvMemStorage* storage = 0;
  32. static CvHaarClassifierCascade* cascade = 0;
  33. static CvHaarClassifierCascade* nested_cascade = 0;
  34. static CvHaarClassifierCascade* smile_cascade = 0;
  35. static CvHaarClassifierCascade* profile = 0;
  36. int use_nested_cascade = 0;
  37. void detect_and_draw( IplImage* image );
  38. /* The path that stores the trained
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/945816
推荐阅读
相关标签
  

闽ICP备14008679号