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张)。
转载于:https://www.cnblogs.com/mfrbuaa/p/3763348.html
openCV+ASM+LBP+Gabor实现人脸识别(GT人脸库)相关推荐
- Qt+OpenCV之图片中的人脸识别及人脸抠图
效果 OpenCV函数知识点 imread() 功能:载入图像 函数原型:Mat cv::imread ( const String & filename, int flags = IMREA ...
- VS2022 C# .Net6 OpenCV人脸识别 提取人脸特征提取
根据原作者提供的信息,本文使用的是VS2022 .Net6 Asp.Net WebForm,用来网页端上传头像,后端先保存网页传入的照片再进行照片处理. 一.添加引用三个Nuget包 1.Emgu.C ...
- python人脸识别和人脸对比,face_recognition和OpenCV
前言 先用OpenCV判断图片是否模糊,模糊的话需要重拍: 再用face_recognition检测图片中是否有人脸,有才接着进行下一步: 再用face_recognition计算图片中每张人脸的12 ...
- Android实现人脸识别(人脸检测)初识
title: Android实现人脸识别(人脸检测)初识 categories: Android tags: 人脸识别 人脸检测 相机处理 date: 2020-05-21 11:35:51 介绍 本 ...
- python人脸识别、人脸关键点检测、性别检测
python人脸识别.人脸关键点检测.性别检测 文章目录 根据人脸预测年龄性别和情绪 (python + keras)(三) 一款入门级的人脸.视频.文字检测以及识别的项目. age-gender-e ...
- Python | 人脸识别系统 — 人脸识别
博客汇总:Python | 人脸识别系统 - 博客索引 GitHub地址:Su-Face-Recognition 注:阅读本博客前请先参考 工具安装.环境配置:Python | 人脸识别系统 - 简介 ...
- 人脸识别之人脸检测(一)
人脸识别之人脸检测(一) 人脸识别之拍照保存(二) 人脸识别之数据训练(三) 人脸识别之成果检验(四) 建立人脸识别,首先要下载opencv,在pycharm中的opencv,只能满足一部分需要,不能 ...
- 调用远程摄像头进行人脸识别_人脸识别技术植入手机APP
随着物联网技术的日益成熟,我们看到已经有很多APP用到了人脸识别技术,特别是金融和互联网领域的应用纷纷加入了人脸识别.表示,人脸识别技术基于人的脸部特征信息进行身份识别,为互联网金融等行业解决在线多维 ...
- android 人脸识别边框_android Arcface人脸识别框/人脸抓拍框/人脸追踪框
为什么要改? 先来看看sdk demo中提供的人脸框样式,这个框看上去并不是非常美观(个人觉得) 再看看下面这个框是不是就要顺眼一点 怎么换? 先来看看原始的画法: @Override public ...
最新文章
- iOS10 UI教程子视图和父视图UI层次结构和Views继承
- 【转】完美解决Asp.Net的MasterPage中添加JavaScript路径问题
- python excel 自动化-Python 自动化:处理 Excel(笔记)
- 20211003 矩阵的值域(列空间)和核空间(零空间)
- javascript继承机制
- (2)verilog语言编写打两拍
- case when then else_每天一个常用MySQL函数-[case_when_then_end]
- 怎样写出没有bug的代码?
- iplat62----loading层添加
- 你的第一杯Web 2.0 —— 快速浏览jQuery、Spring MVC和XStream/Jettison
- java翻转字符串中的单词
- Python : 反斜杠
- NYOJ ~ 58 ~ 最小步数(BFS)
- 论发SCI论文和生孩子的共同点:那我这篇怀的也太久了!
- 2017.10.2 计算机算法分析----0-1背包问题
- 根据身份证号计算周岁年龄
- 0-1前端本地网页音乐播放器思路
- android渠道 积分墙,安卓推广:既然能在应用商店做CPD,为什么还一定要做积分墙?...
- 安装无人值守称重系统费用
- 深入了解 Animation Scripting 动画脚本
热门文章
- Django官方文档翻译——Django中的用户身份验证(User authentication in Django)
- 树的表示(1)--双亲表示法
- OpenGL基础3:渲染管线
- Educational Codeforces Round 52: E. Side Transmutations(burnside引理)
- bzoj 2431: [HAOI2009]逆序对数列
- python机器学习案例系列教程——推荐系统
- python找到列表中最大和最小的数
- 积分兑换平台(这是一种剥削么?强烈求拍砖)
- 【JDK】JDK源码分析-CountDownLatch
- cin,cerr,clog,cout