原理:使用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张)。

转载于:https://www.cnblogs.com/mfrbuaa/p/3763348.html

openCV+ASM+LBP+Gabor实现人脸识别(GT人脸库)相关推荐

  1. Qt+OpenCV之图片中的人脸识别及人脸抠图

    效果 OpenCV函数知识点 imread() 功能:载入图像 函数原型:Mat cv::imread ( const String & filename, int flags = IMREA ...

  2. VS2022 C# .Net6 OpenCV人脸识别 提取人脸特征提取

    根据原作者提供的信息,本文使用的是VS2022 .Net6 Asp.Net WebForm,用来网页端上传头像,后端先保存网页传入的照片再进行照片处理. 一.添加引用三个Nuget包 1.Emgu.C ...

  3. python人脸识别和人脸对比,face_recognition和OpenCV

    前言 先用OpenCV判断图片是否模糊,模糊的话需要重拍: 再用face_recognition检测图片中是否有人脸,有才接着进行下一步: 再用face_recognition计算图片中每张人脸的12 ...

  4. Android实现人脸识别(人脸检测)初识

    title: Android实现人脸识别(人脸检测)初识 categories: Android tags: 人脸识别 人脸检测 相机处理 date: 2020-05-21 11:35:51 介绍 本 ...

  5. python人脸识别、人脸关键点检测、性别检测

    python人脸识别.人脸关键点检测.性别检测 文章目录 根据人脸预测年龄性别和情绪 (python + keras)(三) 一款入门级的人脸.视频.文字检测以及识别的项目. age-gender-e ...

  6. Python | 人脸识别系统 — 人脸识别

    博客汇总:Python | 人脸识别系统 - 博客索引 GitHub地址:Su-Face-Recognition 注:阅读本博客前请先参考 工具安装.环境配置:Python | 人脸识别系统 - 简介 ...

  7. 人脸识别之人脸检测(一)

    人脸识别之人脸检测(一) 人脸识别之拍照保存(二) 人脸识别之数据训练(三) 人脸识别之成果检验(四) 建立人脸识别,首先要下载opencv,在pycharm中的opencv,只能满足一部分需要,不能 ...

  8. 调用远程摄像头进行人脸识别_人脸识别技术植入手机APP

    随着物联网技术的日益成熟,我们看到已经有很多APP用到了人脸识别技术,特别是金融和互联网领域的应用纷纷加入了人脸识别.表示,人脸识别技术基于人的脸部特征信息进行身份识别,为互联网金融等行业解决在线多维 ...

  9. android 人脸识别边框_android Arcface人脸识别框/人脸抓拍框/人脸追踪框

    为什么要改? 先来看看sdk demo中提供的人脸框样式,这个框看上去并不是非常美观(个人觉得) 再看看下面这个框是不是就要顺眼一点 怎么换? 先来看看原始的画法: @Override public ...

最新文章

  1. iOS10 UI教程子视图和父视图UI层次结构和Views继承
  2. 【转】完美解决Asp.Net的MasterPage中添加JavaScript路径问题
  3. python excel 自动化-Python 自动化:处理 Excel(笔记)
  4. 20211003 矩阵的值域(列空间)和核空间(零空间)
  5. javascript继承机制
  6. (2)verilog语言编写打两拍
  7. case when then else_每天一个常用MySQL函数-[case_when_then_end]
  8. 怎样写出没有bug的代码?
  9. iplat62----loading层添加
  10. 你的第一杯Web 2.0 —— 快速浏览jQuery、Spring MVC和XStream/Jettison
  11. java翻转字符串中的单词
  12. Python : 反斜杠
  13. NYOJ ~ 58 ~ 最小步数(BFS)
  14. 论发SCI论文和生孩子的共同点:那我这篇怀的也太久了!
  15. 2017.10.2 计算机算法分析----0-1背包问题
  16. 根据身份证号计算周岁年龄
  17. 0-1前端本地网页音乐播放器思路
  18. android渠道 积分墙,安卓推广:既然能在应用商店做CPD,为什么还一定要做积分墙?...
  19. 安装无人值守称重系统费用
  20. 深入了解 Animation Scripting 动画脚本

热门文章

  1. Django官方文档翻译——Django中的用户身份验证(User authentication in Django)
  2. 树的表示(1)--双亲表示法
  3. OpenGL基础3:渲染管线
  4. Educational Codeforces Round 52: E. Side Transmutations(burnside引理)
  5. bzoj 2431: [HAOI2009]逆序对数列
  6. python机器学习案例系列教程——推荐系统
  7. python找到列表中最大和最小的数
  8. 积分兑换平台(这是一种剥削么?强烈求拍砖)
  9. 【JDK】JDK源码分析-CountDownLatch
  10. cin,cerr,clog,cout