基于样本轨迹的Kinect手势识别算法

2015-04-02 12:10王颖��王玉苹
软件导刊 2015年2期
关键词:手势识别算法

王颖��王玉苹

摘要:实现基于序列图像的手势轨迹识别,提出一种基于位置关系的手势轨迹识别方法,利用Kinect体感设备传感器提取轨迹序列,分析坐标序列的轨迹样本,通过黄金分割实现轨迹的匹配与识别。实验结果证明,该方法能有效识别手势轨迹。

关键词关键词:Kinect;手势识别;黄金分割搜索;样本轨迹;算法

DOIDOI:10.11907/rjdk.143891

中图分类号:TP312

文献标识码:A文章编号文章编号:16727800(2015)002005402

基金项目基金项目:北京服装学院2014年青年创新基金项目(2014AL-34 )

作者简介作者简介:王颖(1975- ),女,河北保定人,硕士,北京服装学院计算机信息中心讲师,研究方向为人机交互技术。

0引言

在人机交互中,手势具有直观性、自然性的特点,其已成为人机交互的一种重要手段[1,2]。手势轨迹是按照某种规则识别出挥动手臂所要表达的含义,手势轨迹信息应用有很强的可移植性和可扩展性。然而,基于视觉的手势轨迹识别的前期分割易受光照、背景、摄像头特性等因素影响,识别率不高。微软的Kinect体感设备通过传感器识别人体关节的位置坐标,获取有关数据,为手势轨迹识别提供了良好的基础[3,4]。利用Kinect坐标信息轨迹对深度图像进行手势分割和识别,不受光照、背景等因素的影响,从而提高了手势轨迹识别的稳定性和鲁棒性。

1基于样本的动作检测

假设动作可以被记录并序列化,如果当前动作是已发生动作中的一个,那么其就可以被检测出来。主要方式是快速比较两个动作的数据是否匹配[5,6]。动作是一系列坐标序列,通过坐标记录其到传感器的距离,因此需要研究数据比较算法,将规格化数据变换到一个统一的参考空间下。

假设:当前坐标序列为:

P={p0,p1,…,pn-1}

(1)生成具有特定数量的坐标点的动作。

假设样本数量为M,定义采样间距Lavg=(n-1)/(M-1),pi-1与pi之间的距离为Li,i-1。在根据样本数量对坐标序列进行采样的过程中,需要重新计算采样点的新坐标。做法是遍历坐标序列的点,如当前点与前一个采样点的距离达不到采样间距,继续往前遍历,当达到或者超过采样间距时,则计算新的坐标点。定义遍历时累计的距离变量Lcur,当Lcur+LI,i-1>=Lavgcur时,计算新的坐标点:

p′i=pi-1+(Lavg-Lcur/Li,i-1)*(pi-pi-1)(1)

得到新的坐标序列:

P′={p′0,p′1,…,p′n-1}

(2)旋转坐标点,使得第一个点的方向角度为0。

为使匹配的两个序列有统一的起点,将坐标序列旋转,从而使第一个坐标点的方向角度为0。计算坐标序列的中心坐标,并得到第一个坐标点相对于中心坐标的方向角。以此方向角为旋转角度,利用二维空间旋转矩阵得到新的坐标序列。

(3)将坐标值映射到[0,1]区间。

如得到的坐标序列的数值范围不统一,将带来匹配的不准确性。为此,需要将坐标范围统一到[0,1]区间内。

(4)规格化动作序列点的原点。

经过上述处理,动作轨迹的序列点具备了统一的方向和坐标,还需对原点进行处理,以便具有与样本相同的参考点。规格化步骤如图1所示。

经过规格化操作,即可进行匹配。将长度一样的坐标点序列规格化为统一的尺度、方向和中心。

黄金分割搜索(Golden Section Search)[7]是一种通过不断缩小单调连续函数极值的范围,找到极值的方法。利用黄金分割搜索方法不需使用导数求取函数的极值,具有很强的实时性和便捷性。

假设函数f(x)在[a, b]上连续,并且是单调函数,即f(x)在[a, b]间只有一个极小值,或者只有一个极大值。使用对分方法,通过比较函数值将包含极值的区间变小。所设计的算法需满足两个目标:一是在区间检索中能够找到最优的区间减小因子;二是减少函数调用的次数。

图1轨迹序列规格化

计算中间点m=(a+b)/2,求x1和x2,定义x1=m-δ/2,x2=m+δ/2,使得f(x1)≠f(x2)。如果f(x1)

图2为找出最小值的步骤。F(x)的函数值位于垂直坐标轴上,参数x位于水平坐标轴。可以看出,有3个位于函数f(x)上的值被计算出来:x1,x2和x3。可见f(x2)小于f(x1)和f(x3), 所以很明显的,最小值处于x1和x3之间。

图2最小值求解

接下来的步骤是计算函数位于另一个点x4的值。从图2可以看出,如果函数值落在f4a,最小值则在x1和x4之间新的点将是x1,x2或x4;如果函数值为f4a,新的点将是x2,x4或x3。因此,无论是哪种情况,都可以建立一个新的更狭窄的区间,用于搜索函数的最小值。

为提高算法效率,只在每个步骤中只求一次函数值。相对于当前检索区间,需要设立一个常数因子,称为c。在区间[a,b]中的为x1和x2,有以下两种情况:

(1)如f(x1)

x2-a=c(b-a)x2=a+cb-cax2=(1-c)a+cb(2)

(2)如果f(x1)>f(x2),为使[a,b]=[x1,b],区间作如下调整:

b-x1=c(b-a)-x1=cb-ca-bx1=ca+(1-c)b(3)

这样,只要求出C,就可以得到位置x1和x2。不失一般性,考虑f(x1)

如果f(x1)

(1)假设在x1=1-c的左边得到新的函数值,那么x1是区间[0,c]右边界,由式(2)得

1-c=(1-c)0+ccc2+c-1=0(4)

c=(-1+5)/2≈0.6180。

(2)假设在x1=1-c的右边得到新的函数值,那么x1是区间[0,c]的左边界。

1-c=c0+(1-c)c(1-c)2=0(5)

由式(5)得c=1, 这样区间就没有减小,排除这种可能性,有规则如下:如果f(x1)f(x2),使用式(2)计算新的x2值。

2实验结果

利用本文算法进行测试实验,完成两种手势:一个是左右挥动,一个是圆形手势。分别采集了5个人的手势轨迹,每个手势每个人做10次。如图3所示,左图手向左运动代表向左挥动,右图代表圆形手势,

图中的虚线为手运动轨迹。

图3手势识别结果

表1给出了5个实验者和2种手势的识别率,可以看出,本文算法具有很高的识别率,满足应用需求。

表1二种手势的识别数据分析

手势[]向左挥动[]向右挥动[]圆形挥动

实验次数[]50[]50[]50

识别次数[]50[]49[]46

识别率(%)[]100[]98[]92

3结语

手势具有直观性、自然性的特点,其已成为人机交互的一种重要手段。手势轨迹则是按照某种规则识别出手势表达的含义,手势轨迹信息的应用有很强的可移植性和可扩展性。本文采用微软Kinect传感器获取相关数据,对图像进行手势分割和识别,不受光照、背景等因素的影响,提高了手势轨迹识别的稳定性和鲁棒性。

猜你喜欢
手势识别算法
基于MapReduce的改进Eclat算法
Travellng thg World Full—time for Rree
进位加法的两种算法
基于增强随机搜索的OECI-ELM算法
基于手势识别的工业机器人操作控制方法
一种改进的整周模糊度去相关算法