包莹莹, 王华君, 徐平平
(1.无锡太湖学院 工学院,江苏 无锡 214064) (2.东南大学 信息科学与工程学院,江苏 南京 211189)
基于关键帧和姿态描述语言的实时手势识别方案*
包莹莹1*, 王华君1, 徐平平2
(1.无锡太湖学院 工学院,江苏 无锡 214064) (2.东南大学 信息科学与工程学院,江苏 南京 211189)
针对现有人体动作识别方法的准确性和实时性不强等问题,提出一种基于关键帧和姿态描述语言(PDL)的实时手势识别方案.首先,利用Kinect摄像机获取手势视频帧,并通过NITE工具获得骨架关节点的三维坐标.然后,从视频序列中找出最能代表手势类型的关键帧.最后,提出一种姿态描述语言,根据关键帧中关节点的位置和角度信息,通过一系列规则对手势进行识别.实验结果表明,该方法具有较高的识别率和良好的实时性.
手势识别;骨架关节点;关键帧;姿态描述语言
随着人机交互的迅猛发展,人体动作识别在计算机视觉领域得到越来越多的应用[1].其中,手势动作定义为手和手臂形成的姿态.人体手势识别通常可分为两类[2]:基于模板匹配的方法;基于机器学习的方法.模板匹配方法中,将人体手势序列与模板数据进行匹配,根据相似度来识别动作.例如[3]提出一种多步线性规划和模板匹配的识别方法.然而,由于该方法只考虑局部特征,所以不能识别动作幅度较大的动作.机器学习方法中,通过提取动作特征样本,然后训练机器学习算法,得到一个分类器,以此实现对动作的识别[4].常用的方法如[5]提出基于隐马尔可夫模型(Hidden Markov Model, HMM)的识别方法,其从人体骨架中提取关节点特征,使用HMM对手势动作进行建模.然而,这种方法的性能过度依赖于训练集质量,稳定性不高.微软Kinect深度摄像传感器[6]为动作识别提供了有力工具,其能够克服光照等外界因素的干扰.基于Kinect传感图像和骨骼关节点定位技术,可获得人体运动的3D数据.当人进行不同动作时,各关节点的位置和关节点之间的角度信息也随之改变.因此,通过追踪关节点的坐标和角度信息,通过一定的规则判断,能够直接实现人体动作识别[7].[8]通过计算关节点之间的欧氏距离和角度,来识别手势动作,方法实现简单且较为有效.然而,其只使用简单的阈值判别法,存在较高的误判率,另外,其只进行了简单的4种手势动作识别,若添加动作种类,该阈值判别法的有效性将会降低.
为了提高基于关节点信息的手势识别性能,本文提出一种姿态描述语言(Posture Description Language, PDL),根据关节点信息,利用定义的规则对手势动作进行直观的识别分类.本文的创新点在于:(1)提出了一种PDL,根据肢体关节点信息,通过相应规则直观判断肢体动作,提高识别率和实时性.(2)通过堆栈结构存储手势视频.
在本文中,利用微软Kinect传感器捕获和追踪运动的人体,本文将人体特征点称为骨骼关节点.使用PrimeSense公司的NITE工具[9]追踪15个人体关节点,如图1所示.
从摄像机产生的深度图像中分割人体关节点.每个关节都在右手坐标系上具有一个三维坐标,坐标系的原点位于深度像机的镜头中[10-11].检测到关节点后,NITE实时追踪这些特征,用于后续动作识别.本文主要研究手势动作识别,所以只用到上半部分的关节点.但本文方法可以随时扩展来识别其他部位的动作.
2.1 本文手势识别的基本步骤
本文目标是构建一种记录动作观察量的直观方法,然后以一种特定方式(计算机语言脚本)将其作为一组规则,同时提出一种推理模块在线解释这些脚本.图2给出了本文方法框架.本文识别算法的输入数据为人体骨架关节点数据流,其由数据采集硬件和NITE库获得.本文方案中从获取特征点到手势识别的具体过程如下:
1) 解析由规则集合组成的输入PDL脚本,并构建解析树.
2) 启动数据捕捉模块.
3) 重复以下步骤,直到应用程序结束.
(1) 如果从数据捕捉模块获取到新数据(人体关节点信息),则使用当前时间戳将数据存储到内存堆的顶端.内存堆的每层包含两种类型数据:关节点集合和规则名称集合,这些规则为满足当前/先前关节点信息所代表的手势.本文中内存堆大小为100层(以20 Hz捕捉5 s的数据).
(2) 检查新关节点的值是否满足内存堆中任何规则,即这些规则的名字是否出现在堆的顶层.PDL脚本也考虑了先前捕捉的关节点.例如torso.x[0]是torso关节点的实际x坐标,同时torso.x[2]是相同关节点上两次迭代之前捕获的x坐标,这两层在内存堆顶层位置的下面.
(3) 如果任何一个规则都是满足的,则添加它的名字到相同层的内存堆顶端,即最后捕捉的关节点所存储的位置.由于堆的顶层有它自己的时间戳,所以检查规则需在一个给定时间内完成.规则检查是从内存堆顶端开始,直到在一些堆层中发现规则名称.该机制可以检查人体关节点位置(通过规则名字描述)的特定序列是否在给定时间周期内出现.人体关节点位置序列定义了本文识别的手势.
(4) 如果算法在步骤(3)中将规则名称添加到内存堆,则转到步骤(2)如果没有新的规则名可添加到内存堆,返回到步骤3且等待接收新数据.
2.2 PDL脚本规范
PDL脚本语言用于创建推理引擎的知识库.PDL脚本是一种规则集合,每个规则可能拥有无限数量的前提条件,通过操作符连接这些规则.在PDL中,前提条件称为逻辑规则.逻辑规则拥有两种值:真或假.除了逻辑规则,PDL脚本还包含数字规则(三维数字规则),数字规则进行一些简单数学操作,返回浮点值(三维浮点坐标).当一个数字规则通过关联操作联合其他数字规则时,数字规则可能转变成一种逻辑规则.
下面以一个“投降”手势动作为例,描述PDL脚本规范.“投降”动作的关节点示例如图3所示.例子1描述了用来识别“投降”动作的PDL规则:
例子1:
RULE RightElbow.x[0]> torso.x[0] & RightHand.x[0]> torso.x[0] & RightHand.y[0]> RightElbow.y[0] & abs(RightHand.x[0]- RightElbow.x[0])<50 & abs(RightShoulder.y[0]- RightElbow.y[0])<50;THEN RightHandPsi
RULE LeftElbow.x[0]< torso.x[0] & LeftHand.x[0] RULERightHandPsi & LeftHandPsi;THEN Psi 上例中,“投降”动作识别由3条PDL规则组成,第一条规则检查了右肘是否位于躯干的右侧、右手是否位于躯干的右侧、右手是否在右肘的上面、右手的垂直坐标与右肘的垂直坐标差值是否小于50 mm、右肩的水平坐标与右肘的水平坐标差值是否小于50 mm.第二条规则与第一条规则相似,描述了左手臂、左肩膀和左肘部.最后一条规则检查先前两条规则是否都满足. 例子2: RULE angle(neck.xyz[0]-RightShoulder.xyz[0],RightElbow.xyz[0]-RightShoulder.xyz[0])>160 & abs(angle(RightElbow.xyz[0]-RightShoulder.xyz[0], RightElbow.xyz[0]- RightHand.xyz[0])-90)<20 & RightHand.y[0]- RightElbow.y[0]>0;THEN RightHandPsi RULE angle(neck.xyz[0]-LeftShoulder.xyz[0],LeftElbow.xyz[0]-LeftShoulder.xyz[0])>160 & abs(angle(LeftElbow.xyz[0]- LeftShoulder.xyz[0], LeftElbow.xyz[0]- LeftHand.xyz[0])-90)<20 & LeftHand.y[0]- LeftElbow.y[0]>0;THEN LeftHandPsi RULE RightHandPsi & LeftHandPsi;THEN PsiInsensitive 例子2中,第一条规则检查了使用脖子和右肩定义的向量与使用右肘和右肩定义的向量之间的角度是否大于160°(两个向量近似平行).第二条规则检查了使用右肘和右肩定义的向量与使用右肘和右手定义的向量之间是否垂直.该规则也检查右手是否在肘部上面.第二条规则与第一条规则相似,但是应用于左手.如果先前两个规则都是满足的,则最后一条规则为真,即结论PsiInsensitive为真,这意味着该手势已经成功分类. 本文设定8种手势动作,各种手势的解释如表1所示. 表1 8种手势的定义Tab.1 The definition of 8 kinds of hand gestures 图4给出了这8种手势的关键帧.其中,一些手势具有相似的关节点轨迹(例如Swing中间部分可以被识别为Hand up),这样就能够更加准确的评估手势分类方法的性能.另外,本文通过Kinect摄像机获取图像序列,其存在深度测量随机误差,且随着与目标距离的增加而增加.实验中的摄像机误差为100 mm~1 cm,该误差影响NITE关节点的分割精度.本文将这些误差视作为干扰噪声,可用来评估本文识别方法的鲁棒性. 数据集中的手势数据可以分为两组[12]:使用单个关键帧描述的手势(如Head和Hips);需要多个关键帧描述的手势(如Clapping、Hand up、Swing、Waving、Rotate、Anti-rotate ).对第一组手势,PDL脚本的结构非常简单,它们仅需要处理一个PDL规则.第二组手势需要使用多个PDL规则,每个关键帧对应一个规则.下文中将举例讨论具有3个关键帧的“ Swing”手势. “Swing”手势主要由3个关键帧规则和两个序列规则描述.关键帧规则中,第一条规则检查手是否在头顶交叉,结论是HandsReverse;第二条规则检查两个手在头两侧是否具有相同的垂直高度;第三条规则检查双手是否位于头顶、肘部的胳膊弯曲且HandsReverse是否满足.序列规则中,在给定的时间约束内, sequenceexists函数的第一条规则用来检查规则结果jester2、jester1和jester2是否位于内存堆中.这意味着观察到的用户手势是否为首先伸展它们的手,然后在头顶交叉手,最后再伸展手.sequenceexists函数的第二条规则用来认证观察者是否首先交叉手,再伸展,最后再次在头顶交叉手.如果这些序列都被检测到,则“Swing”手势被识别.本文用于识别“Swing”手势的PDL脚本描述如下: RULE distance(RightHand.xyz[0],RightShoulder.xyz[0])> distance(RightHand.xyz[0],LeftShoulder.xyz[0]) & distance(LeftHand.xyz[0],LeftShoulder.xyz[0])> distance(LeftHand.xyz[0],RightShoulder.xyz[0]);THEN HandsReverse RULE angle(RightHand.xyz[0]-RightElbow.xyz[0], RightShoulder.xyz[0]-RightElbow.xyz[0])>140 & RightHand.y[0]>Head.y[0] & abs(RightHand.y[0]-LeftHand.y[0])<100 & not(HandsReverse);THEN jester1 RULE angle(RightHand.xyz[0]-RightElbow.xyz[0], RightShoulder.xyz[0]-RightElbow.xyz[0])>90 & RightHand.y[0]>Head.y[0] & abs(RightHand.y[0]-LeftHand.y[0])<100 & HandsReverse;THEN jester2 RULE sequenceexists("[jester2,1][ jester1,1] [ jester2,1]");THEN jester11 RULE sequenceexists("[jester1,1][ jester2,1] [ jester1,1]");THEN jester22 RULE jester11 & jester22;THEN Swing 4.1 实验设置 为了验证本文方法,利用Kinect摄像机采集了包含10个人 (5个男人和5个女人) 的手势动作视频记录作为测试集,每个人完成上述8类手势,每个手势做20次,即整个数据库包括1600个手势记录.其中,手势图像分辨率为640×480.所有参与者为不同年龄的健康成年人.实验在配置有Inter Core i5处理器、内存为4 GB、Windows7操作系统的PC机上进行. 4.2 实验结果 实验中,我们发现摄像机每秒捕捉帧数(fps)对分类性能的影响很大.其中,高帧率视频的识别率都较高,且方差较低,分类器性能比较稳定.这是因为,在低帧率视频中,最佳关键帧的图像可能没能捕捉到,进而影响识别性能.然而,若帧率过高也会增加识别方案的计算量.经过多次实验表明,当帧率设定为20 fps左右时,在识别准确率和时间方面都较好.表2给出了每秒帧数为20 fps时,各手势识别率的混淆矩阵. 表2 本文方法识别精度的混淆矩阵(每秒帧数为20 fps)Tab.2 The recognition accuracy confusion matrix of proposed method (the frames per second is 20 fps) 表3 各种识别方法的性能比较结果Tab.3 The performance comparison of various identification methods 对于每秒帧数为20 fps的动作视频,本文方法对各种手势的平均识别率达到了96.1%,其中“Hand up”和“Hips”手势都达到了 98%.而“Swing”、“Rotate”和“Anti-rotate ”的识别率相对较低.这是因为这些动作与其他动作存在一些较为相似的帧,导致误判,但识别率都达到了91%以上. 将本文方法与[5]和[8]方法进行比较,计算了所有手势类别的平均识别率和每个手势的平均识别时间,实验结果如表3所示.由表3可以看出,本文方法在识别率和识别时间方面都优于其他方法.这是因为,[8]采用简单的关节点信息和阈值判断,虽然其识别时间较短,但由于其缺乏考虑变化的空间角度信息,只有待识别手势非常适合标准动作时才能被识别,导致未识别率较高.[5]利用HMM对手势动作中的关节点特征进行学习和建模,一定程度上提高了识别率.然而,当特征较多时,其存在维数灾难问题,影响识别性能,并严重影响识别时间.本文方法中,通过提出的PDL和规则,根据关节点的位置和角度信息,直接识别手势动作.对于每个动作,都定义了详细的判断规则,使其具有较高的识别率和稳定性.另外,由于本文方法不需要进行特征学习等复杂计算,所以识别时间较短,实时性较好.另外,本文方法中可以随时添加定义新动作的规则,具有很好的可扩展性. 本文提出一种基于关键帧和PDL的实时手势识别方案.利用手势视频关键帧的骨架关节点的位置和角度信息,根据PDL规则识别手势.与现有方法相比,本文方法具有较高的识别率和实时性,对上述8种手势的平均识别率达到了96%,而平均识别时间仅为36 ms,完全符合高精度实时识别的应用要求. [1] 王向前, 张月芬. 四维时空兴趣点提取结合多流形判别分析的人体动作识别[J]. 湘潭大学自然科学学报, 2016, 38(1): 111-114. [2] 李庆, 师小凯. 基于隐马尔科夫模板模型的视频动作识别算法[J]. 武汉理工大学学报:信息与管理工程版, 2013, 35(6):789-793. [3] DENG T T, WANG Z L, ZHU M Q, et al. Ahierarchical algorithm for human posture recognition based on spatial and frequency domain features[J]. Moshi Shibie Yu Rengong Zhineng/pattern Recognition & Artificial Intelligence, 2011, 24(3):411-416. [4] 武东辉, 王哲龙, 陈野. 基于HMMs和SVM的人体日常动作序列分割识别研究[J]. 大连理工大学学报, 2015(4):411-416. [5] GU Y, DO H, OU Y S, et al. Human gesture recognition through a Kinect sensor[C]// IEEE International Conference on Robotics and Biomimetics,2012:1379-1384. [6] 朱国刚, 曹林. 基于Kinect传感器骨骼信息的人体动作识别[J]. 计算机仿真, 2014, 31(12):329-333. [7] LIU W T, CHEN A Y. Humanaction recognition based on Kinect and MCRF model[J]. Applied Mechanics & Materials, 2014, 68(7):3559-3563. [8] 谢亮, 廖宏建, 杨玉宝. 基于Kinect的姿势识别与应用研究[J]. 计算机技术与发展, 2013(5):258-260. [9] 刘瑶, 余旭, 黄智兴. 基于Kinect传感器的动态手势实时识别[J]. 西南大学学报:自然科学版, 2015, 37(8):132-137. [10] IWANE N. Arm movement recognition for flag signaling with Kinect sensor[J].Virtual Environments Hnman-Concputer Interfaces and mesaurement systems,2012, 35(4):86-90. [11] WEI Z Q, WU J A, WANG X. Research onapplied technology in human action recognition based on skeleton information[J]. Advanced Materials Research, 2013, 25(9):498-502. [12] 石祥滨, 刘拴朋, 张德园. 基于关键帧的人体动作识别方法[J]. 系统仿真学报, 2015, 27(10):2401-2408. 责任编辑:龙顺潮 Real-time Gesture Recognition Scheme Key Frame and Posture Description Language BAOYing-ying1*,WANGHua-jun1,XUPing-ping2 (1.School of Engineering, Taihu University of Wuxi, Wuxi 214064;2.School of Information Science and Engineering, Southeast University, Nanjing 211189 China) For the issue that the existing human motion recognition methods are poor in accuracy and real-time performance, a real time gesture recognition scheme based on key frame and posture description language (PDL) is proposed. Firstly, Kinect camera is used to obtain the gesture video frame, and the 3D coordinates of the frame joint point are obtained by the NITE tool. Then, the representative keyframes for gesture type are found out from the video sequence. Finally, a kind of posture description language is proposed, which uses a series rules to recognize gesture according the position and angle of the joint points in the key frame. Experimental results show that the proposed method has higher recognition rate and good real-time performance. human action recognition; skeleton joint point; key frame; posture description language 2016-04-07 包莹莹(1983-),女,江苏 宿迁人,讲师. E-mail:baoyingyingjs@sina.com TP391 A 1000-5900(2016)03-0078-063 PDL手势识别举例
4 实验及分析
5 结束语