原理:使用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人脸库)的更多相关文章

  1. java 虹软ArcFace 2.0,java SDK使用、人脸识别-抽取人脸特征并做比对

    java人脸识别 虹软ArcFace 2.0,java SDK使用.人脸识别-抽取人脸特征并做比对 虹软产品地址:http://ai.arcsoft.com.cn/product/arcface.ht ...

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

    基于node.js人脸识别之人脸对比 Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...

  3. 使用python3.7和opencv4.1来实现人脸识别和人脸特征比对以及模型训练

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_126 OpenCV4.1已经发布将近一年了,其人脸识别速度和性能有了一定的提高,这里我们使用opencv来做一个实时活体面部识别的 ...

  4. 人脸识别-关于face_recognition库的安装

    首先十分感谢博客https://blog.csdn.net/scc_722/article/details/80613933,经历过很多尝试(快要醉了),终于看了这篇博客后安装成功. face_rec ...

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

    本文档将利用京东云AI SDK来实践人脸识别中的人脸搜索功能,主要涉及到分组创建/删除.分组列表获取.人脸创建/删除.人脸搜索,本次实操的最终效果是:创建一个人脸库,拿一张图片在人脸库中搜索出相似度最 ...

  6. 百度云人脸识别API人脸对比

    from urllib import request import base64 import requests import re import json import urllib import ...

  7. 百度云人脸识别API人脸库管理

      from urllib import request import base64 import requests import re import json import urllib impor ...

  8. face-api.js 前端人脸识别,人脸检测,登录认证

    1.参考face-api.js https://github.com/justadudewhohacks/face-api.js#face-api.js-for-the-browser

  9. Opencv摄像头实时人脸识别

    Introduction 网上存在很多人脸识别的文章,这篇文章是我的一个作业,重在通过摄像头实时采集人脸信息,进行人脸检测和人脸识别,并将识别结果显示在左上角. 利用 OpenCV 实现一个实时的人脸 ...

随机推荐

  1. Deep Learning基础--机器翻译BLEU与Perplexity详解

    前言 近年来,在自然语言研究领域中,评测问题越来越受到广泛的重视,可以说,评测是整个自然语言领域最核心和关键的部分.而机器翻译评价对于机器翻译的研究和发展具有重要意义:机器翻译系统的开发者可以通过评测 ...

  2. linux脚本学习之路-在suse10环境中生存指定大小指定文件名的压缩文件

    #!/bin/bash#-------------------------------------------------------------------------------# Name:   ...

  3. kvm安装准备

    到实际情况下,做虚拟化是直接做在真机上. 但实验时,可以在虚拟机上进行.(因为做实验的时候没办法连接到桥接模式的网络,所以使用了NAT方式来连接网络) 在vmware安装centos 64bit fo ...

  4. LAMP结合discuz论坛的配置

    一.安装discuz ---->//download discuz; [root@localhost ~]# mkdir /data/www [root@localhost ~]# cd /da ...

  5. ASP.NET Core 上传大文件无法接收的问题

    解决办法:在API项目中配置 1. 在 web.config 文件中 <system.webServer>里加入 <security> <requestFiltering ...

  6. 对于ntp.conf的理解

    允许与我们的时间源同步时间,但是不允许源查询或修改这个系统上的服务. # Permit time synchronization with our time source, but do not # ...

  7. AGC 16 D - XOR Replace

    AGC 16 D - XOR Replace 附上attack(自为风月马前卒爷) 的题解 Problem Statement There is a sequence of length N: a=( ...

  8. 亲手安装RabbitMq 3.7.2 并安装Trace插件

    ===============================================================================================1.安装E ...

  9. JMeter -----响应时间设置

    当压力增大会出现connect timeout error. 解决办法:http request default--advance--timeouts 如填写10,表示大于10ms报错.

  10. ORA-12537: TNS:connection closed错误处理过程

    https://blog.csdn.net/mchdba/article/details/50018571