APP下载

基于Kinect的动态手势识别*

2018-01-26董洪伟张明敏潘志庚

传感器与微系统 2018年2期
关键词:指尖手势个数

王 兵,董洪伟,张明敏,潘志庚

(1.江南大学 物联网工程学院,江苏 无锡 214122;2.浙江大学 计算机科学与技术学院,浙江 杭州 310000;3.杭州师范大学 数字媒体与人机交互研究中心,浙江 杭州 310000)

0 引 言

手势作为在人机交互和虚拟现实中的巨大作用,得到了很多学者的关注和研究。 Nurettin使用6个自由度的磁运动跟踪装置捕获人手的运动轨迹,并通过8个不同的运动方向来表示运动手势[1]; Kurakin A 使用了动作图识别动态手势[2]; Hsieh C C使用了Haar特征和支持向量机(support vector machine,SVM)识别动态手势[3];陈鹏展等人提出了使用加速传感器识别动态手势[4];沈爱敏等人提出了使用手机加速传感器的静态手势识别[5];王西颖等人[6]采用了隐马尔可夫模型模糊神经网络(hidden Markov model-fuzzy neural network,HMM—FNN)模型识别复杂的动态手势; Premaratne P[7]提出了使用手势轨迹运动方向变化的角度作为特征,并使用HMM识别动态手势。Ren Z等人[8]利用了Kinect研究手势识别。

指尖检测目前算法很多,例如文献[9]在手势分割的基础上采用模板匹配的指尖检测方法实现手势识别。文献[10]通过基于曲率的指尖检测方法。本文在实验中采用基于像素分类的指尖检测方法[9,11],不仅能够得到手指的个数还能得到指尖的位置。

本文针对手势分割问题,利用静态手势作为一个动态手势的开始点和结束点;在特征选取上,使用Premaratne P[7]的轨迹的方向变化角度特征来识别动态手势,但文献[7]中直线段和轨迹拟合的方式来计算该角度,具有很大的局限性,本文首先利用Kinect获取人手的位置,然后利用深度信息分割出人手的区域;随后对该区域应用基于像素分类的指尖检测算法[9,11]得到指尖点的个数和位置,以左右两只手的手指个数作为区分动态手势的开始点和结束点。最后提取轨迹的方向变化角度作为特征,使用HMM来对动态手势分类。

1 手势分割和指尖检测

1.1 基于深度图的手势分割[11]

1)使用NITE库找到手的中心点位置(Xc,Yc)和该点的深度值D。

2)(Xc,Yc)为中心,构造2个包围盒进行手势分割。第一个包围盒针对深度方向,深度图中深度值d在区域[D-Td,D+Td]范围内,其中,Td设定的阈值;第二个包围盒针对人手大小。深度图上点P(X,Y)满足

Xc-Tx≤X≤Xc+Tx

Yc-Ty≤Y≤Yc+Ty

式中Tx和Ty为需要设定的阈值。图1为通过上述方法得到的人手区域。

图1 手势分割图像

图2 基于像素分类的指尖检测

1.2 指尖检测

根据设定的2个阈值R1和R2将手势分割之后的二值图像分为5类,分别为:

1)非手指区域:根据手势分割之后的二值图像直接进行判断,如图2(a)中的A点;

2)手指边缘区域:如图2(a)中的B点,在以B为圆心、R1为半径的圆中,手指区域所占的比例较小;

3)手指指尖区域:如图2(b)中的D点,在以D为圆心、R1为半径的圆中,手指区域所占的比例较大,同时在以D为圆心、R2为半径的圆中,与手指区域交点仅有2个;

4)手指非指尖区域:如图2(a)中的C点,在以C为圆心、R1为半径的圆中,手指区域所占的比例较大,同时在以C为圆心、R2为半径的圆中,与手指区域交点有4个;

5)手掌区域:以R1为半径的圆中,手指区域占得比例较大,但以R2为半径的圆中,与手指区域没有交点。

在对手势分割之后的二值图像进行像素分类之后,根据手指指尖二值图像查找指尖轮廓,并进行椭圆拟合,得到指尖位置和指尖个数。

实验中,为了提高算法的运行速度,将该算法在计算统一设备架构(compute unified device architecture,CUDA)上实现。由于需要对所有的像素进行分类,本文将每一个像素分类对应着一个线程,最终在实验中每一个线程块线程个数M=128,人手部区域像素个数设定为N=160×160,线程块的个数为K=(N+M-1)/M。图3显示本文指尖检测的效果。

图3 指尖检测效果

2 动态手势特征提取和识别

2.1 动态手势特征提取

与文献[7]不同,为了能够识别更多的动态手势,本文规定逆时针的角度为正,顺时针的角度为负。通过分析轨迹计算手势运行轨迹中的角度变化点的位置,然后求出角度的值,实验中,该角度值的范围为[-π,π];求出角度后需要对角度进行编码,便于识别。

2.1.1 运动方向变化角度的计算

运动方向变化角度(change-of-direction angle),即轨迹中存在的转弯处角度。如图4为本文定义的运动方向变化角度。

图4 运动方向变化角度的定义

图4(a)~图4(c)为其中3种情况下的角度,图4(a)为逆时针的-π/2,图4(b)为π,图4(c)为顺时针的π/2。当用户在Kinect面前绘制完轨迹之后,使用以下步骤来计算轨迹的方向变化角度:

1)针对轨迹的X和Y坐标,分别使用均值滤波来降低噪声。

(1)

(2)

(3)

(4)

(5)

Anglei=arccos(Ai×Bi)

(6)

式中ε=1×10-6,m=3。

3)对步骤(2)求得的角度进行分析,找出其中的突变点,然后将起始点、突变点和终点依次按顺序计算突变点处的角度。

2.1.2 方向变化角度的编码

求得轨迹的方向变化角度之后,对这些角度进行编码。具体编码如表1。

表1 角度编码

2.2 动态手势识别中的HMM

在定义的动态手势(英文大写字母)中,根据手势的初始方向将大写英文字母分为4组,具体如表2。

表2 手势的初始方向

按照上面4组字母,构造4组HMM,分别针对于4种手势的初始方向。动态手势模型(大写英文字母)的训练使用Baum-Welch算法,对于每一个手势HMM的状态个数大多设置为方向变化的个数,设置A为10,J为8,I为6,Z为3,F为4,其余均为方向变化的个数。在训练每一个动态手势(大写英文字母)模型之后,对于一个动态手势的识别,先计算初始方向,再计算该方向下的每一个模型的概率,概率最大对应的模型为得到的结果。

2.3 动态手势的开始和结束

采用静态手势判断一个动态手势的开始和结束。当左右手的手指个数均为5时,认为已定位好手在界面上的位置;当左手手指个数为0,右手手指个数为5时,规定清除屏幕上的轨迹;当左手手指个数为0,右手手指个数为1的时候,手的运动轨迹作为动态手势;当左手手指个数为5,右手手指个数为0的时候,对该轨迹提取拐角,并计算识别轨迹的语义,具体见表3。

表3 左右手手指个数的含义

3 实验结果与分析

采用了英文大写字母中的16个字母,当手在空中运动时通过 Kinect获取深度图数据,然后,通过NITE得到手的中心位置并通过深度信息得到手区域,图1为本文得到的人手区域分割之后的效果图;然后,通过CUDA计算左手和右手的手指个数和位置,表4为针对右手指尖个数,分别为1,2,3,4,5时,每一种均采集500帧统计指尖检测的耗时和误检个数,当采集这500帧时,令右手较大幅度的运动。从表4中可以看出:该算法耗时较小,准确性较高,可以保证系统的实时性和鲁棒性;得到指尖个数后按照表3确定该静态手势的含义;当确定当前状态属于绘制的动态手势(大写英文字母)时,记录该动态手势的轨迹,然后去噪,提取特征,图5为对字母A,E,F和H求得的角度,图6为计算方向变化的位置,从图5和图6可以看出:每一个字母的方向变化个数和角度变换图的极值点个数一一对应。实验中,针对每一个字母,采集了100个测试样本,对每一个动态手势进行测试。统计实验结果,如表5~表8所示。

图5 字母的方向变化角度特征

图6 字母的点序列在每点处的角度变化

表4 指尖检测耗时和误检情况

表5 A M N P R识别结果

表6 H K W X识别结果

表7 E F G识别结果

表8 Z J T I识别结果

4 结束语

针对动态手势的轨迹,提取拐角并对角度编码,取得了不错的效果,能够识别16种大写英文字母。但算法也面临着如何计算曲线角度的问题,例如字母C,O等,正在考虑将运动轨迹的方向变化角度和运动方向结合来识别更多的动态手势。

[1] Kiliboz N C,Güdükbay U.A hand gesture recognition technique for human-computer interaction[J].Journal of Visual Communication & Image Representation,2015,28:97-104.

[2] Kurakin A,Zhang Z,Liu Z.A real time system for dynamic hand gesture recognition with a depth sensor [C]∥2012 Proceedings of the 20th European Signal Processing Conference(EUSIPCO),IEEE,2012:1975-1979.

[3] Hsieh C C,Liou D H.Novel Haar features for real-time hand gesture recognition using SVM[J].Journal of Real-Time Image Processing,2015,10(2):357-370.

[4] 陈鹏展,罗 漫,李 杰.基于加速度传感器的连续动态手势识别[J].传感器与微系统,2016,35(1):39-42.

[5] 沈爱敏,张正道.基于手机加速度传感器的静态手势身份认证方法[J].传感器与微系统,2015,34(6):39-42.

[6] 王西颖,戴国忠,张习文,等.基于 HMM—FNN 模型的复杂动态手势识别[J].软件学报,2008,19(9):2302-2312.

[7] Premaratne P,Yang S,Vial P,et al.Dynamic hand gesture recognition using centroid tracking[C]∥International Conference on Intelligent Computing,Springer International Publishing,2015:623-629.

[8] Ren Z,Meng J,Yuan J,et al.Robust hand gesture recognition with kinect sensor[C]∥Proceedings of the 19th ACM Inter-national Conference on Multimedia,ACM,2011:759-760.

[9] 晏 浩,张明敏,童 晶,等.基于 Kinect 的实时稳定的三维多手指跟踪算法[J].计算机辅助设计与图形学学报,2013,25(12):1801-1809.

[10] 李博男,林 凡.基于曲率的指尖检测方法[J].南京航空航天大学学报,2012,44(4):587-591.

[11] Letessier J,Bérard F.Visual tracking of bare fingers for inter-active surfaces[C]∥Proceedings of the 17th Annual ACM Symposium on User Interface Software and Technology,ACM,2004:119-122.

[12] Vezhnevets V,Sazonov V,Andreeva A.A survey on pixel-based skin color detection techiques[C]∥Proceedings of Graphicon,2003:85-92.

猜你喜欢

指尖手势个数
治理“指尖乱像”不宜一散了之
怎样数出小正方体的个数
虔诚之花在指尖绽放
等腰三角形个数探索
挑战!神秘手势
指尖上的生活,指尖上的美
怎样数出小木块的个数
V字手势的由来
怎样数出小正方体的个数
指尖童话