当今社会,人脸识别系统已经是遍地可见。不论是进出办公楼的门禁,还是乘坐地铁时可以刷脸乘坐。人脸识别系统大大的提高了通行的效率,是一项很先进的技术。公众一直以来好奇人脸识别系统的工作原理,认为这是一项黑科技。但其实认真说起来,他也只是数学运算的概率问题。人脸识别系统的工作原理主要有以下这几部分组成。
一、深度学习模型。
人脸识别系统当中的核心和灵魂部分就是深度学习的神经网络模型。所谓神经网络模型其实就是一个运算器,在这个运算器当中,我们可以把它看作一个黑盒子,其中存储着很多的参数,这些参数是可以自动调整的。这个学习模型主要用来进行训练,训练的目的就是能够达到一个人的两张照片输入之后,它的输出结果概率无限接近1。
二、模型训练过程。
对学习模型进行训练,是让他能够记住人脸的特征。通常的做法是采用大量的人脸数据,把这些已经标注好的数据放到这个模型当中,然后告诉它哪一个人的照片跟另外一张是同一个人,通过不断的训练他就记住了人的特征。表现出来的就是学习模型当中的参数,最后固定好。当我们拿两张没有经过训练的输进去的时候,它也能够算出两张是一个人的概率。
三、自更新系统。
在人脸识别系统当中还有一个重要的部分,就是他能够自我更新自我学习,当他第1次判断出两张照片是同一个人之后,他会把这两张照片作为他的训练集更新自身模型当中的参数,这样它就相当于记住了这个人。以后这个人再来的话很快就判别出来。
人脸识别系统是近些年来深度学习和计算机科学发展的集大成者,其原理很复杂。
了解人脸识别模块原理如何工作只需要4步
在我们深入研究边缘人脸识别及其应用之前,让我们首先探索人脸识别模块的工作原理。
人脸识别技术可以通过分析个人的面部来识别或验证个人的身份。人脸识别人工智能通过将相机捕捉到的人脸与预先记录的人脸数据库进行匹配来运行。
尽管有多种类型的人脸识别系统,但它们通常以以下方式工作:
第1步:人脸检测识别人脸
摄像头定位并识别清晰的面部图像。当个人单独或在一个组中时,可以识别面部。
此外,人脸检测可以识别正面或侧面的人,因此相机只能捕捉他们的个人资料。
第2步:人脸分析测量人脸
通过读取人脸的映射方式来分析图像。
人工智能软件会分析和测量从额头到下巴的距离以及双眼之间的距离等方面。它还决定了耳朵、嘴唇、下巴和颧骨的形状等。目的是确定您面部的关键特征,这些特征使您成为您。
第3步:将拍摄的图像转化为数据
根据收集到的所有测量结果,将被归类为模拟信息的人脸转换为数据并归类为数字信息。脸现在被转换成一个数学公式,它有自己的数字代码,称为面纹。面部指纹就像指纹一样。没有两个是相同的。
第4步:人脸匹配将您的人脸与数据库进行比较
个人的面纹现在在数据库中,并且可以与所有其他面纹进行比较。当一个人的脸印与人脸识别数据库中的另一张图像匹配时,就会为一个人分配一个身份
1、首先建立一个人脸数据库(人脸库)。
2、比对,根据特征点编辑算法比对。
至于你说的什么系统——可以用很多种语言实现算法比对,也可以运行在很多种服务器上。
比如海鑫人脸识别SDK
一、简介
人脸识别SDK 是专为开发者设计的一个本地化的人脸识别开发包,基于北京海鑫科金高科技股份有限公司具有完全自主知识产权的国际领先人脸识别核心技术开发,包含当今国际领先的人脸检测、人脸特征抽取及人脸比对技术,可以用于1:1的身份确认和1:N的身份识别。
人脸识别SDK 为开发者提供完整的技术文档和开发示例代码,节省系统开发周期,减轻系统开发成本。
二、主要功能
人脸注册、人脸检测、人脸识别
图像质量检测
多种图像采集方式:实时视频采集(DirectShow、VFW) 、扫描设备(TWain)、数码(BMP、JPG、PNG、GIF等)
数据存储方式:文件存储、数据库
支持比对方式:1:1,1:N
输出候选人名单、置信度及人脸位置
支持单人脸单模板,单人脸多模板
三、系统环境
开发环境:Microsoft Visual Studio 6或更高
*** 作系统:Windows 2000+SP、Windows XP+SP2
最低硬件要求:CPU:P4 30GHz,内存:512MB,硬盘:400MB
四、开发帮助
完整的技术文档
VC++示例代码
本教程 *** 作环境:windows7系统、Dell G3电脑。
人脸识别(Facial Recognition),就是通过视频采集设备获取用户的面部图像,再利用核心的算法对其脸部的五官位置、脸型和角度进行计算分析,进而和自身数据库里已有的范本进行比对,后判断出用户的真实身份。
人脸识别算法是指在检测到人脸并定位面部关键特征点之后,主要的人脸区域就可以被裁剪出来,经过预处理之后,馈入后端的识别算法。识别算法要完成人脸特征的提取,并与库存的已知人脸进行比对,完成最终的分类。
人脸识别的算法有 4 种:基于人脸特征点的识别算法、基于整幅 人脸图像的识别算法、基于模板的识别算法、利用神经网络进行识别的算法。
人脸识别算法的原理:
系统输入一般是一张或者一系列含有未确定身份的人脸图像,以及人脸数据库中的若干已知身份的人脸图象或者相应的编码,而其输出则是一系列相似度得分,表明待识别的人脸的身份。
人脸识别的三个经典算法
1、Eigenfaces(特征脸)算法
Eigenfaces是在人脸识别的计算机视觉问题中使用的一组特征向量的名称,Eigenfaces是基于PCA(主成分分析)的,所以学习Eigenfaces需要我们了解PCA的原理。
基本思想
主成分分析(PCA)是一种矩阵的压缩算法,在减少矩阵维数的同时尽可能的保留原矩阵的信息,简单来说就是将 n×m的矩阵转换成n×k的矩阵,仅保留矩阵中所存在的主要特性,从而可以大大节省空间和数据量。PCA的实现需要进行降维,也就是将矩阵进行变换,从更高的维度降到低的维度,然而PCA的降维离不开协方差矩阵。方差是描述一维数据样本本身相对于均值的偏离程度,是一种用来度量两个随机变量关系的统计量,从角度来说,其夹角越小,值越大,方向越相近,也就是越正相关。协方差矩阵度量除了是两个随机变量的关系外,还是维度与维度之间的关系,而非样本与样本之间的关系。
学习一种新的东西,尤其是知识,我们需要了解知识中的思想。我在了解和学习Eigenface算法时它的思想是图像识别首先要选择一个合适的子空间,将所有的图像集中到这个子空间中,然后在这个子空间中衡量相似性或者进行分类学习,再讲子空间变换到另一个空间中,这样的作用一是同一个类别的图像离得更近,二是不同的类别的图像会离得比较远;这样经过线性分类分开的图像在新空间就能容易分开。同时特征脸技术会寻找人脸图像分布的基本元素,即人脸图像样本集协方差矩阵的特征向量,以此来表征人脸图像。人脸图像的基本元素有很多,比如眼、面颊、唇等基本元素,这些特征向量在特征脸的图像空间中对应生成的子空间被称为子脸空间。
生成了子空间之后就要进行空间构造,那么如何进行空间构造呢?首先要寻找人脸的共性,其次是要寻找个体与共性的差异,还有就是要明白共性其实是空间,个体就是向量。利用协方差矩阵把目标集中所有人脸图像的特征值进行分解,得到对应的特征向量,这些特征向量就是“特征脸”。寻找特征向量的特性,将其进行线性组合。在以每一个特征子脸为基的空间,每个人脸就是一个点,这个点的坐标就是每一个人脸在每个特征基下的的投影坐标。
Eigenfaces算法过程
获得人脸图像数据,将每一个人脸图像矩阵按行串成一维,每个人脸就是一个向量;
将M个人脸在对应维度上加起来,然后求平均得到“平均脸”;
将每个图像都减去平均脸向量;
计算协方差矩阵;
运用Eigenfaces记性人脸识别;
算法实践过程;
训练图像
求出平均脸
获得特征子脸
进行图像重构
寻找相似度高的人脸图像。
2、FisherFace算法
FisherFace是Fisher线性判别在人脸识别的应用。线性判别分析(LDA)算法思想最早由英国统计与遗传学家,现代统计科学的奠基人之一罗纳德费舍尔(Ronald)提出。LDA算法使用统计学方法,尝试找到物体间特征的一个线性组合,在降维的同时考虑类别信息。通过该算法得到的线性组合可以用来作为一个线性分类器或者实现降维。
基本思想
线性判别分析的基本思想是:将高维的模式样本投影到低维最佳矢量空间,以达到抽取重要分类信息和压缩特征空间维度的效果,投影后保证模式样本在新的子空间有最大的类间距离、最小的类内距离,即模式在该空间中有最佳的可分离性。理论和特征脸里用到的Eigenfaces有相似之处,都是对原有数据进行整体降维映射到低维空间的方法,fisherfaces和Eigenfaces都是从数据整体入手而不同于LBP提取局部纹理特征。
对降维后的样本使用Fisher线性判别方法,确定一个最优的投影方向,构造一个一维的体征空间,将多维的人脸图像投影到 fisherfaces特征空间,利用类内样本数据形成一组特征向量,这组特征向量就代表了人脸的特征。
我们知道,该算法是在样本数据映射到另外一个特征空间后,将类内距离最小化,类间距离最大化。LDA算法可以用作降维,该算法的原理和PCA算法很相似,因此LDA算法也同样可以用在人脸识别领域。通过使用PCA算法来进行人脸识别的算法称为特征脸法,而使用LDA算法进行人脸识别的算法称为费舍尔脸法。
LDA和PCA相比:
相同:1、在降维的时候,两者都使用了矩阵的特征分解思想;2、两者都假设数据符合高斯分布。不同:1、LDA是有监督的降维方法,而PCA是无监督的。2、如果说数据是k维的,那么LDA只能降到(k-1)维度,而PCA不受此限制。3、从数学角度来看,LDA选择分类性能最好的投影方向,而PCA选择样本投影点具有最大方差的方向。Fisherfaces算法和Eigenfaces算法相比:
相同:两者均可以对数据进行降维;两者在降维时均使用了矩阵特征分解的思想。
不同:Fisherfaces是有监督的降维方法,而是Eigenfaces无监督的降维方法;Fisherfaces除了可以用于降维,还可以用于分类。
值得一提的是,FisherFace算法识别的错误率低于哈佛和耶鲁人脸数据库测试的Eigenfaces识别结果。
Fisherface算法流程
获得人脸图像数据,然后求出人脸的均值。
观察各个人脸的特征值。
进行人脸鉴定,观察人脸特征,判断是否是个人。
最后进行人脸识别。
3、LBPH(Local Binary Patter Histogram)算法
Local Binary Patterns Histograms即LBP特征的统计直方图,LBPH将LBP(局部二值编码)特征与图像的空间信息结合在一起。如果直接使用LBP编码图像用于人脸识别。其实和不提取LBP特征区别不大,因此在实际的LBP应用中,一般采用LBP编码图像的统计直方图作为特征向量进行分类识别。
原始的LBP算子定义为在33的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于或等于中心像素值,则该像素点的位置被标记为1,否则为0。这样,33邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数即LBP码,共256种),即得到该窗口中心像素点的LBP值,并用这个值来反映该区域的纹理特征。
LBPH的维度: 采样点为8个,如果用的是原始的LBP或Extended LBP特征,其LBP特征值的模式为256种,则一幅图像的LBP特征向量维度为:64256=16384维,而如果使用的UniformPatternLBP特征,其LBP值的模式为59种,其特征向量维度为:6459=3776维,可以看出,使用等价模式特征,其特征向量的维度大大减少,这意味着使用机器学习方法进行学习的时间将大大减少,而性能上没有受到很大影响。
基本思想
建立在LBPH基础上的人脸识别法基本思想如下:首先以每个像素为中心,判断与周围像素灰度值大小关系,对其进行二进制编码,从而获得整幅图像的LBP编码图像;再将LBP图像分为个区域,获取每个区域的LBP编码直方图,继而得到整幅图像的LBP编码直方图,通过比较不同人脸图像LBP编码直方图达到人脸识别的目的,其优点是不会受到光照、缩放、旋转和平移的影响。
LBPH算法“人”如其名,采用的识别方法是局部特征提取的方法,这是与前两种方法的最大区别。
LBPH 算法流程
LBP特征提取:根据上述的均匀LBP算子处理原始图像;
LBP特征匹配(计算直方图):将图像分为若干个的子区域,并在子区域内根据LBP值统计其直方图,以直方图作为其判别特征。
4、算法的复现代码
1)、EigenFaces算法
#encoding=utf-8
import numpy as np
import cv2
import os
class EigenFace(object):
def __init__(self,threshold,dimNum,dsize):
selfthreshold = threshold # 阈值暂未使用
selfdimNum = dimNum
selfdsize = dsize
def loadImg(self,fileName,dsize):
‘‘‘
载入图像,灰度化处理,统一尺寸,直方图均衡化
:param fileName: 图像文件名
:param dsize: 统一尺寸大小。元组形式
:return: 图像矩阵
‘‘‘
img = cv2imread(fileName)
retImg = cv2resize(img,dsize)
retImg = cv2cvtColor(retImg,cv2COLOR_RGB2GRAY)
retImg = cv2equalizeHist(retImg)
# cv2imshow(‘img’,retImg)
# cv2waitKey()
return retImg
def createImgMat(self,dirName):
‘‘‘
生成图像样本矩阵,组织形式为行为属性,列为样本
:param dirName: 包含训练数据集的图像文件夹路径
:return: 样本矩阵,标签矩阵
‘‘‘
dataMat = npzeros((10,1))
label = []
for parent,dirnames,filenames in oswalk(dirName):
# print parent
# print dirnames
# print filenames
index = 0
for dirname in dirnames:
for subParent,subDirName,subFilenames in oswalk(parent+’/’+dirname):
for filename in subFilenames:
img = selfloadImg(subParent+’/’+filename,selfdsize)
tempImg = npreshape(img,(-1,1))
if index == 0 :
dataMat = tempImg
else:
dataMat = npcolumn_stack((dataMat,tempImg))
labelappend(subParent+’/’+filename)
index += 1
return dataMat,label
def PCA(self,dataMat,dimNum):
‘‘‘
PCA函数,用于数据降维
:param dataMat: 样本矩阵
:param dimNum: 降维后的目标维度
:return: 降维后的样本矩阵和变换矩阵
‘‘‘
# 均值化矩阵
meanMat = npmat(npmean(dataMat,1))T
print ‘平均值矩阵维度’,meanMatshape
diffMat = dataMat-meanMat
# 求协方差矩阵,由于样本维度远远大于样本数目,所以不直接求协方差矩阵,采用下面的方法
covMat = (diffMatTdiffMat)/float(diffMatshape[1]) # 归一化
#covMat2 = npcov(dataMat,bias=True)
#print ‘基本方法计算协方差矩阵为’,covMat2
print ‘协方差矩阵维度’,covMatshape
eigVals, eigVects = nplinalgeig(npmat(covMat))
print ‘特征向量维度’,eigVectsshape
print ‘特征值’,eigVals
eigVects = diffMateigVects
eigValInd = npargsort(eigVals)
eigValInd = eigValInd[::-1]
eigValInd = eigValInd[:dimNum] # 取出指定个数的前n大的特征值
print ‘选取的特征值’,eigValInd
eigVects = eigVects/nplinalgnorm(eigVects,axis=0) #归一化特征向量
redEigVects = eigVects[:,eigValInd]
print ‘选取的特征向量’,redEigVectsshape
print ‘均值矩阵维度’,diffMatshape
lowMat = redEigVectsTdiffMat
print ‘低维矩阵维度’,lowMatshape
return lowMat,redEigVects
def compare(self,dataMat,testImg,label):
‘‘‘
比较函数,这里只是用了最简单的欧氏距离比较,还可以使用KNN等方法,如需修改修改此处即可
:param dataMat: 样本矩阵
:param testImg: 测试图像矩阵,最原始形式
:param label: 标签矩阵
:return: 与测试最相近的图像文件名
‘‘‘
testImg = cv2resize(testImg,selfdsize)
testImg = cv2cvtColor(testImg,cv2COLOR_RGB2GRAY)
testImg = npreshape(testImg,(-1,1))
lowMat,redVects = selfPCA(dataMat,selfdimNum)
testImg = redVectsTtestImg
print ‘检测样本变换后的维度’,testImgshape
disList = []
testVec = npreshape(testImg,(1,-1))
for sample in lowMatT:
disListappend(nplinalgnorm(testVec-sample))
print disList
sortIndex = npargsort(disList)
return label[sortIndex[0]]
def predict(self,dirName,testFileName):
‘‘‘
预测函数
:param dirName: 包含训练数据集的文件夹路径
:param testFileName: 测试图像文件名
:return: 预测结果
‘‘‘
testImg = cv2imread(testFileName)
dataMat,label = selfcreateImgMat(dirName)
print ‘加载标签’,label
ans = selfcompare(dataMat,testImg,label)
return ans
if __name__ == ‘__main__’:
eigenface = EigenFace(20,50,(50,50))
print eigenfacepredict(‘d:/face’,’D:/face_test/1bmp’)2)、FisherFaces算法
#encoding=utf-8
import numpy as np
import cv2
import os
class FisherFace(object):
def __init__(self,threshold,k,dsize):
selfthreshold = threshold # 阈值,暂未使用
selfk = k # 指定投影w的个数
selfdsize = dsize # 统一尺寸大小
def loadImg(self,fileName,dsize):
‘‘‘
载入图像,灰度化处理,统一尺寸,直方图均衡化
:param fileName: 图像文件名
:param dsize: 统一尺寸大小。元组形式
:return: 图像矩阵
‘‘‘
img = cv2imread(fileName)
retImg = cv2resize(img,dsize)
retImg = cv2cvtColor(retImg,cv2COLOR_RGB2GRAY)
retImg = cv2equalizeHist(retImg)
# cv2imshow(‘img’,retImg)
# cv2waitKey()
return retImg
def createImgMat(self,dirName):
‘‘‘
生成图像样本矩阵,组织形式为行为属性,列为样本
:param dirName: 包含训练数据集的图像文件夹路径
:return: 包含样本矩阵的列表,标签列表
‘‘‘
dataMat = npzeros((10,1))
label = []
dataList = []
for parent,dirnames,filenames in oswalk(dirName):
# print parent
# print dirnames
# print filenames
#index = 0
for dirname in dirnames:
for subParent,subDirName,subFilenames in oswalk(parent+’/’+dirname):
for index,filename in enumerate(subFilenames):
img = selfloadImg(subParent+’/’+filename,selfdsize)
tempImg = npreshape(img,(-1,1))
if index == 0 :
dataMat = tempImg
else:
dataMat = npcolumn_stack((dataMat,tempImg))
dataListappend(dataMat)
labelappend(subParent)
return dataList,label
def LDA(self,dataList,k):
‘‘‘
多分类问题的线性判别分析算法
:param dataList: 样本矩阵列表
:param k: 投影向量k的个数
:return: 变换后的矩阵列表和变换矩阵
‘‘‘
n = dataList[0]shape[0]
W = npzeros((n,selfk))
Sw = npzeros((n,n))
Sb = npzeros((n,n))
u = npzeros((n,1))
N = 0
meanList = []
sampleNum = []
for dataMat in dataList:
meanMat = npmat(npmean(dataMat,1))T
meanListappend(meanMat)
sampleNumappend(dataMatshape[1])
dataMat = dataMat-meanMat
sw = dataMatdataMatT
Sw += sw
print ‘Sw的维度’,Swshape
for index,meanMat in enumerate(meanList):
m = sampleNum[index]
u += mmeanMat
N += m
u = u/N
print ‘u的维度’,ushape
for index,meanMat in enumerate(meanList):
m = sampleNum[index]
sb = m(meanMat-u)(meanMat-u)T
Sb += sb
print ‘Sb的维度’,Sbshape
eigVals, eigVects = nplinalgeig(npmat(nplinalginv(Sw)Sb))
eigValInd = npargsort(eigVals)
eigValInd = eigValInd[::-1]
eigValInd = eigValInd[:k] # 取出指定个数的前k大的特征值
print ‘选取的特征值’,eigValIndshape
eigVects = eigVects/nplinalgnorm(eigVects,axis=0) #归一化特征向量
redEigVects = eigVects[:,eigValInd]
print ‘变换矩阵维度’,redEigVectsshape
transMatList = []
for dataMat in dataList:
transMatListappend(redEigVectsTdataMat)
return transMatList,redEigVects
def compare(self,dataList,testImg,label):
‘‘‘
比较函数,这里只是用了最简单的欧氏距离比较,还可以使用KNN等方法,如需修改修改此处即可
:param dataList: 样本矩阵列表
:param testImg: 测试图像矩阵,最原始形式
:param label: 标签矩阵
:return: 与测试最相近的图像文件夹,也就是类别
‘‘‘
testImg = cv2resize(testImg,selfdsize)
testImg = cv2cvtColor(testImg,cv2COLOR_RGB2GRAY)
testImg = npreshape(testImg,(-1,1))
transMatList,redVects = fisherfaceLDA(dataList,selfk)
testImg = redVectsTtestImg
print ‘检测样本变换后的维度’,testImgshape
disList = []
testVec = npreshape(testImg,(1,-1))
sumVec = npmat(npzeros((selfdsize[0]selfdsize[1],1)))
for transMat in transMatList:
for sample in transMatT:
disListappend( nplinalgnorm(testVec-sample))
print disList
sortIndex = npargsort(disList)
return label[sortIndex[0]/9]
def predict(self,dirName,testFileName):
‘‘‘
预测函数
:param dirName: 包含训练数据集的文件夹路径
:param testFileName: 测试图像文件名
:return: 预测结果
‘‘‘
testImg = cv2imread(testFileName)
dataMat,label = selfcreateImgMat(dirName)
print ‘加载标签’,label
ans = selfcompare(dataMat,testImg,label)
return ans
if __name__==“__main__”:
fisherface = FisherFace(10,20,(20,20))
ans = fisherfacepredict(‘d:/face’,’d:/face_test/8bmp’)
print ans3)、LBPH算法
#encoding=utf-8
import numpy as np
import os
import cv2
class LBP(object):
def __init__(self,threshold,dsize,blockNum):
selfdsize = dsize # 统一尺寸大小
selfblockNum = blockNum # 分割块数目
selfthreshold = threshold # 阈值,暂未使用
def loadImg(self,fileName,dsize):
‘‘‘
载入图像,灰度化处理,统一尺寸,直方图均衡化
:param fileName: 图像文件名
:param dsize: 统一尺寸大小。元组形式
:return: 图像矩阵
‘‘‘
img = cv2imread(fileName)
retImg = cv2resize(img,dsize)
retImg = cv2cvtColor(retImg,cv2COLOR_RGB2GRAY)
retImg = cv2equalizeHist(retImg)
# cv2imshow(‘img’,retImg)
# cv2waitKey()
return retImg
def loadImagesList(self,dirName):
‘‘‘
加载图像矩阵列表
:param dirName:文件夹路径
:return: 包含最原始的图像矩阵的列表和标签矩阵
‘‘‘
imgList = []
label = []
for parent,dirnames,filenames in oswalk(dirName):
# print parent
# print dirnames
# print filenames
for dirname in dirnames:
for subParent,subDirName,subFilenames in oswalk(parent+’/’+dirname):
for filename in subFilenames:
img = selfloadImg(subParent+’/’+filename,selfdsize)
imgListappend(img) # 原始图像矩阵不做任何处理,直接加入列表
labelappend(subParent+’/’+filename)
return imgList,label
def getHopCounter(self,num):
‘‘‘
计算二进制序列是否只变化两次
:param num: 数字
:return: 01变化次数
‘‘‘
binNum = bin(num)
binStr = str(binNum)[2:]
n = len(binStr)
if n = center)(1扩展知识:人脸识别算法研究的难点
人脸识别算法研究已久,在背景简单的情形下,大部分算法都能很好的处理。但是,人脸识别的应用范围颇广,仅是简单图像测试,是远远不能满足现实需求的。所以人脸识别算法还是存在很多的难点。
光照
光照问题是机器视觉中的老问题,在人脸识别中的表现尤为明显,算法未能达到使用的程度。
姿态
与光照问题类似,姿态问题也是人脸识别研究中需要解决的一个技术难点。针对姿态的研究相对比较少,多数的人脸识别算法主要是针对正面,或接近正面的人脸图像,当发生俯仰或者左右侧而比较厉害的情况下,人脸识别算法的识别率也将会急剧下降。
遮挡
对于非配合情况下的人脸图像采集,遮挡问题是一个非常严重的问题,特别是在监控环境下,往往被监控对象都会带着眼镜﹑帽子等饰物,使得被采集出来的人脸图像有可能不完整,从而影响了后面的特征提取与识别,甚至会导致人脸识别算法的失效。
年龄变化
随着年龄的变化,面部外观也在变化,特别是对于青少年,这种变化更加的明显。对于不同的年龄段,人脸识别算法的识别率也不同。
图像质量
人脸图像的来源可能多种多样,由于采集设备的不同,得到的人脸图像质量也不同,特别是对于那些低分辨率﹑噪声大﹑质量差的人脸图像如何进行有效的人脸识别是个需要关注的问题。同样的,对于高分辨图像,对人脸识别算法的影响也需要进一步研究。
样本缺乏
基于统计学习的人脸识别算法是人脸识别领域中的主流算法,但是统计学习方法需要大量的培训。由于人脸图像在高维空间中的分布是一个不规则的流行分布,能得到的样本只是对人脸图像空间中的一个极小部分的采样,如何解决小样本下的统计学习问题有待进一步的研究。
大量数据
传统人脸识别算法如PCA、LDA等在小规模数据中可以很容易进行训练学习。但是对于大量数据,这些方法其训练过程难以进行,甚至有可能崩溃。
大规模人脸识别
随着人脸数据库规模的增长,人脸算法的性能将呈现下降。
在当前利率市场化、互联网金融蓬勃发展、经济新常态三大因素形成共振的历史转折点上,我国商业银行经营模式面临着全新的变革。如何在精细化经营管理的基础上为客户提供更优质、更安全的服务体验,成为各商业银行竞争的焦点。近年来,云计算、物联网和人工智能技术变革式发展,相关应用百花齐放,对“大数据”资源的整合利用与智能化发展成为了商业银行提高“内力”的修炼法门。人脸信息有着不可复制、不可**、简便直观等优点,是大数据时代各商业银行应储备和发掘价值的重要战略资源。而随着技术变革和应用的普及,建设大规模、分布式人脸数据库及识别系统的成本不断降低,识别的精度不断提高。可以预见,人脸识别技术在商业银行领域的潜在价值将被不断发掘提升,在保障服务安全性、节约客户时间、提升客户体验、整合与挖掘数据资源等方面具备广泛的应用前景。
人脸识别技术概述
人脸识别技术是以身份检索或校验为目标,通过从给定的静态或动态图像中提取人脸信息等手段,与数据库中已知身份人脸进行匹配的过程。由于受到光照、表情、遮挡、朝向等干扰因素的影响,与其他基于身份z、虹膜、掌纹、指纹等技术手段相比,人脸识别技术的准确率相对较低,但其采集方式最为友好:无须当事人配合,甚至在其意识不到的情况下,就完成了对人脸信息的采集与识别。因此,人脸识别技术在过去的四十多年中一直是人工智能领域的热点研究课题,至今已逐渐走向成熟,已经应用于反恐、安防、门禁等领域,近年来开始向教育、金融等领域推广。
根据应用场景的不同,人脸识别可分为针对二维图像的人脸识别、针对监控视频的人脸识别、针对近红外、热红外成像或素描等的多模态人脸识别和针对深度信息的三维人脸识别等。对于上述各种数据输入类型,均有来自学术界、业界的研究人员提出了基于不同假设、不同模型、不同学科背景的人脸识别处理方法。经归纳,这些方法有类似的处理步骤,主要包括以下几类:一是人脸检测。解决“有几张脸、脸在哪”的问题,即从或视频中检测并确定人脸的位置,并将其分离。二是人脸跟踪(针对视频人脸)。解决识别人脸“从哪来、到哪去”的问题,对检测到的每一张脸在视频各帧中进行跟踪,如出现遮挡应在遮挡结束后恢复跟踪,比如两张人脸交错而过应不出现混淆。三是人脸规范化。解决“鼻子、眼睛、嘴巴位置对得上”的问题,具体 *** 作包括预处理、归一化、人脸标定等。四是人脸识别。即解决“这个人是谁”(检索)、“这个人是不是某客户”(校验)的问题。
在建立人脸数据库及识别系统时,需要对人脸数据进行训练并建模,如果数据库动态更新还将涉及到在线学习等内容;识别人脸时,要把须识别的人脸与数据库中已有的人脸进行对比,判断二者相似程度,并按预先设定的标准进行检索或校验。人脸识别有多种方法,如:基于几何特征、基于子空间映射降维、基于模板、基于模型、基于神经网络等方法。
当前,基于“深度学习”的方法在一些算法竞赛中取得了很高的识别准确率,并迅速在业界投入应用。深度学习并不特指某一个算法,而是SparseCoding、RBM、深信度网络等技术方法的总称。作为一类基于神经网络的方法,根据认知心理学,其主要思想是模拟人类大脑神经的信号传递。与传统神经网络模型2~3层训练层不同,深度学习的训练层数可达8~9层。因此在2006年该思想被提出之初,海量的训练数据和很高的计算复杂度超出了当时硬件的承受能力。但由于计算机硬件性能的提升,深度学习算法在准确率方面的优势迅速凸显。目前,谷歌、微软、百度等公司都成立了专门的部门对深度学习技术进行研究开发,市场上也涌现出一批基于深度学习的人脸识别团队。目前,基于深度学习的方法已经成为人脸识别技术领域的重要发展趋势和方向。
此外,一些人脸分析技术也随着人脸识别技术的发展得到了普及和优化,包括对表情、年龄、性别等属性的判别,使基于这些属性信息的数据挖掘聚类、分类等大数据分析应用成为可能。人脸识别技术在实际应用中,还可以考虑与其他技术或辅助手段相结合,如结合深度信息实现活体检测,判断是真人还是照片等。
人脸识别技术在商业银行的应用
人脸识别技术当前主要应用于公共安全领域,如:识别追踪恐怖分子、布控犯罪率高发地区、机场安检、司机驾照验证、视频监控等。然而,人脸识别技术在商业银行同样存在着巨大的发展空间。未来,商业银行可以从安全防控和业务推动两方面着手,对人脸识别技术在银行落地进行全面部署和实施。
安全防控类应用场景
银行的安防难点之一是在动态场景下完成多个移动目标的实时监测。人脸识别技术在银行等人员密集的区域可以有效实现实时多目标在线检索和比对,实际应用效果良好。而且人脸信息易于采集、难以复制和**、自然直观,因此人脸识别技术可成为商业银行安全防控手段的优先选择。在安全防控领域,银行人脸识别技术的应用场景有以下几类。
营业场所人员影像控制。在商业银行的营业场所,人脸识别可以通过“伪装识别”进一步确保银行经营的安全性。通过识别营业场所中面部遮挡(如戴墨镜、口罩)的人员,系统可实时与警方数据库中身份数据进行比对,一旦发现异常情况,可以迅速启动黑名单预警机制或采取联网报警措施。此外,还可以将采集到的嫌疑人面部照片提交公安机关,为后续预警和案件侦破提供有力证据。
业务库区人员身份识别。银行经营过程中对安全性的极高要求使其身份验证技术较其他领域更为严格。例如,在金库、押钞车、ATM机加钞室等特殊环境下,许多传统的身份验证方法均难以满足要求,例如验证密码容易被盗、指纹识别可被复制、门禁卡容易遗失。带有活体检测功能的人脸识别技术可克服上述缺陷,进一步提升银行安防与保密安全性。
ATM机智能识别报警。在以ATM机为代表的自助设备应用场景下,人脸识别技术同样具有广泛的应用空间。如:通过ATM机内置摄像头识别取款人身份,与yhk所有人信息进行比对,防止盗刷现象;识别伪装或故意遮挡面部的人员身份,与警方数据库进行比对,保证取款人安全。当上述情况发生时,系统可触发预先设定的报警规则,最大程度地保护银行客户的资金和人身安全。此外,人脸识别系统还可监测客户遗留财物的情况,实时提醒,提升用户体验。
业务推动类应用场景
当前人脸识别技术在银行业务推动领域的应用方兴未艾,各商业银行仍处于积极探索阶段。从商业银行业务推动的视角来看,人脸识别具有如下应用方式。
远程开户与登录。作为银行开户时的重要流程,面签不仅耗费客户时间,而且占用银行人力资源。通过用人脸识别替代传统的肉眼辨识工作,不仅可以节约时间和成本,完成从填写个人资料到面鉴开户再到取卡、激活的全流程 *** 作,提升用户体验,而且可以在全网范围内对客户身份及信用背景进行识别和关联,避免人工面签时受到心理、经验等因素的影响。此外,在客户通过手机银行或网上银行进行远程登录时,可以通过人脸识别代替传统的密码输入 *** 作,完成客户查询账单、xyk还款、个人卡间互转、定活期互转等个人资金划转等功能,避免密码被盗或遗忘等现象。
客户个性化服务。当前商业银行竞争日趋激烈,对客户资源的争夺已由产品导向型转化为服务导向型。通过定制化的个性服务提升客户体验将成为未来商业银行竞争的重要手段。运用人脸识别技术可以很好地完成对客户的识别和精准信息搜索,当某位客户进入营业网点后,可通过人脸识别技术快速判断客户是否为该行现有客户,准确获取客户姓名、年龄等信息,方便网点工作人员拉近与客户的距离。此外,通过对客户以往产品购买、交易流水、业务习惯等行为模式的提取和分析,进一步有针对性地为客户进行产品推介,从而有效提升营销成功率,与客户实现共赢。
人脸识别贷款发放。在银行贷款发放过程中,为有效杜绝冒名贷款、恶意骗贷等现象,可考虑引入人脸识别技术进行防控。基于贷款客户已在网点录入的人脸信息,通过数据共享,可以实现客户在全网点内的身份识别和验证,真正做到身份信息与银行信息的精准对应,实现贷款客户身份认证信息化、智能化、网络化管理。
综上可知,人脸识别技术在商业银行应用前景广阔。结合我国商业银行的实际经营情况,建议各银行根据自身业务发展,以业务推动为抓手,优先开展人脸识别技术在客户服务领域的部署与实施。这是因为:一方面从客户角度看,人脸识别技术直接应用于客户服务,能够解决客户最迫切的需求,给予客户最直观的服务体验,有助于快速提升客户满意度;另一方面从商业银行角度看,面向客户服务的人脸识别应用可以快速为银行创造利润,效果明显,可以为人脸识别在银行的全面落地奠定良好基础。
发展建议
人脸识别属于计算机科学应用研究而非基础理论,对不同算法进行比较和评价的依据是实验和实践。
当前,业界较为通行的人脸识别算法基准有LFW(LabeledFacesintheWild)和 FRVT(FaceRecognitionVendorTest)。LFW数据库由美国马萨诸塞大学阿默斯特分校建立,包含13,000余张,多数来自网络而非实验室环境。在数据库中,对同一个人物有的存在多张,有的只存在一张。由于均为日常环境下正常拍摄所得,实用性强,测试难度系数高,实验结果有说服力。学术界和业界分组别参与该项基准测试。FRVT由美国国家标准及技术研究所组织,目标为测试业界人脸识别算法的性能。该基准测试使用一个包含160万人的大数据库,不定期进行测试,最近的一次是在2013年,仅对业界开放。
国内商业银行在发展人脸识别技术具体应用落地时,除了考虑对LFW和FRVT两个业界权威标准进行参考外,还应立足于对一些实际情况的考量,建议可以优先选择国内的技术产品。一是因为国际上的算法普遍趋同,国外产品的实现效果与国内相比无显著性差异,但价格往往高于国内。二是考虑尽职调查和个性化定制谈判,国内的接洽成本远低于国外。三是监管风险,鉴于商业银行的数据属于核心金融数据,应充分考虑在监管要求下的用户数据安全,并尽可能规避国内外法律体系差异引起的法律风险。四是硬件约束,如果使用国外云服务API,可能出现跨国网络延迟的问题。五是在算法实现方面,国外技术训练数据集中黄种人的较少,可能影响应用效果。六是考虑产品售后服务和技术支持,国内产品的服务响应速度与国外相比存在较大优势。鉴于上述原因,国内商业银行在应用人脸识别技术时可优先考虑从国内领先的服务供应商中进行选择。
此外,在一些具体应用的功能设计方面,还应遵循相关监管政策与行业规范。以远程开户业务为例,央行2015年8月下发的《关于银行业金融机构远程开立人民币银行账户的指导意见(征求意见稿)》中要求:“银行采用现代化的安全技术手段,利用政府部门数据库、本行自身数据库信息、商业化数据库信息,通过客户信息交叉验证、其他银行账户交叉验证,电话回访、邮寄资料等方式,构建安全可靠的远程开户客户身份识别机制;同时,还可根据开立账户性质采取同一法人不同分支机构见证、通过第三方识别客户身份、上门查验身份z明文件等方式进行客户身份信息核实、开户银行承担客户身份识别责任。”将银行远程开户业务纳入监管,并明确银行是识别客户身份的责任主体。央行2015年12月25日发布的《关于改进个人银行账户服务加强账户管理的通知》将政策落地,其中明确“提供个人银行账户开立服务时,有条件的银行可探索将生物特征识别技术和其他安全有效的技术手段作为核验开户申请人身份信息的辅助手段。”人脸识别技术作为生物特征识别技术家族中的重要成员,预计将成为一种主流的备选方案。而随着业务发展,未来可能还会再出台更加细化的规范或指引。因此,各商业银行应注意加强对新政策、新规定进行学习,并与相关政府机构、监管部门保持沟通,从而在设计和实施相关流程与系统时做到合规。
随着硬件设备的快速升级和算法技术的不断发展,人脸识别技术逐步从学术研究走向业界应用,并展现出强大的生命力。人脸信息具有易于采集、难以复制和**、自然直观等优点。人脸识别技术为商业银行安全防控和业务推动等应用模式提供了新的技术选择,并进一步开拓了业务运营模式。我国商业银行可以考虑从业务推动类服务入手,在借鉴国内外权威标准的基础上,优先选择国内有竞争力的服务提供商,有步骤、全方位地推动人脸识别技术在商业银行的落地实施。
在银行工作一个月多少钱
以上就是关于人脸识别系统的工作原理是什么全部的内容,包括:人脸识别系统的工作原理是什么、目前的人脸识别技术的原理是什么、人脸识别软件系统是怎样运作的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)