所有提交的EM系统将被重定向到网上投稿系统.作者被要求将文章直接提交给网上投稿系统各自的日志。

使用OPENCL进行人脸识别

A.Geetha
金奈巴拉特大学。,印度泰米尔纳德邦
有关文章载于Pubmed谷歌学者

更多相关文章请访问国际电气、电子和仪器工程高级研究杂志

摘要

人脸识别是对人脸进行生物特征识别,并将图像与已知人脸库进行匹配。用来模拟上述问题的算法是特征人脸算法。本文所要实现的软件是OpenCL。OpenCL(打开计算Language)是一种用于跨cpu、gpu和其他处理器的通用并行编程的开放标准,具有可移植性,并提供对这些异构处理平台的强大功能的有效访问。OpenCL API具有识别设备、编译程序、发送和接收信息以及在所选设备上运行OpenCL程序的功能。在MSVS (Microsoft visual studio 2010)中使用AMD APP SDK(Advanced Micro Devices Accelerated Parallel Processing Software Development Kit)对系统进行了仿真。

关键字

人脸识别,OpenCL, Microsoft Visual Studio, EigenFaces

介绍

人脸识别系统是一种用于从数字图像或视频源的视频帧中自动识别或验证人的计算机应用程序。它是一种通过面部特征来识别人的能力。其中一种方法是从图像和面部数据库中比较选定的面部特征。它涉及到将感知到的模式与存储的熟悉面孔的表征进行比较。人脸识别一个值得注意的方面是其广泛的跨学科性质:在计算机识别和模式识别;生物识别与安全;多媒体处理;心理学和神经科学。人脸识别作为一种生物特征,从人类用来识别彼此的主要生物特征中获得了许多优势。一些最早的识别标记,即肖像,使用这种生物特征作为身份验证模式。此外,人们很容易接受和理解它,而且人类操作员很容易仲裁机器的决定——事实上,人脸图像经常被用作自动指纹识别系统的人类可验证的备份。 Face recognition has the advantage of ubiquity and of being universal over other major biometrics, in that everyone has a face and everyone readily displays the face.
最先进的技术是基于特征脸算法,该算法将一个人的面部特征映射到多维面部空间。计算机可以进行面部数据库搜索和/或执行实时,一对一或一对一的验证,具有前所未有的准确性和瞬间处理。用户只需查看网络摄像头,就可以安全地访问他们的电脑、移动设备或在线电子商务。神经网络被用于早期的人脸识别系统,但有了特征脸,计算机就不能轻易被照片或其他相似外表的人愚弄了。对这种可变性的约束或处理不当,不可避免地会导致识别失败。这些包括:
生理变化:面部表情变化;老化;个人外观(化妆,眼镜,面部毛发,发型,伪装)。采集几何变化:面部(面向摄像头)的尺度、位置和平面内旋转的变化,以及深度旋转(倾斜面向摄像头,或呈现侧面,而不是全正面)。
成像变化:光照变化;相机的变化;信道特性(特别是在广播或压缩图像中)。
目前人脸识别的主要挑战是处理深度旋转和广泛的光照变化,以及个人外观变化。然而,即使在良好的条件下,准确性也需要提高。人脸识别的许多应用已经被设想。到目前为止,商业应用只触及了潜在的表面。到目前为止,它们在处理姿势、年龄和灯光变化方面的能力有限,但随着处理这些效果的技术的发展,在许多领域都存在巨大的部署机会。
开放计算语言(OpenCL)是一种用于编写跨异构平台(包括中央处理器(cpu)、图形处理单元(gpu)和其他处理器)执行程序的框架。OpenCL包括一种用于编写内核(在OpenCL设备上执行的函数)的语言(基于C99),以及用于定义和控制平台的应用程序编程接口(api)。
Microsoft Visual Studio是微软开发的集成开发环境(IDE)。它用于开发控制台和图形用户界面应用程序,以及Windows窗体应用程序、网站、web应用程序和web服务,包括本地代码和托管代码,适用于Microsoft Windows、Windows Mobile、Windows CE、. net Framework、. net Compact Framework和Microsoft Silverlight支持的所有平台。Visual Studio通过语言服务支持不同的编程语言,这些语言服务允许代码编辑器和调试器(在不同程度上)支持几乎任何编程语言,前提是存在特定于语言的服务。内置语言包括C/ c++(通过Visual c++), VB。NET(通过Visual Basic .NET), c#(通过Visual c#)和f#(从Visual Studio 2010开始)。

方法

特征脸的生成
通过对描绘不同人脸的大量图像进行主成分分析(PCA)的数学过程,可以生成一组特征脸。非正式地说,特征脸可以被认为是一组“标准化的面部成分”,来自于对许多面部图片的统计分析。任何一张人脸都可以被认为是这些标准人脸的组合。例如,一个人的脸可能由平均脸加上特征脸1的10%,特征脸2的55%,甚至是特征脸3的-3%组成。值得注意的是,它不需要将许多特征脸组合在一起来实现大多数人脸的合理近似。此外,因为一个人的脸不是通过数字照片记录的,而是作为一个值列表(数据库中每个特征脸都有一个值),所以每个人的脸占用的空间要小得多。
所创建的特征面将显示为按特定模式排列的明暗区域。这种模式是指如何挑选出一张脸的不同特征来进行评估和评分。会有一个模式来评估对称性,如果有任何类型的面部毛发,发际线在哪里,或者评估鼻子或嘴巴的大小。其他特征脸具有不那么容易识别的模式,特征脸的图像可能看起来非常不像一张脸。

实际的实现

要创建一组特征脸,必须:
1.准备一个人脸图像训练集。组成训练集的图片应该在相同的光照条件下拍摄,并且必须标准化,使眼睛和嘴巴在所有图像中对齐。它们还必须重新采样到一个共同的像素分辨率(r × c)。每张图像都被视为一个向量,只需将原始图像中的像素行连接起来,就可以得到包含r × c个元素的单行。对于这个实现,假设训练集的所有图像都存储在一个矩阵t中,其中矩阵的每一行都是一张图像。
2.减去平均值。必须计算平均图像a,然后从T中的每个原始图像中减去。
3.计算协方差矩阵的特征向量和特征值。每个特征向量与原始图像具有相同的维数(分量数),因此可以将其本身视为图像。因此,这个协方差矩阵的特征向量称为特征面。它们是图像与平均图像不同的方向。通常这将是一个昂贵的计算步骤(如果可能的话),但特征脸的实际适用性源于有效地计算S的特征向量的可能性,而不需要显式地计算S,如下所述。
4.选择主成分。dxd协方差矩阵将得到D个特征向量,每个特征向量表示r × c维图像空间中的一个方向。保留相关特征值最大的特征向量(特征面)。
这些特征脸现在可以用来表示现有的和新的面孔:我们可以在特征脸上投射一个新的(均值减去)图像,从而记录新面孔与平均面孔的区别。与每个特征脸相关联的特征值表示训练集中的图像在该方向上与平均图像的差异程度。我们通过将图像投影到特征向量的子集上而丢失信息,但是我们通过保留那些具有最大特征值的特征面来最小化这种损失。例如,如果我们处理的是100 x 100的图像,那么我们将得到10,000个特征向量。在实际应用中,大多数面通常可以使用100到150个特征面上的投影来识别,因此10,000个特征向量中的大多数可以被丢弃。

计算特征向量

直接对图像的协方差矩阵进行主成分分析在计算上往往是不可行的。如果很小,比如100 x 100,则使用灰度图像,每张图像是10,000维空间中的一个点,协方差矩阵S是10,000 x 10,000 = 108个元素的矩阵。然而,协方差矩阵的秩受训练样本数量的限制:如果有N个训练样本,则特征值不为零的特征向量最多为N-1个。如果训练样本的数量小于图像的维数,主成分的计算更容易,如下所示。
设T为预处理过的训练样例的矩阵,其中每一列包含一张均值减去的图像。协方差矩阵可计算为S = TTT, S的特征向量分解由
图像
但是TTT是一个很大的矩阵,如果我们用特征值分解
图像
然后我们注意到,通过将方程两边都预先乘以T,我们得到
图像
这意味着,如果ui是TTT的特征向量,那么vi=Tui是s的特征向量。如果我们有300张100 x 100像素的图像的训练集,矩阵TTT是一个300 x 300的矩阵,这比10000 x 10000的协方差矩阵更易于管理。但是请注意,得到的向量vi没有归一化;如果需要正常化,则应作为额外步骤应用。

结论

为此,采用OpenCL对基于PCA的人脸识别算法进行了仿真。输入图像是数据库中存在的图像(这里是在相同光照条件下拍摄的5张样本图像)。如果输入图像与数据库中的样本图像匹配,则编译算法。程序不会因为不匹配而被编译。

未来的工作

可以使用建议的运行时环境和SDK实现其他几种算法。VB (Visual Basic)界面可以显示在项目一个弹出窗口的情况下,匹配或不匹配。实时人脸识别可以使用摄像机或网络摄像机来完成。

参考文献






全球科技峰会