APP下载

基于GPU加速的人脸识别实现

2018-07-12李刚

电脑知识与技术 2018年12期
关键词:人脸检测人脸识别

李刚

摘要:Emgu CV是.NET平台下对OpenCV图像处理库的封装,可以实现人脸识别的判断。该文着重讨论了在.NET下基于Emgu CV利用GPU加速技术实现了静态图像的人脸检测、人脸识别、人脸比对,以及视频流中的人脸识别。该软件获得我校技术进步二等奖,实验结果证明该程序运行稳定,结果可靠,识别速度快。

关键词:EMGUCV,人脸检测,人脸识别

中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2018)12-0185-03

Abstract: Emgu CV is OpenCV image processing library encapsulation on DotNet platform, used in face recognition method. This article emphatically introduced EmguCV graphics library applied in face detection, face match, and face recognition in image and in video, with the assist of GPU speeding technology. This implemented procedure was granted 2nd prize in the Advanced Technologies in Huaiyin Normal University. Long-running demos show the procedure worked stably, reliably and quickly.

Key words: EmguCV; Face Detection; Face Recognition

1 背景

人臉识别作为一种新兴的生物特征识别技术,识别精确度高,使用方便,识别速度快,不易仿冒,与虹膜识别、指纹扫描、掌形扫描等技术相比,人脸识别技术在应用方面具有独到的优势,基础资料易于获得,成本低,易于推广使用,企业用户接受程度非常高。该文基于EmguCV图像库设计实现了人脸识别的检测与识别、登录认证,以及在视频流中的人脸识别方法。

2 实现方法

Emgu是一个跨平台的、封装OpenCV的图像处理库,允许OpenCV函数调用。原生兼容的语言有C#、VB、C++、Python等等,交叉编译器可以在Mono编译并运行在Windows、Linux、Mac OS X、iPhone、iPad和Android设备上。众所周知,Mono的好处是,它可以被交叉编译,因此能够在任何平台上运行Mono支持,包括iOS、Android、Windows Phone、Mac OS X和Linux。Emgu完全由C#编写,已经花了很多的努力,有一个纯C#实现自头必须移植,而想要用C++实现,增加一个头文件就可以实现。当然,Emgu可以支持几个不同的语言,包括C#、VB.NET、C++和Python。Emgu cv的核心由四块组成(如图1所示),Emgu.Util.dll负责.net的接口和封装,Emgu.CV.dll负责图像处理,Emgu.CV.Ul.dll负责UI初始化,Emgu CV.GPU.dll负责调用GPU进行图像处理。

2.1 调用GPU打开摄像头

NVIDIA提供了调用GPU的CUDA核心的接口。在图像处理的过程中可以借助GPU进行加速,大大缩短了程序运行所需要的时间。GPU有着比CPU更佳的图形计算性能,CPU是通用运算器,而GPU更适合于浮点数运算。人脸识别算法使用了大量的浮点数运算,GPU的运算单元数量的优势会更加的明显(如表1所示)。目前只有G80、G92、G94、G96、GT200、GF100、GF110、GK100、GK104、GK107平台的NVidia显卡才能使用CUDA,工具集的核心是一个C语言编译器。G80中拥有128个单独的ALU,因此非常适合并行计算,而且数值计算的速度远远优于CPU。由于GPU的特点是处理密集型数据和并行数据计算,因此CUDA非常适合需要大规模并行计算的领域。目前CUDA除了可以用C语言开发,也已经提供FORTRAN的应用接口,未来可以预计CUDA会支持C++、Java、Python等各类语言。可广泛应用于图形动画、科学计算、地质、生物、物理模拟等领域。

2.2 人脸识别方法

Emgu CV提供了图像与编程语言交互的接口,可以方便地把图像转换为位图以及数据XML,便于采用多种算法来进行识别。

1)人脸检测

调用haarcascade_frontalface_default.xml图形库进行识别,建立200棵树,进行人脸识别的时候,GPU进行同步加速,起到加速识别的目的(如图2)。

2)灰度化

计算机的灰度(Gray scale)数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。但是,在数字图像领域之外,“黑白图像”也表示“灰度图像”,例如灰度的照片通常叫做“黑白照片”。在一些关于数字图像的文章中单色图像等同于灰度图像,在另外一些文章中又等同于黑白图像,通常情况下采用二值化法。二值化是图像分割的一种方法。在二值化图像的时候把大于某个临界灰度值的像素灰度设为灰度极大值,把小于这个值的像素灰度设为灰度极小值,从而实现二值化。根据阈值选取的不同,二值化的算法分为固定阈值和自适应阈值。 比较常用的二值化方法则有:双峰法、P参数法、迭代法和OTSU法等。

3)直方图算法

观察一个灰度图像,令[ni]表示灰度i出现的次数,图像中灰度为i 的像素的出现概率是[pxi=nii,i∈0,…L-1],[L]是图像中所有的灰度数,[n]是图像中所有的像素数, [p]实际上是图像的直方图,归一化到[0..1]。把[c] 作为对应于[p] 的累计概率函数, 定义为:[ci=j=0ipxj],[c] 是图像的累计归一化直方图。再创建一个形式为 [y=Tx] 的变化,对于原始图像中的每个值它就产生一个 [y],这样 [y] 的累计概率函数就可以在所有值范围内进行线性化,转换公式定义为:[yi=Txi=ci]。T将不同的等级映射到 [0..1] 域,为了将这些值映射回它们最初的域,需要在结果上应用下面的简单变换:[y′i=yi?max-min+min]。上面描述了灰度图像上使用直方图均衡化的方法,但是通过将这种方法分别用于图像RGB颜色值的红色、绿色和蓝色分量,从而也可以对彩色图像进行处理。 把彩色图像转换为灰度图像,再利用直方图算法进行比对,比较两次识别的人脸是否相似,实现人脸识别的认证登陆,如图3所示。

4)近似算法

近似算法的常用设计方法有贪心法,线性规划、半正定规划的松弛和取整,随机算法等,该文采用随机算法。随机化算法(randomized algorithm),是这样一种算法,在算法中使用了随机函数,且随机函数的返回值直接或间接的影响了算法的执行流程或执行结果,就是将算法在运行的过程中的某一步或某几步涉及一个随机决策,或者说其中的一个决策依赖于某种随机事件。利用随机算法可以弥补摄像头像素的不足,摄像头普遍情况下只有130万像素,分辨率为1280*720,转换为灰度图像之后进行直方图算法比对时可能会由于精度不够而产生误差,所以采用随机算法进行近似填充,提高图像的分辨率。图像的分辨率对于识别的正确率有不可忽视的影响,实验结果表明低分辨率情况下人脸识别的准确率不足80%。

5)视频流提取

视频流(Video Stream)是视频的组成形式。EMGUCV在视频流中提取图片的方法,以每秒30帧的视频为例(如图4所示),通常视频由许多帧图片组成,这就是为什么对视频中的人脸进行识别的时候需要提取视频流的原因。例如,系统存储传入MPEG格式的视频,同时创建一个查找表的逻辑块地址(logic block address)的内存位置存储帧的视频。系统采用硬件比较器快速比较MPEG流内的帧起始位置,从而创建查找表。MPEG流支持快速随机存取到MPEG流逻辑的开始位置,系统存储查找表和相关的MPEG流在个人视频录像机(PVR)硬盘驱动器。系统使用查表快速访问的各个帧的起点。系统提供了MPEG帧的内容给MPEG减压器从而提供一个MPEG流。

2.3 开发应用体会

假设视频大小为720p(一般视频的质量),在当前标配的一般CPU和GPU性能下,则需要至少30MB的缓冲区空间进行人脸比对,否则将会容易造成缓冲区溢出,所以程序运行时峰值内存占用不宜超过100MB,这就需要为RAM不足的机器进行优化,以提高程序的健壮性与可移植性。

3 结束语

在当今社会信息安全问题备受人们的关注。自身安全和个人隐私保护成为这个时代的热门话题。基于密码、个人识别码、磁卡和钥匙等传统的安全措施已不能完全满足社会要求。在这样的背景下,人们把目光投向了生物特征识别技术,来进行身份的鉴别或确认。人脸识别作为一种新兴的生物特征识别技术,与复杂的虹膜识别、指纹扫描、掌形扫描等技术相比,人脸识别精确度高,识别速度快,不易仿冒,在企业应用与市场推广方面具有独到的优势,基础资料易于获得,成本低,使用方便,易于推广使用,企业用户接受程度非常高。

参考文献:

[1] 王映辉. 人脸识别:原理、方法与技术[M]. 北京: 科学出版社, 2010.

[2] Randomized algorithm[EB/OL]. 维基百科, http://en.wikipedia.org/wiki/Randomized_algorithm.

[3] 沈理, 刘翼光, 熊志勇. 人脸识别原理及算法——动态人脸识别系统研究[M]. 北京: 人民郵电出版社, 2014.

[4] Mark S Nixon. 特征提取与图像处理 [M] 2版. 北京: 电子工业出版社, 2010.

猜你喜欢

人脸检测人脸识别
人脸识别 等
揭开人脸识别的神秘面纱
基于(2D)2PCA-LBP 的人脸识别方法的研究
人脸识别在高校安全防范中的应用
基于人脸特征定位的SNS网站应用组件研究与设计
基于类独立核稀疏表示的鲁棒人脸识别
基于K-L变换和平均近邻法的人脸识别