openCV+ASM+LBP+Gabor实现人脸识别(GT人脸库)

原理:使用GT人脸库做样本,VS2010下使用openCV2.44自带的Haar算法检測人脸区域,ASM
Library特征检測,然后使用YCrCb颜色空间做肤色检測,再用LBP+Gabor小波提取特征,最小邻近距离做分类识别。

1、GT人脸库

Georgia Tech face database,网址:http://www.anefian.com/research/face_reco.htm

GT人脸库包括50个人,每人15张不同角度、不同表情的正面照片。

图片为JPG格式,640*480,大小在159~192KB之间。Zip压缩下总大小130M。

特点是数据量比較多,每一个人的图像信息丰富多变,相对也比較其它库难以识别。

2、openCV人脸区域检測


	pFaces = cvHaarDetectObjects(
pic8, g_FDcascade, g_FDstorage,
1.1,
3,
0 |
//CV_HAAR_DO_CANNY_PRUNING |
//CV_HAAR_FIND_BIGGEST_OBJECT |
CV_HAAR_DO_ROUGH_SEARCH |
CV_HAAR_SCALE_IMAGE |
0,
cvSize(20, 20));


下面几个图片在CV_HAAR_DO_CANNY_PRUNING | CV_HAAR_FIND_BIGGEST_OBJECT(识别最大的人脸区域)下识别不出来:

s05_07.jpg //
能够在CV_HAAR_DO_ROUGH_SEARCH | CV_HAAR_SCALE_IMAGE(识别全部的人脸区域)下识别,见下图

s24_03.jpg // 无法识别
s32_06.jpg // 无法识别
s32_14.jpg // 识别错误
s43_14.jpg //
识别错误

可见openCV的检測率还是非常高的(745/750 =
99.33%)。

s05_07.jpg 

s01_01.jpg

3、ASMLibrary特征检測

ASM Library是国人的作品,https://code.google.com/p/asmlibrary/

	#define FDFN	"haarcascade_frontalface_alt2.xml"
#define ASMFN "AsmModel.amf"

g_AsmFit.Read(ASMFN));
g_FDcascade = (CvHaarClassifierCascade*)cvLoad(FDFN, 0, 0, 0);

	g_detshape[0].x = float(g_faceRc.x);
g_detshape[0].y = float(g_faceRc.y);
g_detshape[1].x = float(g_faceRc.x+g_faceRc.width);
g_detshape[1].y = float(g_faceRc.y+g_faceRc.height);
InitShapeFromDetBox(g_shape, g_detshape,
g_AsmFit.GetMappingDetShape(), g_AsmFit.GetMeanFaceWidth());
g_AsmFit.Fitting(g_shape, picCopy); // fit ASM model

识别以后,提取人脸区域。

4、YCrCb颜色空间做肤色检測


		for (int w=0; w<src->width; w++)
{
if (pycrcb[Cr]>=133&&pycrcb[Cr]<=173&&pycrcb[Cb]>=77&&pycrcb[Cb]<=127)
{
SkinCount++;
}
pycrcb+=3;
psrc+=3;
}


依照肤色推断公式检查区域内的肤色像素,依照阈值为0.2推断是否为人脸区域,

再进一步规范化并获取人脸特征。

 s05_07提取的人脸特征灰度图    s01_01提取的人脸特征灰度图

5、LBP+Gabor小波

LBP见:http://baike.baidu.com/view/1099358.htm?fr=aladdin

Gabor见:http://en.wikipedia.org/wiki/Gabor_filter

Complex



Real



Imaginary



where



and



简单的说就是使用Gabor变换在0~4五个尺度,0~8八个邻域方向对前面提取的人脸灰度图做卷积运算。然后提取灰度直方图作为特征。

					tmpV0 = tmpV * exp(-tmpV * (x*x + y*y) / 2.0);
tmpV1 = k*cos(phi)*x + k*sin(phi)*y;
cvmSet( re, y+kernelRadius, x+kernelRadius, tmpV0 * cos(tmpV1) );
cvmSet( im, y+kernelRadius, x+kernelRadius, tmpV0 * sin(tmpV1) );

/* G{scale_idx,angle_idx} = k^2/sigma^2 * exp(-k^2*(X.^2+Y.^2)/2/sigma^2)...
.*(exp(1i*(k*cos(phi)*X+k*sin(phi)*Y) - DC)); */

6、最小邻近距离


最后使用最小邻近距离,推断 待检測图片与样本的距离,最小的即为匹配的样本。

7、几点总结

1、速度:训练大概是0.16s一幅,识别大概是0.35s一幅。速度有点慢。

2、识别率:一组測试採用5个人每人5个图片作为样本,測试每一个人另外5张照片。

比如s01-s05,使用每人前5张照片(共25张)训练,中间或最后5张照片(共25张)作为待识别图片,识别率均为92%(23张)。

openCV+ASM+LBP+Gabor实现人脸识别(GT人脸库),布布扣,bubuko.com

时间: 2024-12-25 15:09:59

openCV+ASM+LBP+Gabor实现人脸识别(GT人脸库)的相关文章

基于node.js人脸识别之人脸对比

基于node.js人脸识别之人脸对比 Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型. Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP.Python.Perl.Ruby 等服务端语言平起平坐的脚本语言. 发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装. Node对一些特殊用

干货 | AI人脸识别之人脸搜索

本文档将利用京东云AI SDK来实践人脸识别中的人脸搜索功能,主要涉及到分组创建/删除.分组列表获取.人脸创建/删除.人脸搜索,本次实操的最终效果是:创建一个人脸库,拿一张图片在人脸库中搜索出相似度最高的一张,实现1:N的人脸识别,操作示意图如下: 一.准备工作 1. 创建AK/SK 登陆京东云控制台:https://console.jdcloud.com,点击右上角账户AccessKey 管理,接着如图点击创建Access Key 2. 购买人脸搜索服务 人脸搜索通过 API 调用次数计费,目

实验报告: 人脸识别方法回顾与实验分析 【OpenCV测试方法源码】

趁着还未工作,先把过去做的东西整理下出来~   Github源码:https://github.com/Blz-Galaxy/OpenCV-Face-Recognition (涉及个人隐私,源码不包含测试样本,请谅解~) 对实验结果更感兴趣的朋友请直接看 第5章 [摘要]这是一篇关于人脸识别方法的实验报告.报告首先回顾了人脸识别研究的发展历程及基本分类:随后对人脸识别技术方法发展过程中一些经典的流行的方法进行了详细的阐述:最后作者通过设计实验对比了三种方法的识别效果并总结了人脸识别所面临的困难与

OpenCV — 人脸识别

前段时间弄过一下人脸识别相关的东西,记录一下 撰写不易,转载需注明出处:http://blog.csdn.net/jscese/article/details/54409627本文来自 [jscese]的博客! 概念 FaceDetect 人脸检测 在一张图像中判断是否存在人脸并找出人脸所在的位置 FaceRecognize 人脸识别 在人脸检测的基础上收集人脸数据集合进行处理保存信息,将输入人脸与保存的信息进行比对校验,得到是否为其中某个人脸 特征值 以某种特定规则对输入源进行处理得到具有唯一

OpenCV 和 Dlib 人脸识别基础

00 环境配置 Anaconda 安装 1 下载 https://repo.anaconda.com/archive/ 考虑到兼容性问题,推荐下载Anaconda3-5.2.0版本. 2 安装 3 测试 在键盘按 Win + R, 输入 cmd,回车,将会打开cmd窗口,输入 activate base, 如下所示,表明anaconda环境系统变量无误. IDE PyCharm的安装 自行百度搜索下载并破解. http://idea.lanyus.com/ OpenCV安装 C:\Users\A

Dlib+OpenCV深度学习人脸识别

目录(?)[+] DlibOpenCV深度学习人脸识别 前言 人脸数据库导入 人脸检测 人脸识别 异常处理 Dlib+OpenCV深度学习人脸识别 前言 人脸识别在LWF(Labeled Faces in the Wild)数据集上人脸识别率现在已经99.7%以上,这个识别率确实非常高了,但是真实的环境中的准确率有多少呢?我没有这方面的数据,但是可以确信的是真实环境中的识别率并没有那么乐观.现在虽然有一些商业应用如员工人脸识别管理系统.海关身份验证系统.甚至是银行人脸识别功能,但是我们可以仔细想

python使用opencv实现人脸识别系统

1.首先安装过python环境,在这里就不过说    检测是否安装成功如下,在cmd中输入Python     2.安装numpy 现在开始安装numpy,打开cmd,输入pip install numpy 我的电脑已经安装过了,忘记截屏了.就在网上找了图片 测试是否成功 3.安装opencv 在官网自行下载,这里下载的是opencv2.4.10安装. ### (1)复制cv2.pyd 将"\opencv\build\python\2.7\x64"或"\opencv\buil

OpenCV图像处理以及人脸识别

OpenCV基础 OpenCV是一个开源的计算机视觉库.提供了很多图像处理常用的工具 批注:本文所有图片数据都在我的GitHub仓库 读取图片并显示 import numpy as np import cv2 as cv original = cv.imread('../machine_learning_date/forest.jpg') cv.imshow('Original', original) 显示图片某个颜色通道的图像 blue = np.zeros_like(original) bl

人脸识别(face recognition)

一.前述 1. 发展 以往的人脸识别主要是包括人脸图像采集.人脸识别预处理.身份确认.身份查找等技术和系统.现在人脸识别已经慢慢延伸到了ADAS中的驾驶员检测.行人跟踪.甚至到了动态物体的跟踪.由此可以看出,人脸识别系统已经由简单的图像处理发展到了视频实时处理.而且算法已经由以前的Adaboots.PCA等传统的统计学方法转变为CNN.RCNN等深度学习及其变形的方法.现在也有相当一部分人开始研究3维人脸识别识别,这种项目目前也受到了学术界.工业界和国家的支持. 之后的内容主要参考了下面的链接,