基于Kinect的手势识别及在虚拟装配技术中的应用
2013-06-23陈艳艳陈正鸣周小芹
陈艳艳,陈正鸣,2,周小芹,2
(1.河海大学 物联网工程学院,江苏 常州 213022;2.江苏省输配电装备技术重点实验室 江苏 常州 213022)
基于视觉的手势识别,是通过视频图像信息获取人的手势姿态,对其进行分类识别的一种人机交互技术。它作为一门新兴的技术,近年来受到了众多国内外学者的关注。Kinect是微软公司推出的XBox 360的外接体感设备,以其深度数据的获取特点,成为手势输入设备的重点研究对象[1]。开源软件OpenNI(开放式自然交互)能够方便的访问和使用Kinect设备,但它只提供了基于手点的4种手势,微软的开发包中还没有集成手势引擎,这就需要根据实际需要开发手势识别引擎。
以人手的自然行为触发三维交互的相关研究在虚拟现实领域有着重要的理论价值和应用价值[2]。基于虚拟现实技术的虚拟装配系统是一个沉浸式或半沉浸式的虚拟环境,为解决产品的装配问题提供了一个低成本的快速手段[3]。目前,对于装配手段多采取数据手套[4]方式,但数据手套价格比较昂贵,设备繁重。而Kinect相对低廉,人手在操作时也更加自然方便。文中由此提出了基于Kinect的手势识别方法,用多个指尖的相对运动代替整只手,来完成虚拟装配过程。针对虚拟装配系统,设计了选取、移动、旋转和缩放等手势,以满足装配过程中的基本操作,并对Virtools装配环境中的关键问题作了说明。
1 手势识别系统
目前,OpenNI支持的手势过于简单,不能完全满足装配需求,因此本文开发了针对装配操作所需的几种手势,可以有效实现装配过程中的基本操作。手势识别系统框架如图1所示。
图1 手势识别系统框架图Fig.1 Structure diagram of the gesture regnization system
首先,通过Kinect获取深度图像的数据流,系统根据手势的深度位置分割出手势,得到手势的二值图像;其次,根据指尖特征,分割出指尖并有效跟踪目标的形变和运动;再次,根据手势特征进行分析,生成模型参数,根据模型参数对手势进行分类并按需要定义交互语义;最后,系统根据交互语义去驱动手势装配物体。
1.1 手势图像的采集与分割
Kinect采集到的深度信息保存在一个二维数组中,数组中的每一个元素表示该位置的深度像素点对应的实际物体的点到Kinect的距离,单位为mm。利用深度信息,将人手所在深度范围的图像提取出来。首先获得Kinect的深度图,利用Nite[5]模块跟踪手点位置,如图2(a)所示。在跟踪到手点位置后,根据手点的深度值做阈值截取,分割出到手的深度图。为了显示效果,对深度图中的手势区域与背景区域作二值化处理,利用轮廓检测,提取手势的最外层轮廓,实现手势分割。其次,考虑到手的摆放角度不一定正对摄像头,手臂就可能显示出来,因此利用以手点为中心的包围盒,来截取手区域部分。如图2(b)所示。
1.2 指尖检测与跟踪
想要满足装配操作的需求,仅仅一个手点显然不够,而指尖是手势识别中最为常用的特征点。目前,指尖检测算法中,模板匹配和轮廓曲率分析两种方法应用较为普遍。但模版匹配方法必须遍历图像而导致实时效率不高,曲率分析对精度要求较高而使检测指尖效果不理想[6]。从Kinect手势分割结果来看,发现与手掌区域相比,手指比较细长,考虑基于形状的方法比较合适,并且在形态学操作下,手指区域较易剔除,因此本文利用此特征对指尖进行检测。
首先,记录根据分割算法得到的手区域Hand;其次,对手图像进行膨胀 (dilate)操作后对其做连续十次的腐蚀(erode)操作;再次,根据手掌面积不小于50来确定dilate次数,分割出手掌区域Palm,如图2(c)。手指部分Finger由公式Finger=Hand-Palm得到,指尖位置则利用指尖距离手心点较远的这一特征进行提取,如图2(d)所示。
图2 指尖特征提取过程图Fig.2 Diagrams of fingertip festure extraction process
1.3 Kalman滤波
由于手在运动过程中会有一些变化,Kinect摄像头也会产生噪声,使得对指尖的三维位置不能稳定地跟踪。通过Kalman滤波,用前帧指尖位置预测下帧的指尖位置,根据预测位置将指尖区域设置为图像的感兴趣区域(ROI,Region of interest),有效提高分割速度。跟踪过程为:
1)利用Kalman滤波器预测当前帧的指尖位置,设置ROI区域是以预测指尖点为中心,大小为80×80的窗口。
2)目标匹配。在连续两帧中,指尖运动假定为匀速,则Kalman滤波器的状态向量为
式中X(t),Y(t),Z(t)是指尖在 三维中的坐标位 置,Vx(t),Vy(t),Vz(t)是指在每一帧中指尖点的速度,则状态方程和观测方程分别为
根据钻孔抽水试验资料,含煤地层地下水位整体呈北部高,最南部高,中间低的趋势(图5),含煤地层地下水主要从北部自东西两侧向中间汇集再流向南部,同时最南部水位也较高,地下水自最南部流向水位最低处。地下水径流特征有利于煤层气自东西向中部聚集,自南北向中部富集,与井田煤层气的分布特征基本吻合。钻孔单位涌水量0.003 2~28.070 0 mL/(s·m),富水性极弱,起到水力封闭和封堵的作用,是8号煤层在整个井田煤层含气量均较高,平均达到18.6m3/t的重要原因。
其中,wt是过程噪声,具有高斯分布;vk是测量误差,F为状态转化矩阵,H为观测矩阵。
由此,通过指尖在t帧之前的位置来预测它在t帧时刻的位置。但Kinect本身存在局限性,有时会出现很大误差,导致指尖出现抖动。为防止预测与指尖的实际位置相差太大,利用Nite手点与指尖深度相差不大的先验知识,可设定指尖深度在直径为手长的手点深度范围内。
3)更新Kalman滤波状态,用匹配好的指尖位置作为下一帧的预测值来更新Kalman滤波状态,达到稳定跟踪的目的。
1.4 手势分析与交互语义的描述
手势的表观特征包括手指数、手指的指尖点、指根点以及指间的夹角等具有标志性的信息,通过指尖检测得到多个指尖。利用指尖个数状态、指尖向量和手指相对运动轨迹来划分手势类型,并根据不同场景中的具体应用进行交互语义的描述。虚拟装配过程中的物体操纵主要包括对物体的选取、移动、旋转、放缩和释放等操作。
1)选取(Select):当手心点在物体的包围盒内时,定义一个手指状态为选取操作,选中的物体就可以做旋转或缩放动作了。
2)旋转(Rotate):当物体为选取状态时,再将大拇指伸出,此时识别出两指尖与手心3个手点位置,将三点所构平面近似为手掌平面。定义手掌旋转手势为旋转动作,旋转轴为两指尖点间的向量V,旋转角度为旋转过程中的平面法向Vt与初始平面法向V的角度Angle。
3)放缩(Scale):当物体为选取状态时,指尖个数为3~5,当至少两个指尖点与手点的距离都减小/增大时,取每个指尖点与手点放缩距离的平均值为放缩程度,即定义手握拳与张开动作为放缩动作。
4)移动(Move):当手心点在物体包围盒内并且含大拇指在内的两只手指的指尖距离在70之内时,定义此手势为抓取移动状态,抓取到的物体随手的移动而移动。
2 手势在Virtools虚拟装配平台下的应用
Virtools是一套具备丰富的互动行为模块的实时三维环境虚拟实境编辑软件,引入插件式模块化的开发技术,所有功能以功能块(Building Block,BB)的形式存在,每个BB实现一个特定的功能,多种BB组合完成各种功能。本文通过开发面向Kinect设备的插件,封装手势BB,在Virtools下完成手势操控。
2.1 Kinect插件结构设计
Virtools的架构中,CK2是最核心的部分,定义了所有行为准则,用来组织和管理其他模块。为了在Virtools中获取Kinect的数据和手势信息设计了手势插件。该插件中包括手势封装,Kinect管理器和Kinect BB,如图3所示。其中,手势封装模块是将手势识别中所有方法封装在一起;Kinect管理器用来获取使用Kinect设备的能力;Kinect BB模块实现插件的功能。
图3 手势插件结构图Fig.3 Diagram of gesture plug structure
2.2 Kinect管理器设计
管理器是Virtools中除BB外最重要的模块,用来封装所有的使用方法。设计Kinect管理器封装相关的手势侦测和跟踪算法,并进行管理器注册,得到处理Kinect的能力,从而读取Kinect设备提供的手势信息,实现手势跟踪及侦测功能。虚拟装配交互流程框图如图4所示。
图4 虚拟装配手势交互流程框图Fig.4 Flow chart the virtual assembly of gesture interaction design
在Kinect管理器中创建手心节点和指尖节点完成事件的驱动。当用户举起手,系统识别出RaiseHand手势后,开始跟踪手点和手指位置。用户伸出一只手指,将手平移至所需物体上进行Select操作,若手心点在物体包围盒内时,物体为选中状态,与手固定为一体;若没选中,则继续Select操作。用户通过展示不同手势,触发对虚拟物体相应的操作,并更新相应的状态信息。管理器只是定义抽象的操作,具体情况要在BB中完成。
2.3 Kinect BB设计
手势与场景交互需要多个BB协同工作,Kinect BB是最核心的部分。它提供给其他相关BB实时更新的手心和指尖位置信息,手的状态信息,自定义手势及手势相关参数。
如图5所示,在输出参数引脚中,手心位置:(ScreenX,ScreenY,ScreenZ),Depth指示其世界坐标的Z值;三个指尖位置:(f1 X,f1 Y,f1 Z),(f2 X,f2 Y,f2 Z),(f3 X,f3 Y,f3 Z);HandCreate、HandUpdate和HandDestroy指示手的状态;Raxis和Rangle指示旋转轴和旋转角度;Distance指示放缩程度;其余引脚指示不同手势。
图5 Kinect BBFig.5 Kinect BB design
3 Kinect插件的应用实例
3.1 手势与场景交互的流程设计
本系统所设计的手势运用于整个场景中,因此手势与场景的交互操作在Level层中设计完成。图6所示即为实时交互设计的BB程序图。
图6 手势与场景交互BB图Fig.6 The BBs of Gesture and scene interaction design
其中,Hand State BB用来指示手的状态,Handpoint3D BB用来指示手心点的坐标,Finger1、Finger2、Finger3 BB指示指尖位置信息,Move、Rotate、Scale BB将实现具体的装配操作,而Kinect BB将所有参数以输出引脚形式传入各个相关BB。当Kinect在Virtools中被激活后,首先传入手心与指尖位 置 坐 标 于Handpoint3D、Finger1、Finger2和Finger3 BB,Hand State BB更改手状态,然后用Select触发Select 3D BB进行选取并保持激活状态,最后用不同手势激发相应BB,根据BB中传入的参数,物体进行相应的操作。
3.2 实例应用
本系统以Virtools为三维空间显示平台,利用Virtools SDK,VSL,OpenNI及中间件Nite的程序开发包以及OpenCV的图像处理函数库,在Windows XP环境下采用面向对象技术以Microsoft Visual Studio 2010为开发工具,设计并完成了手势操控相关BB的编辑,结合Virtools自带的BB,成功实现了手势在虚拟装配中的交互控制。
图7描述了不同手势交替工作,共同完成虚拟装配的过程。首先,将3DS Max中创建的模型、贴图等转化为Virtools的场景文件,导入到Virtools中。然后,用户通过举手动作触发RaiseHand手势。若触发成功,找到手位置,用中间的小黄手表示。Select手势用于选取所需零件,Move、Rotate及Scale手势则分别完成零件的平移、旋转和放缩操作,如图7(a)、(b)、(c)、(d)所示。
图7 手势操控虚拟装配过程实例Fig.7 Example of gesture control virtual assembly process
4 结束语
本文在Kinect只有一个手点的基础上,利用数学形态学方法检测出多个指尖,并用Kalman滤波器进行稳定跟踪,满足交互过程中的实时性要求。根据装配需求,基于多指尖特征设计了多种手势并定义了有效的交互语义,有效提高了装配的精确性。以Virtools为虚拟装配开发平台,将Kinect中的手势及位置参数信息封装成一个插件,实现了Virtools与Kinect的实时通信。实验证明,基于Kinect的三维手势在虚拟装配技术中,具有良好的识别效果,能够满足复杂装配环境的要求。Virtools与Kinect的结合也对虚拟现实技术的应用具有重要的推广作用。
[1]BISWAS K K.Gesture recognition using microsoft kinect[J].Proceedings of the 5th International Conference on Automation,Robotics and Applications,2011:100-103.
[2]郭康德,张明敏.基于视觉技术的三维指尖跟踪算法[J].计算机研究与发展,2010,47(6):1013-1019.GUO Kang-de,ZHANG Ming-min.3D fingertip tracking algorithm based on computer vision[J].Journal of Computer Research and Development,2010,47(6):1013-1019.
[3]刘江省,姚英学.虚拟装配中基于数据手套的虚拟操作研究[J].系统仿真学报,2004,16(8):1744-1747.LIU Jiang-sheng,YAO Ying-xue.Virtual manipulation based on data glove in virtual assembly[J].Journal of System Simulation,2004,16(8):1744-1747.
[4]朱英杰,李淳芃.沉浸式虚拟装配中物体交互特征建模方法研究[J].计算机研究与发展,2011,48(7):1298-1306.ZHU Ying-jie,LI Chun-peng.Interaction feature modeling of virtual object in immersive virtual assembly[J].Journal of Computer Research and Development,2011,48(7):1298-1306.
[5]Prime Sensor NITE 1.3 Algorithms notes[EB/LO].[2010-09-08].http://www.primesense.com/nite.
[6]汤勇,顾宏斌.交互系统中实时手势分割及指尖检测方法[J].光电工程,2010,37(7):145-149.TANG Yong,GU Hong-bin.Real-time hand segmentation and fingertip detection for interaction[J].Opto-Electronic Engineering,2010,37(7):145-149.