静态识别

2024-09-26

静态识别(共6篇)

静态识别 篇1

引言

人脸是一个常见而复杂的视觉模式,人脸所反应的视觉信息在人与人的交流和交往中有着重要的作用和意义[1],世界各国对于人脸识别的研究方兴未艾,我国也已经有了较实用的人脸识别系统,人脸识别是指对一幅给定的人脸图像或人脸视频序列,从人脸库中寻找与之匹配的人脸图象。目前应用人脸信息的研究主要包括人脸识别、人脸跟踪、姿势估计、表情识别和图象检索等,这些研究在出入安全检查、视频监视、图象检索和视频编码应用中都有广泛的应用价值。按照图象来源的不同,人脸识别技术可分为2大类:静态人脸识别和动态人脸识别,目前研究较多的是静态人脸识别,即人脸来源位稳定的二维图象如照片。本文参考了近期国内外有关文献,归纳了用于静态人脸识别的常见方法。

常用的人脸识别试验库以美国军方的FERET库[2]最为权威,它包括多人种、多年龄段、各种表情变化、光照变化、姿态变化的图象,图像的数量和实验的人数也非常多,可以充分地验证人脸识别算法。目前尚没有专门测试人脸检测和定位算法的图像库。

1. 静态人脸识别方法

当人脸图象的来源是一幅静态图象时进行的人脸识别属于静态人脸识别。人脸识别算法包含2部分:

人脸定位和归一化(如图1),对于一个全自动的人脸识别系统,整个的识别过程可归纳为人脸检测与定位、特征提取和识别,如图2所示,这两个环节独立性很强,而在许多特定情况下,人脸检测与定位工作比较简单,而“特征提取与识别”环节得到了更为广泛和深入的研究。

1.1 人脸检测与定位

人脸检测是指[3]:给定静止或动态图象,判断其中是否有人脸;若有,将所有人脸从背景图象中分割出来,并确定每个人脸在图象中的大小和位置,人脸检测系统的输入是可能包含人脸的图象,输出是关于图象中是否存在人脸以及人脸的数目、位置、尺度等信息的参数化描述。

人脸检测的基本思想是用知识或统计的方法对人脸建模,比较所有可能的待检测区域与人脸模型的匹配度,从而得到可能存在人脸的区域。

1.2 特征提取和识别

高水平的识别工作一般需要复杂的处理过程,如将图象映射到表面,恢复为三维模型,进行模型匹配等,但基于二维的图象处理也可进行人脸识别,下面介绍常用的二种方法。

1.2.1 几何特征法

许多人也将几何特征法用于人脸识别中。例如:常用的几何特征有人脸的五官如眼睛、鼻子、嘴巴等的局部形状特征,脸型特征以及五官在脸上分布的几何特征。提取特征时往往通过人脸面部拓扑结构几何关系的先验知识。在这种基于几何特征的识别中,识别总归为特征矢量之间的匹配,基于欧式距离的判决是最常用的识别方法。

人脸由眼睛、鼻子、嘴巴、下巴等部件构成,正因为这些部件的形状、大小和结构上的各种差异才使得世界上每个人脸千差万别,因此对这些部件的形状和结构关系的几何描述,可以作为人脸识别的重要特征。采用几何特征进行正面人脸识别一般是通过提取人眼、口、鼻等重要特征点的位置和眼睛等重要器官的几何形状作为分类特征[4][5]。

基于几何特征的识别方法具有存储量小、对光照不敏感、简单且容易理解等优点。这种方法同样存在一些问题:(1)从图像中抽取稳定的特征比较困难;(2)对强烈表情变化和姿态变化鲁棒性较差;(3)造成部分信息丢失,适合于粗分类。

可变形模板方法[6][7][8]可以视为几何特征方法的一种改进,它是一种经典的模式识别方法,这种方法大多是用归一化互相关,直接计算两幅图象之间的匹配程度

最简单的人脸模板是将人脸看成一个椭圆,检测人脸也就是检测图像中的椭圆[9]。另一种办法是将人脸用一组独立的小模板表示,如眼睛模板、嘴巴模板、鼻子模板、眉毛模板和下巴模板等。而这些模板的获得必须利用各个特征的轮廓,而传统的基于边缘提取的方法很难获得较高的连续边缘。即使获得了可靠度高的边缘,也很难从中自动提取所需的特征量。为此,用弹性模板方法提取特征显示出其独到的优越性[10]。弹性模板有一组根据特征形状的先验知识设计的可调参数所定义。为了求出这组参数,需要利用图像的边缘、峰值、谷值和强度信息及特征形状的先验知识设计合适的能量函数。参数向能量减小方向调整,当能量达到最小时,这组参数对应的模板形状最符合特征形状。

其基本思想是:设计一个参数可调的器官模型(即可变形模板,如图3、图4所示),定义一个能量函数,通过调整模型参数使能量函数最小化,此时的模型参数即作为该器官的几何特征。

1.2.2 特征脸方法

这种方法的原理是PCA(Principal Component Analysis主分量分析法)[11]PCA用于特征选择和降低图象维数的一种通用方法,因此可以用K-L变换获取其正交K-L基底,对应其中较大特征值的基底具有与人脸相似的形状,因此,又称之为特征脸,得到人脸重要特征之后,要对其进行主成份分析(PCA),其具体的算法思想如下:

若抽样参加训练的人脸图像有M张,每张图像的维数是N*N,则可以分别表示为:x1、x2、x3、…、x M,那么平均脸可以表示为:

每张人脸和平均人脸的距离可以表示为:

假设矩阵A={d1,d2,d2,…,d M},特征脸需要做的就是找出矩阵的前Z个较大特征值的特征向量,但是一个N2*N2维的大矩阵,求这样一个矩阵的特征值计算量是非常大的。为此我们可以先求出的特征值与特征向量,然后求出

表示的特征向量,表示的特征向量,是的特征值,就是所指的特征脸。求出特征脸以后,所剩下的工作就是要对库中的人脸进行降维,由可以组成一个投影矩阵,表示为W={u1,u2,…,u Z-1},并进行降维:

由式子(4)得出所有人脸向量的降维向量。

基于特征脸的识别方法优点:它大大降低了原始空间的维数,在这个低维空间中可进行人脸检测和识别。Pent l a n d等人在人脸检测中使用了特征脸方法,得到的特征脸如图5所示:

缺点:这种方法对光照条件的改变较敏感。如果提供了在光照条件变化下的人脸图象,则投影矩阵保留的主要元素会因光照而改变。于是,投影矩阵中的点便不能被很好的分类,甚至会变得轮廓模糊。

作为特征脸技术的改进,可以将Fisher线性判断准则(Fisher Linear Discriminant,简写为FLD)应用于人脸识别。并对PCA和FLD进行了比较,结论是特征脸不能区分类内和类间变化的不同角色,而是将他们一视同仁;FLD克服了PCA的一个缺点;它可区分类内和类间的散布矩阵。

线性判断准则分析并不总是优于PCA。当每一类的样本数较小时,PCA的效果比FLD好。在很多领域,尤其是人脸识别领域,人们根本不知道不同分类的基本分布。所以,实际上是很难弄清楚已有的训练数据是否适用。他们的实验表明这种考虑是正确的,在一些实验中,PCA的效果比FLD好,而在另一些试验中则是FLD的效果比PCA好。

2. 结论与展望

人类对人脸识别的研究已经有40多年的时间,并取得了相当的成就,但距离实际可用行还有一定的距离,存在的问题也不少。从目前的研究成果来看,成功的人脸识别至少需要考虑以下几个方面:

(1)人脸是具有一定可变形部分的三维固体的表面,目前仍存在争议的是在选用人脸模型时,是用二维表面还是三维模型基哪一个更好点。

(2)由于外部干扰不可避免,预处理的效果将会影响到识别结果,好的人脸模型应能够在识别的同时,抑制分离外在干扰的影响。

(3)对于表达人脸的各种特征需要进行比较和选择,以找出人脸最活跃的特征。这可以通过如下两种途径:一是比较同一个人的多张图片,以得到稳定的特征;另一种方法就是比较不同人的图片,以得出该人最“与众不同”之处。

(4)人脸识别是人类视觉的独特过程,因此人脸识别必须结合生理学和心理学的研究成果。

摘要:人脸识别技术是一种新型的身份识别技术,它是生物识别技术的一种。随着人们应用需求的不断深入,人脸识别技术将呈现出主流化、芯片化、标准化发展趋势。近年来受到了各国研究人员的普遍关注,主要用于安全保密等领域。本文主要介绍了静态人脸识别的技术,对其进行了分类总结,同时,详细介绍了其中的关键技术和研究成果。

关键词:人脸识别,检测方法,分类

参考文献

[1]Chellappa R,W ilson C L,Sirohey S Human and machine recognition of faces a survey[J].Proceedings of the IEEE,1995,83(5):705-740.

[2]Hjelmas E,Low B K Face detection:a survey[J].Computer Vision and image understanding,2001,83(1):236-274.

[3]J.Benarie,D.Nandy.IEEE Trans.PAMI,1998,20:449~457.

[4]R.Brunelli,T.Poggio.IEEE Trans.PAMI,1993,15:1024~1052.

[5]LJ.Cox,J.Ghosn,P.N.Yianilos.CVPR’96:209~216.

[6]AL.Yuille.J.Cognitive Neuroscience,1989,3:59~70.

[7]K.M.Lam,H.Yan.Pattern Recogition,1995,29:771~779.

[8]J.Ydeng,F.Lai.Pattern recognition,1997,30:403~419.

[9]Tang C Y,Chen Z,Huang Y p.Automatic detection and tracking of human heads using an active stereo vision system[J].international Journal of Pattern Recognition and Artificial intelligence,2000,14(2):137~166.

[10]Yuille A L.Deformable templates for face recognition[J].Journal of Cognitive Neuroscience,1991,3(1):59~70.

[11]李刚,高政,人脸识别理论研究进展[J]。计算机与现代化,2003,(5):1-6.

静态识别 篇2

随着科技的飞速发展,人们希望人机交互变得更加自然,逐渐摆脱因传统机械外设而限制的人机距离,因此以人为本的人机交互显得尤为重要。而通过数字图像处理技术提取并识别手势则是其中主要的研究内容之一。

在静态手势识别领域中,神经网络[1]是一种应用非常广泛的工具。神经网络是一种大规模并行处理的网络,是一种非线性的处理单元,具有自组织和自学习能力,能有效抗噪声,同时具有很强的容错性和鲁棒性。目前应用比较广泛的是以反向传播学习算法为基础的多层神经网络--BP神经网络,包含输入层、中间隐含层和输出层。但传统的BP算法是一种梯度法,学习收敛速度慢,可能产生假吸引中心,故算法不完备,所得到的网络性能较差。针对BP算法的缺点,多层前向网络的交叉覆盖算法[2,3],可以更有效地解决上述问题。交叉覆盖算法是张铃教授等人提出的针对学习样本的特征结构神经网络,本文将交叉覆盖算法用于静态手势识别,具体实现时首先分割手势,再经过预处理后,对提取的手势特征向量进行分类制成匹配用模板。与传统的识别方法相比,交叉覆盖算法避免了优化过程中所需的巨大运算量,且允许分类目标在一定范围内的动态变化。

1 交叉覆盖算法

交叉覆盖算法用三层网络N构造分类器,交替进行覆盖,将属于同类的点用同一个邻域进行覆盖,先覆盖一类点,然后删除该类的点后,再覆盖另一类点,删除后,继续覆盖其他类的点,依次交替进行直到集合为空。若需要分类的集合为K={x1,x2,…,xk,xiRn}(Kn维欧氏空间的点集)。

K分为s个子集K1={x1,x2,…,Ks},则属于Ki的点的输出均为yi=(0,…,1,0,…,0)(即第i个分量为1,其余分量为0的向量),i=1,2,…,s。交叉覆盖算法流程如图1所示。

如图1所示,首先求所有未学习过样本的中心,并以离该重心最近的样本作为覆盖的圆心center。求出其他所有还未聚类的样本与center的的距离,求出球形覆盖,当样本数不再增加时,获得新的覆盖。而后找离当前覆盖的圆心最远的点作为下一个覆盖的圆心,重复以上步骤,直到样本被全部覆盖结束算法。

2 静态手势识别

静态手势识别设计方案如图2所示,分为如下5个步骤。

Step1 数据采集 从摄像头读入数据,采集手势图像,使用openCV[4]中HighGUI模块提供函数cvCreateCameraCapture实现。

Step2 预处理 对采集的手势图像进行预处理,预处理效果的好坏直接影响识别的效果。由于从原始图像转化为数字图像的过程中将产生噪声,而使图像产生畸变。所以降噪是预处理的主要工作之一[5],本文采取的预处理包括对采集到的含有手势的图像进行灰度变换、平滑和二值化等一系列操作。

Step2.1 灰度变换 采集到的图像为真彩色的BMP图像,这种图像格式的信息量过大,直接识别会影响速度。灰度处理,就是将其转变为256级灰度图,为此,首先将色彩图像的RGB三个颜色分量分离出来。

R=Color mod 256 (1)

//取红色分量,mod为取余操作;

G=Color\256 mod 256 (2)

//取绿色分量,“\”为整除操作;

B=Color\256\256 (3)

//取蓝色分量;

Color表示图像本身的RGB值,然后根据下式进行灰度转换:

H=0.3R+0.59G+0.11B (4)

Step2.2 图像的平滑 本文采取的是中值滤波,该方法也是一种局部平均平滑技术,它对一个滑动窗口的诸像素灰度排序,用其中值代替窗口中心像素原来的灰度值。这样对脉冲干扰的抑制效果好,在抑制随机噪声的同时能使边沿减少模糊,在灰度值变化较小的情况下可以得到很好的平滑处理,同时也降低了图像边界部分的模糊程度。

Step2.3 图像的二值化 二值化是将带多级灰度值的图像转换为只有两个灰度级的图像过程,用黑色表示目标图像,白色表示背景,从而将图像的有效成分分割出来,具体方法通过设定灰度阈值来完成,即当(i,j)的像素值比预定的阈值大,作为背景,标志“0”,否则为手势标志“1”:

二值化的关键在于阈值的选择,本文采取的是灰度直方图法,如图3所示。

横坐标为灰度值,纵坐标p(gk)为第k级灰度的概率其定义为:

p(gk)=nk/n 0<g<1 k=1,2,3,… (6)

其中nk是在图象中出现的灰度级为k的次数,n为图像中像素的总数。两个灰度峰值间的最小值即波谷深陡处二值化效果最好,所以确定其为二值化阈值。

Step3 特征选取 手势特征的选择和提取[5]的基本任务是如何从许多特征中找出那些最有效的特征,而原始特征的数量可能很大,或者说样本是处于一个高维空间中,通过映射的方法可以用低维空间来表示样本,这个过程就是特征提取,显然特征的选择和提取应该在设计分类器之前进行。

选择特征参数的原则为从原始特征数据中挑选最有效的特征,以达到降低空间维度的目的。因此,本文所提取的特征参数包括:手势外围矩形区域的面积与手势外围矩形左上方1/2矩形区域内的面积、手势外围矩形区域的面积与手势外围矩形右上方1/2矩形区域内的面积、手势外围的矩形宽高比例、手势的周长和手势的面积。特征参数以比例特征为主,大量的实验基础表明,以上的参数比较好地代表了指定手势,具有很好的区分度。

Step4 模板库[6]的建立 在进行手势识别之前,首先要进行手势训练以得到手势的原型模板,建立手势模板库,以用于测试集上的手势识别,本文采取了交叉覆盖算法进行手势训练。

首先将所有样本投影到n+1维空间半径为:

R=max|xji|×max|xji|+1i=1,,kj=1,,n (7)

Rn维球面上;然后依据如图1所示流程图对样本进行覆盖聚类。

对于求初始点a的平移点,先设aK1,B=min{x|d(a,x)},其中d(a,x)表示ax的距离,若|B|=k>n,则取a′=a;否则,求aP(B)(其中P(B)是由B构成的线性流程)的垂足b。令P(K)=P(B),对每一个xK1且xP(K),求d(x)=<b,c1-x>/<b-a,c1-x>;若<b-a,c1-x>=0,则ck+1=x,取a′=a,令P(K+1)=P(K)∪{ ck+1},若k+1>n,则a′为所求;否则,令P(B)=P(K+1),重复上述步骤。若<b-a,c1-x>≠0,则做如下处理:令d=d(x*)=min{d(x)},a′=R(b+d(a-b))/|b+d(a-b)|,取ck+1=x*,令P(K+1)=P(K)∪{ ck+1 }。图4为求a的平移点的流程图。

交叉覆盖算法解决了k-means聚类、时间序列聚类等算法困难,包括初值的选择和聚类效率。该算法可以在覆盖后求重心,调整所做的覆盖,初值的选择对结果的影响小于其他聚类算法对初值的选择;覆盖聚类对大量的样本数据不需要迭代,用最短距离法只处理少量样本,所谓最短距离法即用合并得到的新覆盖的圆心计算与其他覆盖的距离,而后更新最短距离。从而聚类效率得到有效提高。

Step5 手势识别 前面的训练集是已经标定的,选取未标定的测试集,由覆盖聚类识别,通过流程图里的迭代把样本对象划分到不同的簇中,以求目标函数的最小化,与训练集有所不同的是,初始点的选取应选择与训练集模板中欧氏距离最近的点,从而使生成簇尽可能地紧凑和独立。

3 实验及结果

如图5所示,实验对摄像头采集的中国手语中0-9数字手势用本文算法进行识别,识别结果如表1所示。

实验采取非固定手势采集距离,将被识别手势和摄像头的距离设为35cm~45cm之间,共对358个手势进行了识别,其中正确识别344个,误识别13个,无法识别1个,平均识别率为96.09% 。

表2为在同等测试条件下采取模板匹配算法[7]进行的对比实验,共对358个手势进行了识别,其中正确识别340个,误识别14个,无法识别4个,平均识别率为94.97%。

表3为在同等测试条件下采取BP神经网络算法[8]进行的对比实验,共对358个手势进行了识别,其中正确识别336个,误识别17个,无法识别5个,平均识别率为93.85%。

通过对比,本文算法实验的平均识别率均高于单一模板匹配和BP神经网络的识别率,但手势7的识别率略低,原因可能是结构相对比较复杂的手势的识别率相对较低,且错误识别的采集距离相对较远。

4 结 语

静态手势识别的设计多采用单一模板匹配算法或人工神经网络算法,本文采取了交叉覆盖算法来进行手势的模板训练和识别分类,同时为了更好地进行手势的数字含义识别,应用了交叉覆盖算法进行手势测试匹配。实验结果表明,该算法显著提高了识别的准确率,在静态手势的识别中是高效的、可行的。

参考文献

[1]Simon Haykin.神经网络原理[M].北京:机械工业出版社,2003:22-25.

[2]刘慧婷,倪志伟,李建洋,等.基于交叉覆盖算法的时间序列模式匹配[J].计算机应用,2007,27(2):425-427.

[3]刘政怡,龚建成,吴建国.基于交叉覆盖算法的中文文本分类[J].计算机工程,2006,32(19):183-184.

[4]Gary Bradski,Adrian Kaehler.learning OpenCV[M].北京:清华大学出版社,2009:160-177.

[5]Mark S.Nixon,Alberto S.Aguado.特征提取与图像处理[M].北京:机械工业出版社,2011:112-113.

[6]冯伟兴.Viual C++数字图像模式识别技术详解[M].北京:电子工业出版社,2010:148-151.

[7]Tom M.Mitchell.机器学习[M].北京:机械工业出版社,2003:77-82.

静态识别 篇3

随着人机交互和智能识别系统领域的迅猛发展,手作为人身体上最灵活的部位及人机交互的媒介之一,得到越来越多的应用[1]。由于手势本身具有的多义性以及时间、空间上的差异性,研究者对手势的定义并不相同。现有文献中对手势的定义有三种: 手形( 手掌与手指的轮廓) 、手指或手臂的运动、人手和手臂结合组成的姿势[2]。本文参考刘阳等[2]的定义,将手和臂形成的姿势定义为手势。本文中的手势识别是指该类手势的识别。

从手势识别的硬件条件看,传统基于视觉的手势识别一般流程[3]是通过一个或多个摄像头采集图像或视频,从这些图像或视频流中分割出手势,再用训练好的手势模型进行手势分析, 生成手势描述,最后完成 手势识别。张良国[4]等采用基 于Hausdorff距离,采用边缘特征像素点作为识别特征,利用Hausdorff距离模板匹配的思想,在距离变换空间内实现了中国手语手指字母集上的30个手指字母的手势识别; 翁汉良等[5]利用颜色特征检测肤色区域,分割出人手,根据人手的轮廓及凸缺陷来检测指尖,利用指尖的数目和方位来表示一个手势,进而结合轮廓长度和面积等几何特征完成手势识别。但是,这些传统的基于单目视觉的手势识别主要研究的是手掌与手指轮廓形成的手势,其前期手势分割过程易受光照、背景、摄像头等因素影响,识别的稳定性和鲁棒性不高[6]。

2011年,微软发布 了一款Windows版Kinect三维摄像 机[7]。Kinect有三个摄像头,每秒更新30帧图像,其中中间的主摄像头是RGB彩色摄像头,左右分别为红外线发射器和红外线CMOS景深摄像头。在微软的Kinect for Windows SDK支持下,研究者可以获取人体的彩色图像、深度图像以及人体骨架图。利用Kinect获取的骨架图及关节点的坐标数据进行手势识别,可避免光照等因素的影响,并且省去了传统彩色图像手势识别过程中手势分割提取的步骤,准确率更高,实时性更强。

从手势识别类型及其方法看,现有的手势识别大多研究手掌与手指轮廓这种手势[3,4,5],只有部分研究手和臂形成的手势。 Gu Y等[8]利用Kinect摄像机,从人体骨架中提取相关特征,使用HMM( 隐马尔可夫模型) 对动作手势进行建模训练和识别, 但该方法在有无训练集两种情况下识别率差异较大,平均识别率不高。Jiang H等[9]提出了一种基于凸规划和模板匹配的人体手部姿势识别方法,利用多步线性规划方法从图像模板中搜索最佳匹配区域,省去了从背景中分割手部区域的步骤。通过这种基于视觉的线性规划匹配方法,可以产生较为密集的局部匹配特征点,根据这些特征点匹配程度找到匹配的手势。然而, 该方法虽然免去了将人体部位从图像中分割出来,却只能够识别相近的手势,正确识别率不高。Lin T Y等[10]在Kinect康复训练系统中,针对有运动障碍的病人在锻炼太极过程中手部姿势的评价问题,提出计算标准动作中人体关节点和病人关节点坐标平均差值以及手部姿势角度差的平均值,来评价手势的标准程度。该种方法虽然能够识别和判定手部姿势的匹配程度, 但实时性较差。

因此,针对现有文献中对手与臂形成的这种手势识别准确性不高和实时性不强的问题,本文利用Kinect获取手部和肩部关节点坐标数据,从它们之间提取角度特征,将该特征与参考手势的特征逐个比较来准确地识别当前手势。本文方法可以应用于Kinect体感健身游戏、运动障碍康复训练等方面。

1 相关技术基础

1. 1 人体关节点简介

通过对深度数据流的提取,Kinect可实时地获得预先定义的人体20个关节点位置的三维坐标。这20个关节点的三维坐标能够有效地表示人体任意的手势和姿势。

如图1所示,空心圆点标注的骨骼点为手部动作相关的关节点,从左到右骨骼点名称依次为左手、左手肘、左肩膀、肩膀中心、右肩膀、右手肘、右手。所有这些空心圆点为手势动作识别计算所涉及的关节点。

1. 2 基于凸规划的匹配识别方法

Jiang H等提出的基于凸规划的匹配识别方法[9]是本文的对比对象之一。其总体思想是通过比较当前图像和标准图像中人体部位的局部特征点匹配的密集程度,来识别人当前的静态手势或姿势与标准的手势或姿势是否匹配。该方法也研究了手与臂形成的这种静态手势,并同样采用了基于模板匹配的思想。

目标图像与模板图像匹配计算如下[9]:

利用式( 1) 可得到模板图像中的点( x,y) ∈S与目标图像中的点( ux,y,vx,y) 能量最小的匹配。其中,Cx,y,u,v是匹配代价; 第二项作用是平滑模板图像S中近邻位置映射关系,N是最近位置点集合,λx1,y1,x2,y2是平滑因子。

为了更好地求得式( 1) 的非线性最优化问题的解,Jiang H等[9]采用了多步凸规划方法。式( 2) 为式( 1) 放宽后形成的线性规划第n项LPn( n = 0,…,N) :

式( 2) 的约束条件与限定条件详见文献[9]。通过这种放宽,将式( 1) 问题的求解变成一系列的线性规划问题的求解,逐渐减小搜索区域,最终求得该问题近似最优解。

1. 3 基于 Kinect 骨架的姿势识别方法

Lin T Y等提出的基于Kinect骨架的姿势识别方法[10]是本文的对比对象之二。该方法的总体思想是通过比较用户骨架与标准骨架的欧氏距离差的平均值和角度差的平均值来识别和判断用户的手势或姿势。

设标准骨架为A,用户的骨架为B,则A骨架头-肩-手部位的10个关节点坐标集合为:

B骨架头-肩-手部位的10个关节点坐标集合为:

则两者之间的平均距离为:

然后考虑标准骨架姿势与用户骨架姿势的角度差平均值,A骨架的角度集合为:

B骨架的角度集合为:

则上述二者的角度差平均值为:

2 基于 Kinect 角度特征的手势识别方法

2. 1 问题提出和总体方案

Jiang H等提出的基于凸规划的匹配识别方法[9]在式( 1) 基础上,用放宽的线性规划方法求取近似最优解,搜索视频中的每一帧, 根据特征点匹配的密集度来识别。此方法虽然无需将人从背景图像中分离出来,可以直接通过计算模板图像和目标图像特征点匹配的密集度来识别,但容易存在错误匹配,正确识别率在83% 和91% 之间,仍有待进一步提高。此外,Lin T Y等提出的基于Kinect骨架的姿势识别方法[10]在计算用户的手势关节点坐标与标准手势关节点坐标之前,需将关节点坐标转换成以躯干为原点的局部坐标系下的坐标值,再利用式( 5) 比较欧氏距离差的平均值; 在获取手部角度值之后,利用式( 8) 计算与标准手势角度差的平均值。由于Kinect每秒钟更新30帧,每帧时长约为33 ms,该方法不能较好地满足Kinect的实时性要求。

因此,针对目前现有方法对手与臂形成的这类手势识别准确率不高和实时性不强的问题,本文利用Kinect获取手部和肩部关节点坐标数据。从它们之间提取角度特征,并将该特征作为当前手势和参考手势匹配识别的依据,识别准确性更高,实时性更好。

本文的手势识别过程主要分为手势录制、手势载入和手势匹配识别三个部分。在手势录制阶段,用户可做出任意待识别的手势,并保持这种手势状态持续2秒即可; 在手势载入阶段, 加载预先录制的手势; 在手势匹配识别阶段,用户面对Kinect摄像头做出和当前系统中加载的参考手势相同手势,系统会给出是否匹配的反馈。下文中分别说明各主要阶段的实现方法。

2. 2 参考手势帧的录制

本文中手势识别需要预先录制一套静态手势动作,作为识别用户当前手势的参考手势。第一步,首先计算骨骼帧之间时间间隔tspan= tcurrent- tlast,并将tspan写入保存; 其中tcurrent为当前时间点,tlast为上一帧结束的时间点或开始记录的时间点。

第二步,需要写入骨骼帧的底面裁剪面向量。每个骨骼帧都包含一个底面裁剪面向量,该向量作为估算底面等式的系数。 平面公式如下:

式 ( 9 ) 中,A = v Floor Clip Plane. x,B = v Floor Clip Plane. y,C = v Floor Clip Plane. z,D = v Floor Clip Plane. w。v Floor Clip Plane是Kinect SDK中本地接口NUI_SKELETON_FRAME内的成员变量。 将等式规范化后,D的空间含义是指Kinect摄像头距离底面的高度。

第三步,利用Skeleton Frame类中复制骨骼数据函数CopySkeleton Data To( ) 将骨骼数据从帧中分离出来。最后,将骨骼数据以二进制格式图形序列化为写入流。下一帧以相同的流程录制保存。

2. 3 手势匹配识别

在手势匹配识别阶段,首先要确保用户在做出手势的时候身体未产生位移,使得获取的骨骼数据准确有效。手势匹配识别部分的算法流程图如图2所示。

图中虚线框中内容为本文的主要工作,其中手势角度特征的提取和匹配计算部分为核心内容。提取的手势角度特征为手势匹配识别的标准和依据,通过比较当前手势的角度特征值和标准手势的角度特征值来实现手势的匹配识别; 匹配计算则是在根据实验确定的恰当阈值范围内比较两种手势特征的差异程度,若均不超过阈值则确定为匹配,否则为不匹配。

2. 4 静态手势角度特征的提取

本文研究的是静态的手势识别,即在摄像头下检测到某个形态的手势,计算机能够读懂该手势的形态。对于任意一个手势,需要给定一个数学描述,来确定这种手势形态。

如图3所示,以右手为例( 左手情况类似) ,本文中用手部的三个角度来标定一个静态手势动作,作为该静态手势的特征。这三个角度将能够有效地作为每一个静态手势形态的特征描述。以右手为例,对于每一个静态的手势状态,右肩膀、右手肘、右手这三个点将形成一个三角形,或者是一条直线( 当手伸直的时候) 。 由三角形相似判定定理可知,当两个三角形满足有两个角对应相等的时候,这两个三角形是相似的。由于每个人的手臂长度一般是不相同的,当两个人做出同样的手势,要求两个人的手势对应关节点处的夹角相等即可。因此考虑采用图3( a) 和图3( b) 的两个角度来表示手势形成的三角形或是直线。

但是,当右手部位的上臂和下臂之间形成的角度不变时,即图3( a) 和图3( b) 中角度不变,由于人的肩关节处有3个自由度[11],在右手臂绕肩关节点上下和前后运动时,手势状态发生了变化。因此,为了确定右手部的手势形态,还需要考虑右手上臂和肩膀的夹角关系,如图3( c) 所示。

在基于凸规划的匹配识别方法中,它利用式( 1) 及式( 2) , 计算目标图像和模板图像匹配的特征点,容易存在错误匹配。 并且,由于模板图像和目标图像不同位置的特征点匹配,存在特征点密集度相同却有较大差异的手势形态,其正确识别率不高, 而本文中的角度特征匹配却不存在这种问题。与基于Kinect骨架的姿势识别方法相比,式( 4) 采用了肩-头-手多个部位的关节点坐标,式( 7) 中涉及人体的多个角度,本文方法将焦点聚焦到影响手势状态变化的角度特征上,去除了其他无影响关节点和角度,这将大大提高算法的实时性。

2. 5 角度特征的计算和匹配判断

在本方法中,计算两个肢体向量的余弦值作为它们的角度特征值。向量夹角的范围为[0,π],该范围内余弦函数为单调递减的,因此每个角度对应一个余弦值。直接通过余弦值的计算能减小计算复杂度,提高实时性。

如图4所示,以右手手肘处的夹角为例,设利用Kinect获取到的右肩膀的坐标为( xrs,yrs,zrs) ,右手肘处的坐标为( xre,yre,zre) ,右手的坐标为( xrh,yrh,zrh) 。

定义右手肘到右肩膀处的向量a为:

定义右手肘到右手处的向量b为:

则两手臂间的夹角余弦值为:

其中:

设当前手势的一个角度特征为cosαcurrent,参考的模板手势对应位置的角度特征为cosβtemplate,阈值为d,则两种手势匹配, 每个对应的角度特征需满足:

2. 6 算法描述

预先录制手势帧数据,录制的每种手势时长为2秒。本文提出的该种算法计算快速,只在获取手部和肩部坐标时需要扫描整个骨架数据。算法描述如下:

名称: 基于Kinect角度特征的手势匹配识别算法

输入: 录制的静态骨骼数据,当前用户的手势

输出: 当前手势和参考手势是否匹配的反馈

方法: 执行以下步骤

步骤1初始化关节点坐标和角度特征值;

步骤2检测当前骨架是否移动;

步骤3读取人体手部和肩部关节点坐标;

步骤4根据式( 10) - 式( 12) 计算手部的角度特征值;

步骤5判断当前处理的帧类型,并存储为相应的特征值;

步骤6根据步骤4中得到的特征值,按照式( 15) ,在试验确定的恰当阈值范围内比较录制手势帧和当前手势帧是否匹配;

步骤7给出是否匹配的反馈,算法结束。

3 方法验证和分析

3. 1 实验设计与环境

为了验证本文算法的有效性、鲁棒性和优越性,进行了两组验证实验和两组对比实验。其中,第一组对比实验的比较对象是Jiang H等提出的基于凸规划的匹配识别方法[9],该方法研究的手势与本文方法研究的手势内容与含义相同,也采用了模板匹配的思想。该方法的识别率在83% 到91% 之间,两种方法通过识别率进行对比; 第二组对比实验的对象是Lin T Y等提出的基于Kinect骨架的姿势识别方法[10]。本文利用式( 5) 和式( 8) ,在相同条件下与本文算法进行实时性对比实验。通过与传统基于视觉的手势识别方法和基于Kinect平台的手势识别方法的对比实验,来验证本文方法比现有方法具有更好的准确性和实时性。

本文实验的硬件平台为: Windows版Kinect三维摄像机一台,其彩色图像分辨率为640 × 480,深度图像分辨率为320 × 240; 实验用计算机为PC机,主要配置包括Inter( R) Core( TM) i3-530,2. 93 GHz主频四核处理器,内存为2 GB,显卡为NVIDIA Ge Force GTS 250; 系统开发环境为: Windows 7操作系统,Visual Studio 2010,Kinect SDK v1. 5。

3. 2 手势识别的验证实验

在实验中,以右手为例,共做了6组实验。经过多次试验, 阈值d = 0. 2时本文方法具有较好的准确性,识别偏差能够控制在合理的范围。因此,实验中阈值d设定为0. 2( 下文其他实验中阈值均与此相同) 。实验结果如图5所示。每幅图的左边为当前手势图,右边骨骼图为录像中的参考模板手势图,矩形框中为静态的手势状态,如图5所示。从图5中可知,本文算法通过对参考手势和当前手势角度特征的提取,能够有效实现对用户的各种静态手势的匹配计算和识别。

3. 3 光照变暗条件下的实验

如图6所示,在黑暗环境下,Kinect仍然能够准确地获取人体的骨架以及各个关节点的三维坐标,因此,本文方法仍能够较准确地计算当前手势和参考手势是否匹配。该实验表明,本文方法可不受光照变化的影响,比传统的基于视觉的手势识别具有更强的鲁棒性。

3. 4 识别率对比实验

Jiang H等[9]采用的是一种基于凸规划的手部姿势识别方法。 利用多步线性规划方法,从图像模板中搜索最佳匹配区域来定位目标,通过这种基于视觉的线性规划匹配方法,产生较为密集的局部匹配特征点,根据这些特征点匹配程度找到匹配的手势。

图7给出了两种方法的对比实验结果,其中图7( a) 为凸规划方法手势匹配的结果,图7( b) 为本文算法的识别结果。从图7中可知,在对同种手势的识别对比中,本文算法识别的准确性较高。

对图7中4种手势进行实验,两种方法的识别率在表1中给出。从表1中可知,本文方法的最低识别率接近基于凸规划的匹配识别方法[9]的最高识别率,本文方法的平均识别率较该方法高,识别准确性更强。

3. 5 实时性对比实验

Lin T Y等[10]采用的是基于Kinect骨架的姿势匹配识别方法,通过比较对应关节点坐标之间差的平均值和两幅骨架数据对应位置的角度差平均值,来实现手势或姿势的匹配识别。本文对图5中的6种手势,在相同条件下,分别用该方法和本文方法,进行手势识别的对比实验,比较本文手势识别方法的实时性与该方法的实时性大小关系。

对每种手势分别做6次识别实验,取平均识别时间。实验结果如表2所示。由表2中数据可知,与Lin T Y等提出的基于Kinect骨架的姿势识别方法[10]相比,本文算法对每种手势的识别时间较短,前者各种手势识别的平均时间51. 2 ms,本文算法的平均时间为36. 3 ms,本文算法具有更好的实时性。两种方法识别率较接近。

4结语

本文利用Kinect获取人体骨骼坐标,通过预先录制人体静态的手势,分别从当前手势和参考手势中提取角度特征,利用它来实现用户手势是否匹配的计算。实验表明,该算法能够有效地匹配和识别用户的手势,比凸规划的特征点匹配方法具有更好的识别准确性,识别率更高。与基于Kinect骨架的姿势识别方法相比,本文方法具有更好的实时性。由于使用Kinect深度摄像机,本文方法不受光照和颜色等因素影响,具有较好的鲁棒性和稳定性。目前本文的手势识别方法只用于静态手势,下一步努力将本算法进一步扩展和改进,实现用户的动态手势识别。

摘要:手势作为一种自然、直观的交流方式,在人机交互领域得到越来越广泛的应用。研究的手势是指手与臂形成的一种空间三维姿势,现有方法对该种手势识别的准确性不高且实时性不强。在Kinect体感摄像机获取的人体手部关节点三维坐标基础上,提出一种计算手部角度进行静态三维手势识别的新方法。该方法通过计算手部多个位置的夹角来获取手部形态特征,然后与参考的静态手势特征做匹配识别。实验表明,该方法能够判断和识别当前静态手势与参考手势是否匹配,比现有方法具有更好的识别准确性和更强的实时性。

静态识别 篇4

图像识别是人机交互方向的重要领域,是让计算机理解人的行为的一种技术。手势识别在人机交互应用上能实现人类和计算机的自然交流。手势识别可分为静态手势识别和动态手势识别两类。静态手势如图1所示。

最简单的静态手势识别可以只是识别出目标手所表示的数字,但对于复杂的手势则需要用到分类器来识别。Atid S.等通过多分辨率和图像匹配实现了对戴手套的手的26个字母的识别[1]。Jiang Qing Wu等利用数据手套工具,采用DGMM技术作为识别手段,能够较快速而准确地实现手势词的识别[2],但缺乏交互的自然性。

本研究提出并实现了一个基于2D视觉、以MEB-SVM(最小包围球的支持向量机)[3]为分类方法的手势识别方法,能有效解决以上问题。

1 Mean shift图像分割

Mean shift最初是以一个向量名词被提出的,且提出很久都没有得到重视,直到Yizong Cheng在1995年在他发表的论文中重新对这个问题进行了研究[4]。Mean shift是一个可以用作聚类、寻优等问题的解决方法。其基本的思想是一个逐渐寻优的过程。根据Yizong Cheng的论文,过程如下:

在一个o维的空间内Ro,存在n个向量x1,x2,x3,…,xn,空间内的某点x的向量可用如下的公式求得:

Μh(x)=i=1nΚ(xi-x)lw(xi)(xi-x)i=1nΚ(xi-x)lw(xi)(1)

式中 h—点x的邻域样本空间;xi—落入样本空间中的向量;K(x)—一个单位核函数,一般是一个高斯核函数;l—一个正定的对称o×o矩阵,称为带宽矩阵;w(xi)—xi的权重w(xi)≥0。

因此,通过式(1)得到的向量xRo内在邻域h内的向量在核函数作用下的平均偏移向量。

在图像分割中,一张图像,即为Ro,每个像素是一个3维向量(R,G,B),h是像素的邻域。

Mean shift对图像的处理过程就是逐步地将各个像素向量朝邻域内最优向量接近,最后以此最优向量为模式归一化此邻域,完成图像分割。

实验处理结果如图2所示。

2 傅里叶特征提取

2.1 轮廓提取

特征提取前用高斯模式训练好一个用于手部皮肤的颜色向量V。将分割后的图像用向量V去除背景,得到仅剩手部的图像,最后二值化图像。接下来用傅里叶描述子提取其边界特征。

傅里叶边界特征提取算法的特点有:对轮廓大小,平移,旋转不变性,且可根据精度和复杂度的平衡情况改变系数个数。

为保证得到的轮廓的封闭性,可以用八邻域搜索算法提取得到的二值图的轮廓。八邻域搜索算法记录一个一维序列,序列中存放边界像素的位置。图中背景像素为零值,目标像素为非零值。从开始坐标出发,在当前坐标的八邻域内搜索非零像素,将搜到的第一个坐标记为序列的下一个坐标,并将当前坐标存入序列中;直到当前坐标和开始坐标相等,则完成搜索。得到的一维序列即为二值图的轮廓,如图3所示。

2.2 轮廓的傅里叶变换

图像轮廓的傅里叶描述子(Fourier descriptors),是对边界曲线的频域变换的结果,能够得到不受边界旋转、平移和缩放的影响的结果。

傅里叶描述子的作用是将边界曲线上的点都表示成复数形式。{x(i),y(i)|i=1,2,3,…,n}可表示为d(m)=x(m)+y(m)i(m=1,2,3,…,l-1)。那么这个一维序列的离散傅里叶系数定义即为:

an=1l-1m=1l-1x(m)e-i[2π/l-1]nm(1)

bn=1l-1m=1l-1y(m)e-i[2π/l-1]nm(2)

但此系数还不是理想的特征向量,它还不具有旋转、平移和缩放不变性,需要对此系数进行归一化变换:

rn=(|an|2+|bn|2)1/2 (3)

rn是平移和旋转不变量,为了具有缩放不变性,可将每项都除以其幅值r1,得wn:

wn=rn/r1 (4)

傅里叶描述子的个数的多少表明对轮廓的描述的详细程度,但若个数太多,计算复杂度无疑会增加。根据手势识别的需要,一般通过12个描述子就能够区别不同的手势,且复杂度也不会太高。

3 MEB-SVM

3.1 MEB-SVM相对于其他SVM的优点

SVM(支持向量机)[5,6]最初是由Vapnik提出来的,是一种有效的模式分类和识别方法。SVM的原理是:对向量空间中的分属不同种类的点,用一个最优超平面将它们分开,使得属于同一种类的点被尽可能地分往同一侧,同时,这两个类之间的间距达到最大。

SVM基本的理论是针对二分类问题的,对于多个类的分类问题,SVM包括一对多方法(OneAgainstTwo),一对一方法(OneAgainstOne),树分类方法。这些方法在分类过程中普遍存在计算量大、需要多次二分类、算法复杂等缺点。

鉴于以上分类方法的缺点,借用几何学的方法提出了最小包围球的SVM方法(MEB-SVM)。MEB-SVM是最新的学术研究成果,并成功地应用于大规模数据集分类上。实验表明这个方法相比其他分类方法在解决大规模数据集上有很大的优势,不仅在精确度上,而且在计算时间上也能获得很大的提高。

如图4所示,最小包围球方法在多分类问题上存在明显的优势,不用进行多次的二分法,只需要对各个类分别计算其“球心”和“半径”,即可完成一类的判别。

3.2 最小包围球的核方法

在给定在样本空间S={x1,x2,x3,…,xn},xiRd,则S的最小包围球MEB(S)是包含S内所有样本的最小的球:BR(c),c表示球心,R表示半径。

和传统SVM一样,给定的样本空间并不一定会对各类形成自然归类的分布,所以需要将样本空间映射到特征空间φ内。根据泛函理论,只要核函数满足Mercer条件,它就对应某一空间中的内积[7]。本研究中所用的核函数为高斯核函数,也作径向基函数(RBF):k(x,xi)=exp{-(‖x-xi‖2)/2σ2}。

因此求最小包围球的问题可表示为:

minR,cR2:‖c-φ(xi)‖2≤R2,i=1,2,3,…,m (1)

其对偶问题为:

Subject to:αi≥0,i=1,2,3,…,m

i=1mαi=1

式中 αi—拉格朗日乘子。

3.3 MEB-SVM算法

将给定的手势训练样本集S经图像分割、二值化等步骤得到一组特征向量;再用基函数对这些向量进行空间映射。为了能快速地得到样本集的最小包围球,按Ivor W.Tsang等人的方法可采用近似算法[8]。其主要思想是通过递增迭代的方式逐步扩展包围球的半径。扩展过程中将离当前球心最远的样本加入包围球中。记第t次迭代时的包围球包含的样本为St,球心和半径为CtRt,包围球为B。则对于给定的ε>0,算法可描述为以下过程:

(1) 对于一类样本,任选一个样本点作为S0,记球心C0为该点向量,半径R0为0;

(2) 结束训练条件:不存在样本点z在(1+ε)包围球B(Ct,(1+ε)Rt)的外面;

(3) 找到特征空间内离当前包围球心Ct最远的样本点,并添加到当前包围球:St+1=St∪{z};

(4) 更新包围球的球心和半径Ct+1、Rt+1;

(5) t=t+1,返回到(2);

算法流程图如图5所示。

经过以上步骤后即得到本类的最小包围球。对于各训练样本类都执行以上步骤则得到全样本空间的所有最小包围球。对于测试样本T的分类,只需计算T与各个包围球的球心Ci的欧式距离,并加以比较,则与T距离最近的球心所在的包围球的类即为T所属的类。

4 实 验

本研究选取了手语中1~10的10个手势作为测试对象,并分别对每个手势进行10次实验。

实验的测试平台为Intel Core2 Duo 3.00 Hz,1 G内存的电脑,程序所使用的编程环境为Vistual Studio 2008 C++和OpenCV开源图像处理库。图像采集采用具有130万像素的10moons天弓摄像头。

具体过程如图6所示。

在用Mean shift对图像分割时,经过试验,笔者以5×5为邻域像素,核函数采用高斯核N(x)=exp(-‖x‖2),带宽矩阵简化为l=h2I,即为一个单位数量阵。权重系数按与x点的距离赋值。

经二值化和八邻域搜索得到轮廓后,对轮廓即可作傅里叶变换。为使傅里叶描述子的误差尽量减少,作傅里叶变换的轮廓图像应该大小一致。同时计算时需要兼顾计算的复杂度和精确度,经过经验对比可知,对一个轮廓采用12个描述子是较为合适的。

MEB-SVM算法中的ε是决定算法精确度与复杂度的关键因素。实验中分别取不同的ε进行训练,得到的结果如表1所示。

实验结果中,ε越小,算法收敛时间越短,但由于包含在包围球中的向量太少,对算法的准确度会有一定的影响,当ε大于0.001以上时,算法训练时间增加明显,同时算法准确度也有所增加。

5 结束语

本研究介绍了一种基于MEB-SVM的手势识别算法,MEB-SVM算法是在具有强分类能力的SVM的基础上提出来的,且此方法的计算复杂度与精确度又超过了传统的SVM方法,具有非常广泛的应用前景。

参考文献

[1]ATID S,WUH,ALISTAIR S.Hand gesture recognition forhuman computer interaction[N].ERCIM NEWS,EuropeanResearch Consortium for Informatics and MAthematics,2001(46).

[2]WU J Q,GAO W,PANG B,et al.A fast sign word recog-nition technique for Chinese sign language[J].High Tech-nology Letters,2001,11(6):23-27.

[3]CERVANTES J,LI Xiao-ou,YU Wen,et al.Support vec-tor machine classification for large data sets via minimum en-closing ball clustering[J].Neurocomputing,2008,71(4-6):611-619.

[4]CHENG Yi-zong.Mean shift,mode seeking and clustering[J].IEEE Trans on Pattern Analysis and Machine In-telligence,1995,17(8):790-799.

[5]CORTES C,VAPNIK V N.Support-vector networks[J].Machine Learning,1995,20:273-297.

[6]BOSER B,GUYON I,VAPNIK V N.A training algorithmor optimal margin classifiers[C]//Proc.Fifth Annual Work-shop on Computational Learning Theory.New York:[s.n.],1992:144-152.

[7]段一洪,陈一民,林锋.基于LSSVM的静态手势识别[J].计算机工程与设计,2004,12(25):2352-2368.

静态识别 篇5

0 引言

用例是由UML和统一过程的重要贡献者Ivar Jacobson于1986年提出的概念[1], 在软件工程或系统工程中, 它定义了系统用于实现某个用户目的的一系列行为。用例在使用UML的整个软件开发过程中, 都处于中心地位。它可以驱动软件的整个生命周期, 需求、分析、设计、编码、测试等阶段都可以基于用例结构, 使得软件生命周期的各阶段保持一致性。但

在现有程序设计语言中, 缺少相应的表达手段, 因此在程序编码阶段无法保持用例结构, 恢复源代码中的用例结构对于软件生命周期中的可追踪性具有重要意义。

现有的用例识别研究中, 大部分都集中在普通应用程序, 而对于Web程序关注较少。如G.A.Di Lucca等在Web程序的逆向工程中, 采用内聚度度量的方法, 将联系比较紧密的页面作为一个群集 (cluster) , 在分析得到若干群集之后, 手工研究了其与用例的对应关系[2]。G.A.Di Lucca等还提出了通过记录Web程序中页面的跳转轨迹识别用例的动态方法[3,4], 但该方法识别出的结果是不能表达用户目的的用例片段且识别粒度较粗。在[5]中, 作者提出了基于跳转调用图的Web程序用例识别的静态方法, 该方法虽然能够较好识别出与用例相关的页面集合, 但是识别粒度仍较粗, 而且并未涉及对Web程序中页面代码部分的识别。

针对现有方法的不足, 本文首先对Web程序页面中包含的用户行为进行提取, 再结合现有方法对各个页面进行处理, 最终实现对整个Web程序的用例结构识别。

1 Web页面用户行为提取

1.1 Web页面用户行为

Web程序的执行过程是用户、浏览器与服务器交互的过程[6,7]。对于用户来说, 浏览器呈现给用户的界面是由其渲染过的HTML格式的文件, 该类型文件才是Web服务器返回给浏览器的结果。因此, Web程序中最直接与用户交互的是HTML文件, 我们对Web程序界面用户行为的分析, 可简化为对HTML标签中涉及用户交互部分的分析。

对HTML4.1标准进行分析, 我们得到所有常见的参与用户行为的元素, 如表1所示。

1.2 JSP页面用户行为

JSP页面不同于普通Web页面之处在于其中包含了JSP标签和Java代码[8,9,10,11]。Java代码不用于浏览器显示界面, 但会控制与显示界面相关的标签生成。分析JSP程序特点后我们发现, JSP标签与JSP内置对象虽然不直接与用户交互, 但是对用户行为产生非常重要的影响。比如, 标签表示重定向一个静态html/jsp的文件, 或者是一个程序段, 在重定向过程中, 可能带有标签所传递的数据, 这些数据可能来源于用户的输入。这些标签和内置对象隐式地参与了用户交互的过程[12]。因此, 我们也将对这些部分进行分析。

JSP动作元素或内置对象如何参与用户交互行为如表2所示。JSP动作元素与内置对象行为如表3所示, 在本文中, 我们通过对这些方法的识别来建立事件流。

以Session对象为例。Session对象的set Attribute方法用于将属性-值对放入session中, 用户在一次session中都可以使用Session对象的get Attribute方法获取值。这两次行为之前存在确实的逻辑关系, 是我们需要提取的目标。在我们的实验对象CDShop程序中, cdlist.jsp页面中使用session.get Attribute (“userid”) 方法获取用户ID, 这个值在用户登陆后会存进session中。

1.3 事件流

Atif Memon根据界面测试的需要, 提出了事件流图 (Event Flow Graph) 的概念[13]。它以GUI事件为结点, 事件间交互关系为有向边。事件流图从一个给定的时间点出发, 包含了所有可以从该时间点触发的事件集合。图中有一条有向边从结点S指向结点T表示, T结点所表示的事件可能在结点S所表示的事件执行后立即执行。

它不仅考虑事件之间的时间逻辑关系, 还包括空间逻辑, 而且根据其提出的自动化观念, 大多数的有向边表示的是空间逻辑, 因此通常一个界面的事件流图的强连通较强。这种流图的处理较复杂而且空间逻辑关系在用例识别中几乎没有任何作用, 我们的用例识别中, 只需考虑时间逻辑。

在Web程序中, 直接与用户交互的几乎都是HTML页面, 事件在这种情况下体现在用户与HTML标签的交互, 如点击某个链接, 在某个文本框中输入文字等。因此, 我们对与用户交互的标签与事件不作区分。

Web程序中, 一个完整的用例执行通常需要经过几个页面的跳转, 这些都是通过发送如HTTP等协议的请求完成。而如何发送、转发这些请求, 都是由Web服务器完成的, 在我们的程序源码中不会涉及。用户的行为每次只在一个页面进行, 表现为事件结点, 但对于链接跳转或表单提交这些事件, 后续事件难以获取, 各个页面中的事件结点无法形成事件流。因此, 需要对不同Web程序进行不同的分析, 我们以JSP程序为例。首先给出事件流图的定义。

定义1一个事件流图EFG (Event Flow Graph) 是一个有向图。其中, N是顶点集合, 包含三种结点:标签事件结点, 非标签事件结点和页面结点。E是顶点间的有向边集合, 包含三种有向边:指向页面的边, 标签事件之间的指向边 (表示标签之间有依赖关系) , 标签事件指向非标签事件的边。

标签事件结点包括HTML标签, 如, 等。这些标签事件通常直接反应界面与用户交互行为, 如输入登陆用例中输入用户名密码与

标签, 点击超链接与标签。

非标签结点包括JSP元素及内置对象行为, 如, request.set Parameter等。用户行为产生的数据、对象等通常可以保存在内置对象中, 因此对内置对象的行为的分析可以间接描述用户行为。

为了将各页面提取出的事件流合并成事件流图, 我们规定了每个页面也作为一个结点。各页面之间通过事件流图中的边连接。

1.4 Web界面用户行为模型

为了方便对Web界面中事件流的提取, 我们以形式化方法将Web界面的用户行为建模。这里, 我们采用UIML (用户界面标记语言) 中的行为模型[14,15]。UIML是一种陈述性的, 基于XML的元语言, 用以描述用户界面。我们关心的主要是UIML中对于UI行为的描述。UIML使用标签描述用户与UI交互时产生的动作 (action) 。标签属于标签的子标签, 建立在基于规则 (rule) 的语言上, 每个规则包含一个条件 (condition) 和一个动作序列 (actions) 。条件为真时, 动作序列被执行。每个动作完成以下事情:改变UI某组件的属性;调用某个脚本语言中的函数;调用后端对象的方法;抛出事件。UIML允许两种condition:第一种是事件被激活, 另一种是当事件被激活, 且与事件相关的某个数据的逻辑表达式为真。

由于UIML语言目前还不支持JSP程序界面描述, 我们需要对该语言规范加以扩展以符合我们的需要。首先, 我们分析Web界面的行为都是以页面为基础的, 为了进行全局分析, 我们对每个提取出的事件增加页面信息, 在标签中我们增加了from和to属性, 表示该事件的控制流流向, 如一个超链接产生的“点击链接跳转页面”的事件, 在标签下的里, 我们添加from属性, 值为该超链接所在页面, 而在标签下的里, 我们添加to属性, 值为该超链接所转向的页面。这样, 我们就有了一条基本的事件流, 该事件流反映了用户点击超链接跳转页面这一行为。

HTML标签及产生的用户行为的提取如表4所示。

2 生成事件流图

我们以UIML行为模型为输入, 提取出其中的事件结点与事件流。对于大部分的事件结点, 直接在两结点间建立一条有向边即可, 如标签所产生的事件流, 在标签事件结点与目标页面事件结点间建立有向边。但对于内置对象对应的事件结点, 由于我们处理过程一次处理一个页面, 所以这些对象事件的定义-使用链在首次提取时不能清晰给出, 因此大多数这类结点在UIML行为模型中表示为结点到页面的事件流。但在对UIML行为模型进行全局分析时, 可以找出这类定义-使用链, 从而给出具体的依赖关系。我们以JSP程序CDShop中的session为例, 在cdlist.jsp中, 使用了session.get Attribute (“userid”) 方法获取session对象中的userid属性;在login.jsp中, 使用了session.set Attribute (“userid”, userid) 方法将userid属性存入session对象中。我们提取事件结点的时候, 记录两条内置对象行为。根据表3所分析的内置对象传递参数的方式, 容易得出两个事件间存在依赖关系, 并由此提取出事件流, login.jsp中的session.set Attribute (“userid”, userid) 到cdlist.jsp中的session.get Attribute (“userid”) 。

构建事件流图的算法如算法1所示。但由此生成的事件流图均属于孤立结点之间的联系, 并未综合考虑控制这些事件发生的代码的行为。因此针对单个的事件结点或事件流, 我们无法获得清晰的用例执行流程, 仅使用这些事件无法顺利实现用例。

算法1生成事件流图的算法流程

3综合事件流图和控制流图

3.1 生成单个Web页面的控制流图

在[16]中作者提出了从目的成功语句出发, 以必经结点为基础的用例结构识别方法。该方法更接近用例本质, 理论基础较强[17], 且能有效识别普通Java程序中的用例结构。因此, 本文利用该方法对单个Web页面进行控制流分析和必经分析, 得到各个页面独立的控制流图。

3.2 合并事件流图和控制流图集合流图

事件流图中的每个事件流 (有向边) 都能体现系统与用户交互行为, 流图上也不存在像控制流图中的控制关系, 因此我们将所有事件流都加入必经关系中。

针对每个事件流图中的事件结点, 我们首先判断其处于控制流图中的哪一个基本块, 然后将事件流图中的边转化为各个基本块之间的有向边, 从而形成整个Web页面间的必经结点流。从目的成功语句所在的基本块到程序入口的所有路径都属于该用例范畴。

综合事件流图与必经结点控制流图的算法如算法2所示。

算法2合并事件流图和控制流图的算法过程

4 综合识别用例结构

在得到的综合流图中, 如果继续按照基于必经路径的用例识别方法, 会找出很多冗余的部分。因为我们对于事件流图是没有按用例区分的, 加入必经结点控制流图后, 连接各个页面控制流图的事件流无法确定属于某个用例, 因此, 我们按照以下方法识别用例结构。

首先, 确定用例的目的成功语句集合, 确定其所在的基本块, 逆着控制流方向找出所有到程序入口的路径, 在发现有页面跳转动作时 (有事件流边经过) , 我们需要人工判断该边是否属于本用例, 如果是, 则加入路径, 如果不是则删除, 以精确识别用例结构。我们将页面跳转时的转出结点称为阶段性目的成功语句。在此过程中, 需要删除的主要是一些基础用例, 比如用户登录, 因为大多数用户行为都必须先实现该用例。如果我们首先识别这类常用且简单的用例, 那么在识别较为复杂的用例时, 就不需要进行人工干预。

在综合流图上进行用例识别的算法如算法3所示。

算法3在综合流图上进行用例识别的算法过程

5 实验结果与分析

本次实验选取了基于Web的网上购买CD的商务应用系统CDShop, 它采用JSP+My Sql的前台和数据库。该系统用例分为两类, 第一类针对普通用户, 第二类针对管理员用户。我们选取第一类用例中的普通用户登录及购买CD两个用例, 第二类用例中的添加CD、查看订单、修改用户信息这三个用例。

实验结果如表5所示。与之前的方法相比, 本文提出的方法不仅可以给出与用例相关的页面集合, 且识别粒度较细, 可以在页面范围内进行用例结构识别, 更为准确的给出用例边界。

6 结论

本文提出了一个新的Web程序用例结构识别的方法, 该方法针对Web页面用户行为的特点, 对用户在Web界面的行为建模, 并由此模型提取出表示用户行为的事件流, 结合针对普通程序的以必经结点为基础的用例识别方法进行用例识别。实验结果表明, 该方法能有效识别Web程序中的用例结构, 尤其能够针对Web程序中的前端页面进行细粒度的识别。

摘要:本文利用程序静态分析技术对Web程序中的用例识别进行了深入研究。对Web页面的用户行为进行了深入分析并建模, 从行为模型中提取出描述整个系统中用户行为的事件流图, 结合采用现有的从目的成功语句出发、以必经结点为基础的用例识别方法, 从各个Web页面中提取的独立控制流图, 形成全局控制流图, 进行全局用例识别。与以前已有工作相比, 本文考虑了Web程序的特点, 尤其是前端程序如何实现用户行为, 并在前端程序中进行精确的用例识别。本文采用目前使用较为广泛的JSP程序进行了实验, 结果表明该方法能够有效识别JSP程序中的用例结构。

静态识别 篇6

目前, 新疆油田数据库中已存有大量的功图数据和功图解释成果数据,这些数据是由功图仪现场测试、专家分析确认后入库的功图数据和解释成果数据,具有重要的参考价值。 为了减轻油田生产业务人员、管理人员重复解释功图的工作量,提高功图诊断的时效性,本文介绍灰度图像人脸识别算法的应用研究。

2实测油井示功图常规分析方法

所谓理论示功图是比较规则的平行四边形, 而实测功图由于多种因素的影响(如:砂、蜡、气、黏度),图形变化很复杂,各不相同。 因此,要正确地分析抽油井的生产情况,必须全面掌握油井动态、静态资料以及设备的状况,结合示功图的变化找出油井的主要问题,采取适当的措施,提高油井产量和泵效。

传统分析示功图的方法是将示功图分割成4块, 进行分析对比,找出泵工作不正常的原因,提出解决问题的措施。 即:左上角主要分析游动凡尔的问题,缺损为凡尔关闭不及时,多一块为出砂并卡泵现象;右上角主要分析光杆在上死点时活塞与工作筒的配合情况;右下角主要分析泵充满程度及气体影响情况;左下角主要分析光杆在下死点出现的问题,如:固定凡尔的漏失情况等。

3人脸识别算法的研究

人脸识别是模式识别领域内的一个前沿课题, 有着十分广泛的应用前景。 人脸识别技术是基于人的脸部特征,对输入的人脸静态图像或者视频动态图像进行分析、 处理后, 给出人脸形状、大小和各个主要面部器官的位置信息,并依据这些信息,进一步提取每个人脸中所蕴涵的身份特征, 与已知的人脸进行比对,从而识别每个人脸的身份。

3.1人脸识别的主要技术方法

(1)几何特征识别方法。 几何特征可以是眼、鼻、嘴等的形状和它们之间的几何关系。 这些算法识别速度快,需要的内存小,但识别率较低。

(2)基于特征脸(PCA)的人脸识别方法。 特征脸方法是基于KL变换的人脸识别方法,KL变换是图像压缩的一种最优正交变换。 高维的图像空间经过KL变换后得到一组新的正交基,保留其中重要的正交基,由这些基可以张成低维线性空间。 如果假设人脸在这些低维线性空间的投影具有可分性,就可以将这些投影用作识别的特征矢量,这就是特征脸方法的基本思想。 这些方法需要较多的训练样本,而且完全是基于图像灰度的统计特性的。

(3)基于神经网络的人脸识别方法。 神经网络的输入可以是降低分辨率的人脸图像、局部区域的自相关函数、局部纹理的二阶矩等。 这类方法同样需要较多的样本进行训练。

3.2人脸识别系统的处理过程

一般来说,人脸识别系统包括图像摄取、人脸定位、图像预处理及人脸识别(身份确认或者身份查找)。 系统输入一般是一张或者一系列含有未确定身份的人脸图像,以及人脸数据库中的若干已知身份的人脸图像或者相应的编码,而其输出则是一系列相似度得分,表明待识别的人脸的身份。

人脸识别技术中被广泛采用的是区域特征分析算法,它融合计算机图像处理技术与生物统计学原理于一体,利用计算机图像处理技术从视频中提取人像特征点,利用生物统计学的原理进行分析并建立数学模型,即人脸特征模板。 利用已建成的人脸特征模板对被测者的面像进行特征分析, 根据分析的结果来给出一个相似值,通过这个值即可确定是否为同一人。

4基于静态灰度图像人脸识别算法的油井功图诊断方法的研究

基于灰度图像人脸识别算法的思想, 我们把采集到的油井示功图进行数字化和图像灰度分布归一化处理, 然后进行特征维数压缩,最后提取相应的特征值进行识别。

因此,我们将示功图置于一个标准2×1矩形内,以载荷和位移的最大值和最小值为边界,然后将其分成网格,网格数为M(64)×N(32),灰度矩阵完全是依据示功图的形状为基础而构成的,为方便计算机编程处理,首先根据示功图网格的规模数将网眼初始化为“64”或者按实际情况进行扩大,然后我们以“1”为边界,按照等高线的原则进行赋值,每远离边界一格其灰度值将增加一级,边界外部每远离边界一格其灰度值将减少一级,最后检查矩阵中的功图是否完全封闭,如果存在断点,在相邻两点中插 “1” 补齐, 使其完全封闭, 直至整个网格全部填充完毕后赋值结束,如图1所示。

4.1灰关联度分析诊断示功图方法的思想

油井示功图经过灰度处理后, 分别将正常状态和异常状态的样本序列作为参考序列, 通过对序列之间变化趋势的相似或相异程度来衡量样本的接近程度, 对系统运行状态的动态过程做出量化分析,进而对系统的运行状态做出诊断。 灰关联分析的技术内涵是首先获取序列间的差异信息,并建立差异信息空间, 然后建立与计算差异信息的关联度, 最后建立因素间的序列关系并进行分析的过程。

由于事物发展过程存在相似性和相近性两个方面, 因此兼顾两者提出了一种灰关联度的方法,即ABO型关联度。

对示功图进行量的描述是图像灰度统计的过程, 灰度矩阵反映了图像灰度分布情况, 依据示功图进行处理所得到的灰度矩阵,取灰度矩阵的6个统计特征作为灰度直方图的表征,分别是灰度均值、灰度方差、灰度偏度、灰度峰度、灰度能量、灰度嫡。 如图2所示。

待测示功图曲线与特征库中的示功图曲线之间的关联程度, 主要是用关联度的大小次序描述, 而不仅仅是关联度的大小。 在各关联度计算出来以后,将待测功图特征向量与N个标准参考特征向量的关联度从大到小排序, 就可以得到不同功图的特征模式对待测功图特征分析影响的重要程度。 根据关联度的性质, 当待检测功图的特征向量与某一标准参考功图的特征向量关联度最大时, 则可以认为该待检测功图属于相应的参考功图特征模式,从而达到对示功图故障诊断的正确分类和识别。

4.2利用灰度图像人脸识别算法诊断示功图的步骤

首先建立示功图的特征库。 即将新疆油田历史功图数据和专家确认过的解释成果数据提取出来进行归类合并, 用统一编码的方式规范功图解释结果, 并且每种解释结果对应大量的历史功图数据, 将这些功图数据进行数字化处理后存储于关系数据库(oracle)中,且与功图解释结果、诊断编码一一对应。 如图3所示。

然后, 将当前采集的功图和特征库中的功图分别进行灰度图像归一化处理。 即将采集功图与特征库功图分别放置到灰度矩阵中进行图像归一化处理,并生成相关特质值。

最后,将采集功图与特征功图的灰度图像进行比对。 即将当前采集功图的灰度特征与特征功图的灰度特征进行检索、比对, 选取比对结果(相似度)值最高的特征功图解释结果作为当前功图的解释结果,完成功图诊断。 具体诊断步骤如图4所示。

5应用效果

抽油井故障智能诊断可以依据功图特征和静态灰度图像人脸识别算法,采取与建立的功图特征数据相比对的方法,通过计算相似度或相近度,即可实现抽油井凡尔漏失、气锁、气影响、卡泵、柱塞脱、供液不足、上挂(防冲距过大)、下碰(防冲距过小)、 筛管堵、杆断脱、蜡影响、连抽带喷等功图的快速诊断。

图 4 运用灰度人脸识别算法诊断示功图的步骤

功图特征法在实际的使用中, 由于每口抽油井的泵深和载荷不同, 致使一个区块的功图特征与另一区块功图特征相互排斥。 因此,我们将功图特征值由6个扩充为12个(如表1所示), 可有效地对比功图的相似度(如图5所示),从而提高功图诊断的符合率。

下面以新疆油田某井为例,将当前采集的功图与特征库中的特征功图进行灰度归一化处理后,比较其相似度。 比较结果相似度93.98%,取特征功图解释结果作为当前功图的解释结果,即气影响。 再结合产液量、产油量、产气量、动液面等参数进行二次判断,最终确认上述功图诊断结果正确。 如图6所示。

单从一幅功图的特征来看也可以有两种解释结果,如:断脱和凡尔漏的功图极其相似,快速诊断可能会给出两个诊断结果, 供用户参考, 所以必须要结合参数进行二次判断才能得到最终的解释结论。 参数判断的依据如表2所示。

6结束语

目前,人脸识别技术主要应用于企业、住宅安全管理,电子护照及身份证,公安、司法和刑侦,信息安全等领域。 本文首次将此项技术与灰度图像法相结合,在油井示功图识别、诊断中进行应用,与油井常规示功图诊断相比能够实现快速诊断,且具有较高的准确性,为油井智能诊断提供了可靠的依据,同时也为智能新疆油田建设提供了一项技术支持。

上一篇:大学英语教学设计下一篇:供应物流系统