康金兰,晁建刚,林万洪,熊 颖,杨 进
(1.中国航天员科研训练中心,北京100194;2.人因工程重点实验室,北京100194)
手势识别是一种人机交互技术,以人手部的动作直接控制计算机的输入。随着技术的发展,使用摄像头捕捉手势的计算机视觉技术成为了手势识别的主流方式[1]。手势无论是静态或动态,首先需通过视频采集设备获取图像,并通过图像处理进行手的检测和分割,之后对手势图像加以分析,提取图像特征,再根据特征将已分离的手势按照一定的方法识别出来,最后将识别结果转化为驱动计算机运行的交互语义[2]。
近年来手势识别技术的发展迅猛,在许多领域有着广泛的应用前景。在我国未来空间站任务阶段将开展长期有人照料的空间科学实验任务,随着需求的不断增强,飞行任务越来越繁重,为提高航天员执行任务的效率及成功率,地面训练需要适应空间站内部空间大、设备多,操作复杂等特点,考虑舱外设备的维护维修、舱内设备组装等工作,因此将引入基于虚拟现实的训练系统,视觉手势识别技术正是其中的关键环节之一。
目前国内动态手势识别以研究手的运动轨迹识别为主[3],这在很大程度上难以满足航天员训练需要。本文针对我国载人航天任务日益增长的训练需求,以航天员在轨组装舱内某医学防护锻炼设备为研究对象,进行视觉手势识别技术研究,着力解决在航天员虚拟训练背景下,典型动态手势的识别及交互设计等内容。以组装过程中的抓取、(抓取后的)拖动、释放为例,分析了航天虚拟组装训练的典型手势,研究了基于Kinect的手势识别方法,建立了航天虚拟组装训练三维场景,首次设计并实现了基于视觉手势识别的航天虚拟训练系统,最后,设计了仿真实验,对手势识别方法的有效性进行了验证。
本文以当前的主流工具——光场摄像机(Kinect)为视频采集设备,OpenNI和Nite为主要视觉识别软件,OpenCV辅助进行识别算法计算,以irrlicht图形引擎建立虚拟三维交互场景,在VC2010环境下实现编码。研究平台体系结构如图1所示。
图1 系统体系结构图Fig.1 System architecture
视觉计算平台负责手势图像的采集及底层处理,视觉手势识别系统负责运动手势的关键算法实现,交互规范/规则负责手势交互语义的定义;场景部分负责建立虚拟的三维设备场景,并根据动态手势驱动设备部件组装;管理界面负责顶层界面管理。
建立的视觉手势人机交互系统框图如图2所示。
图2 手势识别人机交互系统Fig.2 Man-machine interactive system based on gesture recognition
首先,通过Kinect获取深度图像的数据流,系统根据手势的深度位置分割出手势,得到手势的二值图像;其次,根据指尖特征,分割出指尖并有效跟踪目标和运动;再次,根据手势特征进行分析,生成模型参数,根据模型参数对手势进行分类并按需要定义交互语义;最后,系统根据交互语义去驱动手势装配物体。
准确、合理地分离手势与背景是提高识别效率和准确率的一个重要前提[4]。Kinect除了能够提供RGB颜色信息外,还能利用红外线提供深度信息,这就为手势的检测提供了极大的便利,因为红外深度信息与背景的区分度远大于颜色信息与运动信息,使得手势检测的大部分工作能够由硬件直接完成[3]。本文在手势检测和分割部分充分利用Kinect提供的深度图像信息进行处理,不仅可以解决因使用场合的不同和光照环境等的变化造成的手势区域检测不准的问题,而且能够较好的去除类肤色区域。
本文假定人手离摄像机最近,且距离在1 m范围内。利用Openni手部分析模块很容易跟踪检测到手的质心,根据手心坐标,选取感兴趣区域作为手势分割的目标。通过分析在轨组装的几种特定手势,我们取深度图像中原像素点的深度值在手质心深度值d±8 cm范围内的点的集合作为分割出来的手势图像,并将其进行二值化处理,分割前后的图像如图3(a)和(b)所示。
图3 手势分割Fig.3 Gesture segmentation
想要满足组装操作的需求,仅仅一个手的质心点显然不够,而指尖是手势识别中最为常用的特征点[5]。目前,指尖检测算法中,常用的是模板匹配和轮廓曲率分析两种方法[6]。但模版匹配方法必须遍历整个手势图像而导致实时效率不高[7],因此本文采用手势图像轮廓曲率分析的方法,通过对手轮廓图像进行分析来检测指尖,进而检测出拇指并实时跟踪。
首先将图像轮廓上的点依次存入数组中,利用K-curvature算法计算任意一点的近似曲率。如图4a所示,对图中的点P1,计算P1和P2之间的向量与P1和P3之间向量的夹角是否在一定范围内,从而判断它是否为指尖。经过多次测试验证,取P2、P3与P1间隔20个像素点,且向量夹角角度取0~55度,识别结果比较理想。向量夹角不在该范围内的认为是非指尖,例如图4(a)中的T1点。图4(b)是通过该方法识别出来的结果,橙色圆圈标识的是手指尖。
图4 指尖检测Fig.4 Fingertips Detection
根据在所有相邻指尖点的距离中,拇指和食指指尖距离最远的特点,很容易检测到拇指,如图4b所示。
由于手在运动过程中会有一些变化,Kinect摄像头也会产生噪声,使得对指尖的三维位置不能稳定地跟踪。通过Kalman滤波,用前帧指尖位置预测下帧指尖位置,根据预测位置将指尖区域设置为图像的感兴趣区域(ROI,Region ofinterest),有效提高分割速度[8]。跟踪过程为:
1)利用Kalman滤波器预测当前帧的指尖位置,设置ROI区域是以预测指尖点为中心,大小为80×80的窗口。
2)目标匹配。在连续两帧中,指尖运动假定为匀速,则Kalman滤波器的状态向量如式(1)。
式中X(t),Y(t),Z(t)是指尖在三维中的坐标位置,Vx(t),Vy(t),Vz(t)指在每一帧中指尖点的速度,则状态方程和观测方程分别为:
其中,wt是过程噪声,具有高斯分布;vt是测量误差,F为状态转化矩阵,H为观测矩阵。
由此,通过指尖在t帧之前的位置来预测它在t帧时刻的位置。但Kinect本身存在局限性,有时会出现很大误差,导致指尖出现抖动。为防止预测与指尖的实际位置相差太大,利用手质心点与指尖深度相差不大的先验知识,可设定指尖深度在手质心点深度±8 cm范围内。
3)更新Kalman滤波状态,用匹配好的指尖位置作为下一帧的预测值来更新Kalman滤波状态,达到稳定跟踪指尖的目的。
手势的表观特征[5]包括手指数、手指的指尖点、指根点以及指间的夹角等具有标志性的信息。通过指尖检测得到多个指尖,利用指尖个数状态、指尖向量和手指相对运动轨迹来划分手势类型,并根据不同场景中的具体应用进行交互语义的描述。虚拟组装过程中的物体操作主要包括对物体的抓取、移动、释放等操作,具体定义如下:
1)抓取(Grasp)。当手的拇指指尖点与食指指尖点接触(距离小于5个像素点),且接触点在物体的包围盒内时,定义为抓取操作。
2)移动(Move)。当物体处于抓取状态,且手质心位置发生变化时,定义此手势为抓取移动状态,抓取到的物体随手的移动而移动。
3)释放(Free)。当手拇指指尖与食指指尖不接触时(距离大于5个像素点),定义为释放动作,物体被放开。
利用本文描述的指尖检测与跟踪方法,首先从手势特征图像中识别出指尖,并判断出拇指和食指,之后进行稳定地跟踪,然后根据两手指的位置关系以及是否接触到操作的部件来识别当前手势的含义。
采用本文描述的手势检测及识别方法,进行在轨组装设备虚拟操作训练实验。首先将三维虚拟设备各部件放置在固定位置上,虚拟手模型随识别的手的质心位置变化,当手移动到虚拟部件的包围盒内时,该虚拟部件变色,以表明手接触到该部件;当进行抓取操作时,输出声音表明识别到抓取操作;当手处于抓取操作状态并移动时,虚拟部件跟随移动;程序中通过在相应的位置上显示已抓取部件的线框图,并以闪烁的绿色提醒训练对象将该部件移动到该位置进行组装,移动到正确组装位置后,该部件线框图变成红色,表示位置正确可以释放,释放后即完成了这一步的正确组装。仿真结果如图5所示。
图5 组装实验演示图Fig.5 Sketch map of assembly experiment
图6 识别出的手势图像Fig.6 Gesture image recognized
图6 (a)和(b)是采用本文描述的手势识别方法识别出来的两种特定操作手势。实验过程中选取5个人在不同的光照条件和复杂背景下进行在轨组装操作训练,组装过程中每个特定动作重复10遍,得到的实验结果如表1所示。从表中的数据可以看出,采用本文的方法进行特定手势识别,识别效率较高,且具有较强的鲁棒性,可以达到组装训练的目的。
表1 组装手势识别率Table 1 Recognition rate of assembly gestures
说明:本文将实际组装操作过程中的手势简化为特定的三种手势,用于组装操作流程上的训练;文本描述的手势识别方法适用于基于这三种特定手势的虚拟组装训练,但对于实际操作中可能涉及到的旋拧、插拔等复杂操作不太适用,针对一些复杂组装手势的识别将在后续的工作中继续研究。
本文在分析未来空间站阶段航天员地面模拟训练需求的基础上,研究了基于Kinect的视觉手势识别技术在载人航天失重防护设备组装训练上的应用。首先利用OpenNI和Nite检测到动态手势,再利用Kinect深度信息有效地分割手势,并采用手势图像轮廓曲率分析方法识别出手指尖,结合Kalman滤波进行稳定跟踪。根据识别的拇指与食指的位置关系以及手势的定义识别出组装的特定手势。实验结果表明,本文描述的方法对组装训练的特定手势有较高的识别率,在不同光照和复杂背景下鲁棒性强;该方法可应用于载人航天在轨设备虚拟组装训练中。
[1]邓瑞,周玲玲,应忍冬.基于Kinect深度信息的手势提取与识别研究[J].计算机应用研究,2013,30(4):1263-1265.
[2]任洁.基于立体视觉的手势跟踪识别及人机交互应用[D].南京:南京大学,2013.
[3]陶丽君,李翠华等.基于Kinect传感器深度信息的动态手势识别[J].厦门大学学报,2013,52(4):493-497.
[4]王艳,张奇志.基于Kinect深度信息的手势识别[J].北京科技大学学报,2013,28(1):22-26.
[5]陈艳艳,陈正鸣,周小芹.基于Kinect的手势识别及在虚拟装配技术中的应用[J].电子设计工程,2013,21(10):4-7.
[6]Shuai Yang,PrashanPremaratne,Peter Vial.Hand Gesture Recognition[C]//Proceedings of 2013 5th IEEE International Conference on Broadband Network&Multimedia Technology.Guilin,China:IEEE,2013:23-27.
[7]Li Y.Hand gesture recognition on using Kinect[C]//Software Engineering and Service Science(ICSESS),2012 IEEE 3rd International Conference on.Beijing,China:IEEE,2012:196-199.
[8]Jagdish L Raheja,Ankit Chaudhary,KunalSingal.Tracking of Fingertips and Centers of Palm using Kinect[C]//Proceeding on Third International Conference on Computational Intelligence,Modelling& Simulation.2011:248-252.