赞
踩
之前,曾写过一个较为完整的人脸识别小系统。开发环境为opencv2.4.9和VS2012,并加入了一个新模块cvui.h,用此模块为人脸识别系统写了一个简单界面。界面如下:
此界面用到的元素比较简单,包含按钮、文本框、图片及文字。
本文章写作框架如下:
1. 人脸识别流程
2.各部分功能:详见下文“各模块讲解”。
3.各部分中遇到的细节问题
例如:
CascadeClassifier cascade;//建立级联分类器
cascade.load("haarcascade_frontalface_alt2.xml"); // 加载训练好的 人脸检测器(.xml)
cascade.detectMultiScale(frameGray,faces,1.2, 2,0 | CV_HAAR_FIND_BIGGEST_OBJECT );
haarcascade_frontalface_alt2.xml到底是什么东西?
4.本系统的缺陷,是否可提升
(1) 人脸采集问题:人脸旋转-》矫正
(2)训练模型问题:更换更好的模型来训练-》深度学习
(3)样本格式问题:直接利用彩色图像会不会更好
(4)训练样本问题:人脸数据库数量不足,以及ORL是西方面孔,与我们东方面孔的差异。-》采集更多东方人脸,进行训练
(5)人脸数组:现在是只识别一个人,能否识别多个,可以
(6)自己训练人脸检测器haar_cascade
5.所涉及的算法及原理,详见下文各模块讲解。
6.具体代码请戳:http://blog.csdn.net/u012679707/article/details/79520299 基于opencv2的人脸识别系统(二)具体代码
各模块讲解
第一部分:主函数
main.c
系统主函数,包含参数初始化、ui界面的设置以及整体流程控制。
capture.cpp
人脸采集模块,功能是从摄像头画面中检测出人脸,并将人脸图像(矩形)截取下来,保存到训练文件中。其中人脸检测的详细过程是,
第一步,建立级联分类器
CascadeClassifier cascade;//建立级联分类器
第二步,加载Haar级联分类器模型.xml
cascade.load("haarcascade_frontalface_alt2.xml"); // 加载训练好的 人脸检测器(.xml)
第三步,用加载好的级联分类器进行人脸检测,返回检测到的人脸数组faces
cascade.detectMultiScale(frameGray,faces,1.2, 2,0 | CV_HAAR_FIND_BIGGEST_OBJECT );
流程图如下:
这一模块中,有一个问题,haar是什么?haar.xml为什么可以做人脸检测模型?如何检测出人脸的?
首先,haar特征是一种特征提取的方法。其实,特征提取方法有很多种,比如说Haar特征,edgelet特征,shapelet特征,HOG特征,HOF特征,小波特征,边缘模板等等。
摘录自:http://blog.csdn.net/yang6464158/article/details/25103703(特征提取之——Haar特征)
Haar分类器 = Haar-like特征 + 积分图方法 + AdaBoost +级联
Haar分类器算法的要点如下:
① 使用Haar-like特征做检测。
② 使用积分图(Integral Image)对Haar-like特征求值进行加速。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。