人脸识别与仿真

第一章 绪论

本章提出了本文的研究背景及应用前景。首先阐述了人脸图像识别意义;然后介绍了人脸图像识别研究中存在的问题;接着介绍了自动人脸识别系统的一般框架构成;最后简要地介绍了本文的主要工作和章节结构。

就从目前和将来来看,可以预测到人脸图像识别将具有广阔的应用前景,如表1-1中所列举就是其中已经实现或逐步完善的应用。

表1-1 人脸识别的应用


应用


优点


存在问题


信信用卡、汽车驾照、护照以及个人身份验证等


图像摄取可控

图像分割可控

图像质量好


需要建立庞大的数据库


嫌疑犯照片匹配


图像质量不统一

多幅图像可用


潜在的巨大图像库


互联网应用


视频信息价值高多人参与


存在虚假


银行/储蓄安全


监控效果好


图像分割不可控

图像质量较差


人群监测


图像质量高

可利用摄像图像


图像分割自由

图像质量低、实时性

第二章本文研究的问题

本文介绍了人脸图像识别中所应用MATLAB对图像进行预处理,应用该工具箱对图像进行经典图像处理,通过实例来应用matlab图像处理功能,对某一特定的人脸图像处理,进而应用到人脸识别系统。本文在总结分析人脸识别系统中几种常用的图像预处理方法基础上,利用MATLAB实现了一个集多种预处理方法于一体的通用的人脸图像预处理仿真系统,将该系统作为图像预处理模块可嵌入在人脸识别系统中,并利用灰度图像的直方图比对来实现人脸图像的识别判定。

其中涉及到图像的选取,脸部定位,特征提取,图像处理和识别几个过程。

识别系统构成

广义的讲,自动人脸识别系统具有如图1.1所示的一般框架并完成相应功能的任务。

图1.1 人脸识别系统一般框架

(1)人脸图像的获取

一般来说,图像的获取都是通过摄像头摄取,但摄取的图像可以是真人,也可以是人脸的图片或者为了相对简单,可以不考虑通过摄像头来摄取头像,而是直接给定要识别的图像。

(2)人脸的检测

人脸检测的任务是判断静态图像中是否存在人脸。若存在人脸,给出其在图像中的坐标位置、人脸区域大小等信息。而人脸跟踪则需要进一步输出所检测到的人脸位置、大小等状态随时间的连续变化情况。

(3)特征提取

通过人脸特征点的检测与标定可以确定人脸图像中显著特征点的位置(如眼睛、眉毛、鼻子、嘴巴等器官),同时还可以得到这些器官及其面部轮廓的形状信息的描述。

根据人脸特征点检测与标定的结果,通过某些运算得到人脸特征的描述(这些特征包括:全局特征和局部特征,显式特征和统计特征等)。

第三章 人脸图像识别计算机系统

3.1系统基本机构

人脸识别是一个复杂的过程,一个计算机人脸识别的流程如图3-1所示。它包括几个步骤:对采集到的图像,首先进行人脸检测(在输入图像中寻找人脸),给出人脸有无的结果;然后进行人脸定位,确定人脸的位置并提取出来。对人脸的定位在输入是图像序列时一般也称之为人脸跟踪。通常检测和定位结合进行。对提取出来的人脸借助人脸描述就可以进行(狭义的)人脸识别,即通过提取特征来确定其身份。

图3.1  基本框架图

3.2人脸检测定位算法

人脸检测定位算法大致可分为两大类:基于显式特征的方法和基于隐式特征的方法。

所谓显式特征是指对人类肉眼来说直观可见的特征,如肤色、脸部轮廓、脸部结构等。基于显式特征的方法是指由人通过肉眼观察,总结出人脸区别于“非人脸”区域的特征,然后根据被检测区域是否满足这些“人脸特征”,来判定该区域是否包含人脸。根据所选择的“人脸特征”,基于显式特征的方法分为三类:基于肤色模型的方法、模板匹配的方法、基于先验知识的方法。

以上三种方法的优缺点比较见表3-1。

表3-1 基于显示特征方法的特点


检测方法


优点与适用场合


缺点与需要改进的地方


肤色模型


检测速度快


高光和阴影会造成人脸区域被分割而被漏检;肤色区域的存在提高了预警率


模板匹配


直观性好,具有较好的适应性


对表情、尺度变换敏感;可变模板的选择和参数的确定非常困难


基于知识的方法


适用复杂图像中的人脸检测


依赖先验知识;多尺度空间遍历工作量大,运算时间长

基于隐式特征的方法将人脸区域看成一类模式,使用大量“人脸”、“非人脸”样本训练、构造分类器,通过判别图像中所有可能区域是否属于“人脸模式”的方法来实现人脸检测。这类方法有:特征脸法、人工神经网络法、支持向量机法;积分图像法。

以上四种方法的优缺点比较见表3-2

表3-2 基于隐式特征方法的特征


检测方法


优点


缺点与需要改进的地方


本征脸法


标准人脸模板能抽象人脸全部信息,运算不涉及迭代耗费时间短


但模板检测效率低,多模板提高了效率也增加了检测时间


神经网络法


检测效率高,错误报警数目不多,训练成熟的网络监测速度快


多样本训练耗费时间多,但网络监测错误报警数目多


支撑向量机机法


比神经网络方法具有更好的泛化能力,能对为观测到的例子进行有效分类


“非人脸”样本复杂多样,造成支持向量数目多,运算复杂度大


基于积分图像分析法


检测速度快,基本满足实时检测要求,检测效率可以与神经网络法比较


错误报警数目少时,检测率不高

运用matlab仿真进行人脸检测定位实例:

人脸检测定位程序:

%%%%% Reading of a RGB image

i=imread(‘face1.jpg‘);

I=rgb2gray(i);

BW=im2bw(I);

figure,imshow(BW)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% minimisation of backgroundportion

[n1 n2]=size(BW);

r=floor(n1/10);

c=floor(n2/10);

x1=1;x2=r;

s=r*c;

for i=1:10

y1=1;y2=c;

for j=1:10

if (y2<=c | y2>=9*c) | (x1==1 | x2==r*10)

loc=find(BW(x1:x2, y1:y2)==0);

[o p]=size(loc);

pr=o*100/s;

if pr<=100

BW(x1:x2, y1:y2)=0;

r1=x1;r2=x2;s1=y1;s2=y2;

pr1=0;

end

imshow(BW);

end

y1=y1+c;

y2=y2+c;

end

x1=x1+r;

x2=x2+r;

end

figure,imshow(BW)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% detection offace object

L = bwlabel(BW,8);

BB  =regionprops(L, ‘BoundingBox‘);

BB1=struct2cell(BB);

BB2=cell2mat(BB1);

[s1 s2]=size(BB2);

mx=0;

for k=3:4:s2-1

p=BB2(1,k)*BB2(1,k+1);

if p>mx & (BB2(1,k)/BB2(1,k+1))<1.8

mx=p;

j=k;

end

end

figure,imshow(I);

hold on;

rectangle(‘Position‘,[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],‘EdgeColor‘,‘r‘ )

原始图片                    灰度图片

均衡化灰度图片                人脸定位

3.4人脸图像的预处理

不同的人脸识别系统根据其采用的图像来源和识别算法需要不同,采用的预处理方法也不同。常用的人脸图像预处理方法有:滤波去噪、灰度变换、图像二值化、边缘检测、尺寸归一化、灰度归一化等。用在同一系统中的可能只有其中一种或几种预处理方法,但一旦库中采集到的原始图像质量发生较大变化(如人脸大小、光照强度、拍摄条件、成像系统等方面变化),原有的预处理模块便不能满足特征提取的需要,还要更新,这是极不方便的。鉴于此,作者在总结分析了滤波去噪、边缘检测、灰度变换三种广泛应用于不同人脸识别系统中的预处理方法基础上,设计了一个通用的人脸图像预处理仿真系统。该系统可对不同条件下的原始图像进行相应的预处理。如,用户可根据需要选择使用不同的滤波方法去除噪声、不同的边缘检测算子检测人脸边缘、选择不同的灰度变换算法实现图像的灰度校正和灰度归一化,仿真系统同时还实现了尺寸归一化、二值化等其他常用的图像预处理算法。

3.4.1 仿真系统中实现的人脸图像预处理方法

根据所查阅文献资料,常应用于人脸图像的预处理方法有:图像类型转换、滤波去噪、灰度变换、边缘检测及二值化、尺寸归一化、灰度归一化等。作为通用人脸图像预处理模块,要能够充分适应不同人脸库中图像在人脸大小、光照强度、成像系统等方面的任意性和差异性,不能单独采用某种单一的滤波、灰度变换和边缘检测方法。在本仿真系统中,对灰度变换实现。

灰度变换

灰度变换是图像增强技术中的一种。通过灰度变换,可对原始图像中的光照不均进行补偿,使得待识别人脸图像遵循同一或相似的灰度分布。只有这样,不同图像在特征提取和识别时才具有可比性。这一过程,也被称作灰度归一化。常用在人脸识别系统中的灰度变换方法主要有:基于图像统计特征的直方图均衡化、直方图规定化和灰度均值方差标准化三种方法。直方图均衡化和直方图规定化的灰度变换原理和实现方法可由matlab仿真来实现,如下:

i=imread(‘face1.jpg‘);j=rgb2gray(i);

imshow(j);imwrite(j,‘face1.tif‘);

i=imread(‘face1.tif‘);

j=histeq(i);imshow(j);

figure,subplot(1,2,1),imhist(i);

subplot(1,2,2),imhist(j)

第四章 基于直方图的人脸识别实现

4.1识别理论

用灰度直方图增强图像对比度是基于图像灰度值统计的一种重要方法,它以概率论为基础的,常用的实现算法主要是直方图均衡化和直方图规定化。

直方图均衡化主要用于增强动态范围较小的图像的反差,基本思想是把原始图的直方图变换为均匀分布的形式,这样就增强了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。直方图均衡化的优点是能自动地增强整个图像的对比度,但它的具体的增强效果不好控制,处理的结果总是得到全局均衡化的直方图。实际中有时需要变换直方图使之成为某个需要的形状,从而有选择地增强某个灰度值范围内的对比度或使图像灰度值的分布满足特定的要求,这时可以采用比较灵活的直方图规定化方法。

4.2人脸识别的matlab实现

我们设置图库中对应每个人的那组图片的前5张为训练使用,后五张为测试使用,如果错误则显示特定的图片,若正确则显示出每组图片中标号为1.pgm的图片。具体实现如下:

训练机模块

global train_processed_bin;

global total_sub train_img sub_img max_hist_level bin_num form_bin_num;

train_processed_bin(form_bin_num,train_img)=0;

K=1;

train_hist_img=zeros(max_hist_level,train_img);

for Z=1:1:total_sub

for X=1:2:sub_img

I=imread(strcat(‘s‘,int2str(Z),‘\‘,int2str(X),‘.pgm‘));

[rows cols]=size(I);

for i=1:1:rows

for j=1:1:cols

if(I(i,j)==0)

train_hist_img(max_hist_level,K)=train_hist_img(max_hist_level,K)+1;

else

train_hist_img(I(i,j),K)=train_hist_img(I(i,j),K)+1;

end

end

end

K=K+1;

end

end

[r c]=size(train_hist_img);

sum=0;

for i=1:1:c

K=1;

for j=1:1:r

if((mod(j,bin_num))==0)

sum=sum+train_hist_img(j,i);

train_processed_bin(K,i)=sum/bin_num;

K=K+1;

sum=0;

else

sum=sum+train_hist_img(j,i);

end

end

train_processed_bin(K,i)=sum/bin_num;

end

人脸锁定模块:

L = bwlabel(BW,8);

BB  = regionprops(L, ‘BoundingBox‘);

BB1=struct2cell(BB);

BB2=cell2mat(BB1);

[s1 s2]=size(BB2);

mx=0;

for k=3:4:s2-1

p=BB2(1,k)*BB2(1,k+1);

if p>mx & (BB2(1,k)/BB2(1,k+1))<1.8

mx=p;

j=k;

end

end

axes (handles.axes3)

imshow(J)

rectangle(‘Position‘,[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],‘EdgeColor‘,‘r‘ )

msgbox ( ‘Face Detection‘)

验证测试模块:

global train_img max_hist_level bin_num form_bin_num;

global train_processed_bin;

global filename  pathname I

load ‘train‘

test_hist_img(max_hist_level) =0;

test_processed_bin(form_bin_num)= 0;

[rows cols] = size(I);

for i=1:1:rows

for j=1:1:cols

if( I(i,j) == 0 )

test_hist_img(max_hist_level)=  test_hist_img(max_hist_level) +1;

else

test_hist_img(I(i,j)) =test_hist_img(I(i,j)) + 1;

end

end

end

[r c] = size(test_hist_img);

sum = 0;

K = 1;

for j=1:1:c

if( (mod(j,bin_num)) == 0 )

sum = sum + test_hist_img(j);

test_processed_bin(K) =sum/bin_num;

K = K + 1;

sum = 0;

else

sum = sum + test_hist_img(j);

end

end

test_processed_bin(K) = sum/bin_num;

sum = 0;

K = 1;

for y=1:1:train_img

for z=1:1:form_bin_num

sum = sum + abs(test_processed_bin(z) - train_processed_bin(z,y) );

end

img_bin_hist_sum(K,1) = sum;

sum = 0;

K = K + 1;

end

[temp M] = min(img_bin_hist_sum);

M = ceil(M/5);

getString_start=strfind(pathname,‘s‘);

getString_start=getString_start(end)+1;

getString_end=strfind(pathname,‘\‘);

getString_end=getString_end(end)-1;

subjectindex=str2num(pathname(getString_start:getString_end));

if (subjectindex == M)

axes (handles.axes2)

%imageno: 5 is shown for visualization purpose

imshow(imread(STRCAT(‘s‘,num2str(M),‘\1.pgm‘)))

msgbox ( ‘Correctly Recognized‘);

else

display ([ ‘Error==>  Testing Image ofSubject >>‘ num2str(subjectindex)
‘  matches with theimage of subject >> ‘  num2str(M)])

axes (handles.axes2)

%imageno: 5 is shown for visualization purpose

imshow(imread(STRCAT(‘s‘,num2str(M),‘\8.pgm‘)))

msgbox ( ‘Incorrectly Recognized‘);

end

实现结果如图

实现结果

4.3 实验小结

最初这种想法基于颜色直方图。 此算法提供我们的建议技术名为"直方图处理人脸识别"的第一部分。同时使用灰度图像。 第一,每个灰度级的频率是计算并存储在媒介作进一步处理。 第二,平均从存储载体的连续九个频率的计算,并存储在另一个载体,供以后使用,在测试阶段。此均值向量用于计算平均值的曾受训练的图像和测试图像绝对差异。

时间: 2024-10-03 10:02:18

人脸识别与仿真的相关文章

不惧恶意***,自带活体检测的人脸识别已上线!

如今,随着AI技术的普及应用程度越来越高,社区.学校.高铁.车站.工地.旅游风景区等众多民用行业领域的身份验证方式都在悄然发生改变.刷脸,这一大家所熟知的方式,已经从安防领域的应用,慢慢***到越来越多的日常应用场景.众多商业化应用场景人脸识别带来产业新聚变比如对于现代居民社区,居住环境的舒适性和安全性已经成为首选要求.而刷卡.指纹或密码门禁系统除体验较差外,还存在卡片或密码丢失.遗忘.复制以及被盗用的隐患和高成本问题.随着人脸识别门禁系统的问世,则解决了用户进.出及来访客人的管理,同时也对出入

多维活体检测,让人脸识别更安全

今年的315晚会提到人脸识别领域的安全风险,主持人用现场合成的视频通过了活体检测和人脸验证,因此人脸识别的安全性引起大众关注.对于活体检测的安全隐患,腾讯优图团队一直保持高度关注,并依托多年积累的技术能力和业务运营经验,已经对人脸识别技术手段进行过多次安全升级,让人脸识别更安全. 一.目前人脸识别常见攻击手段有什么? 1 .纸片翻拍,通过打印用户的照片进行攻击: 2. 屏幕翻拍,一些3D建模技术可以驱动用户的单张照片或视频做出系统要求的摇头.张嘴.眨眼等动作: 3. 用户戴面具: 二.如何应对人

【下载】推荐一款免费的人脸识别SDK

现已进入刷脸的时代,例如,人脸支付.人脸识别的门禁.人流监控等等.如何在Firefly开源板上快速搭建DEMO,并快速产品化?为了让更多产品可以用上人脸识别技术,Firefly推出了一款高性能人脸识别SDK.此SDK的人脸识别的算法,运行效率高,识别精确度高,性能优异,可以直接应用于商业产品. 下文主要讲述如何在Firefly RK3399平台部署并测试OpenFace SDK,Let's GO!      一.Firefly RK3399开源板安装Ubuntu 16.04系统固件      系

趣拍云:助力APP一周上线人脸识别+动态贴纸

年初,某美图软件上线的"一秒变福娃"引发了全民COS狂潮.配合新年的欢乐气氛,人们纷纷拿起手机,将自己的照片P成福娃的模样,并发到朋友圈送出新年祝福.娱乐化的玩法,不仅收到了年轻粉丝群体的追捧,更带来了巨大的话题量和高流量.而就在近日,国内领先的移动视频云服务商趣拍云也将这一人脸贴图功能开放,可供开发者快速集成如同FaceU的短视频拍摄SDK,实现产品娱乐化与个性化. 开发"神器",助你轻松客服技术难题 立体化和高覆盖的话题营销,自然与产品独特的切入点密不可分.越来

【从零学习openCV】IOS7人脸识别实战

前言 接着上篇<IOS7下的人脸检測>,我们顺藤摸瓜的学习怎样在IOS7下用openCV的进行人脸识别,实际上非常easy,因为人脸检測部分已经完毕,剩下的无非调用openCV的方法对採集到的人脸样本进行训练,终于得到一个能够预測人脸的模型.可是当中的原理可谓是博大精深,因为快临最近末考试了,没时间去琢磨当中详细的细节,这次就先写个大概的demo,下次更新文章就得到6月20号之后了. 原理: 从OpenCV2.4之后,openCV增加了新的类FaceRecognizer,我们能够使用它便捷地进

FaceNet--Google的人脸识别

引入 随着深度学习的出现,CV领域突破很多,甚至掀起了一股CV界的创业浪潮,当次风口浪尖之时,Google岂能缺席.特贡献出FaceNet再次刷新LFW上人脸验证的效果记录. 本文是阅读FaceNet论文的笔记,所有配图均来自于论文. 转载请注明:http://blog.csdn.net/stdcoutzyx/article/details/46687471 FaceNet 与其他的深度学习方法在人脸上的应用不同,FaceNet并没有用传统的softmax的方式去进行分类学习,然后抽取其中某一层

支持向量机 人脸识别(SVM)SKLearn

#!/usr/bin/env python # -*- coding: utf-8 -*- import numpy as np import pylab as pl from sklearn import svm # we create 40 separable points np.random.seed(0)#每次运行结果不变 X = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]] #randn2

opencv+python3.4的人脸识别----2017-7-19

opencv3.1  +  python3.4 第一回合(抄代码,可实现):人脸识别涉及一个级联表,目前能力还无法理解. 流程:1.读取图像---2.转换为灰度图---3.创建级联表---4.对灰度图使用级联表方法过滤---5.迭代得到的结果依次标记出来---6.保存图像 完整代码: import cv2 #读取图片 img = cv2.imread('5.jpg') #转化为灰度图 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #特征级联表 face_

Dlib+OpenCV深度学习人脸识别

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