基于Kinect视觉功能对体感手势目标识别
2021-06-07李国城
李国城
(广州新华学院,广东 广州510520)
随着计算机视觉技术的发展,基于视觉的人机交互智能化不断提高,利用人的手势动作、语音等,与计算机环境建立一种类似人与人的人机交互模式[1],相比通过传统的鼠标、键盘等设备交流,可以减少硬件对人机交互的束缚和局限性,提高信息交流的简便性、自然性。近年来,众多科研研究机构对基于视觉的非接触式手势感知技术进行了深入研究,在体感娱乐游戏等领域有了新型的操控模式[2]。
目前新型的手势识别人机交互技术有基于计算机视觉和基于数据手套两种方式。手套内嵌微处理器及加速度传感器、弯曲传感器设计基于数据手套的识别系统,通过提取手掌轮廓区域的特征、手的倾斜度、手掌的运动轨迹等进行分析识别,识别精度较高,但需要佩戴特殊手套,使用有一定的局限性[3]。基于计算机视觉的方法是使用摄像头获取识别对象的RGB彩色图像和深度图像,对深度图像数据进行手势分割、定位、特征提取处理,达到对动态手势的正确识别[4]。本文选用微软公司的Kinect传感器作为摄像头获取动态手势的彩色图像和深度图像数据,再利用基于OpenCV视觉库的手势识别算法,并融入滤波算法,对手势进行提取和定义,达到最优解,降低了背景、光照等因素的干扰,有效提高了对动态手势识别的鲁棒性、实时性。
1 Kinect简介
Kinect是微软公司推出的一款XBOX体感输入设备,通过特定的摄像头与传感器实现了人机自然交互。如图1所示,Kinect硬件主要由一组多阵列麦克风组成,能进行语音输入,增强人机交互效果。中间彩色输入摄像头,能够以每秒30帧的速率捕获分辨率为640×480的彩色图像。两端的深度传感器为红外投影机和红外摄像头,对环境有较高的鲁棒性,用来获取用户位置和手势动作信息,经过内部芯片处理之后得到320×240像素的深度图像。同时微软公司与OpenNI推出的Kinect for Windows SDK开发工具包,使得Kinect通过插值处理,向上层软件实时提供相差无几像素的彩色数据流和深度数据流[5]。
2 动态手势识别
2.1 深度图像获取
在OpenNI中,包含了一套骨骼算法库,通过调用UserGenerator.GetUserPixels(0,sceneMD),DepthGenerator.GetMetaData(depthMD)两个函数,获取深度图像并建立人体骨骼图,深度数据以矩阵形式存储在SceneMetaData类型中。通过关节点的空间向量算法计算手势运动角度,调用SetCursorPos()函数将手势所在的位置映射到计算机屏幕上,驱动键盘或者鼠标,从而实现人机的交互[6]。
2.2 空间向量法计算关节角度
Kinect利用自身传感器获取人体的深度图像,并实时描绘出由多个关节点组成的三维坐标骨骼图[7],如图2所示。
图1 Kinect传感器硬件外观
图2 骨骼节点图
选择空间向量法计算动态手势的特征,得出节点的运动和相对角度变化势,进而判定人体手势动作,并定义这些动作,从而对应用程序进行暂停、翻页等操作。
由Kinect获得的深度信息可知,经过坐标变换得到的三维深度数据,与距离之间存在对应关系,因此Kinect设备获取的深度三维数据坐标要转换为和人体坐标保持一致。图3所示为Kinect的空间坐标系,z轴正方向为Kinect设备所在原点指向的正前方,x轴、y轴为人体空间坐标系[8]。
本文判定手势特征是基于空间向量的渐进算法,根据空间向量的方向性与可平移的特性,可知向量可以表示为坐标系中任意两个不重复坐标点,转化公式如下:
由此可将人体关节角度计算转化为空间向量夹角的计算,即求手、肘关节及肩膀三个节点组成的空间平面XOZ夹角。图4是左手在Kinect空间坐标系中的向量表示,经过空间向量可平移特性,将原有的坐标系转换成以O为中心原点的坐标系,其中基准点C点作为坐标系原点,方便计算得到预处理之后的手势特征向量。
通过空间向量CA和CB的夹角计算可以得出肘关节角度大小,在Δt时间内,连续记录若干组α夹角,判断夹角变化大小,从而达到动态手势的正确识别。
3 深度图像优化
本文是选用Kinect传感器,并利用开源的OpenNI开发工具获取深度图像信息,通过空间向量算法获取骨骼节点来定位人体手势[9]。由于受环境光照、背景的多样性等影响,采集到的深度图像会产生扰动,因此,为提高深度图像的准确性和鲁棒性,提出一种基于动态规划的思想,在获取深度图像数据之后加入限幅滤波算法,得到识别手势的最优解[10]。图5、图6分别为深度图像采集并进行节点识别流程图和加入滤波算法流程图。
图3 Kinect空间坐标系示意图
图4 Kinect空间坐标系向量表示
图5 深度图像采集、识别流程图
4 实验及结果分析
4.1 鲁棒性验证
图6 滤波算法流程图
针对不同环境下光照强弱、背景复杂程度对文中设计的基于Kinect视觉手势识别进行了鲁棒性验证。在光照条件比较好的室内和在光线比较暗的室内进行多次实验,Kinect体感设备可以有效地获取人体深度图像并识别手势特征。在背景较为杂乱的环境下,手势识别准确性没有受到影响。当背景中出现其他人,且与使用者相距较近,Kinect传感器的人物判断会产生错误。图7所示是Kinect传感器在光线较弱的室内获取的人体深度骨骼图像。
表1 手势对应动作及识别准确性统计表
图7 Kinect传感器获取深度骨骼图像
4.2 手势识别准确验证
本文验证手势识别的准确性,预先定义好手势动作,每个手势动作定义一个相对应的计算机界面操作。本次测试共采集200个动态手势样本,对定义的手势动作分别做50次采样测试,表1所示为本次手势对应动作及识别准确性。
实验结果表明,利用Kinect传感器获取人体手势深度图像,结合空间向量算法计算骨骼节点角度,在背景相对复杂及光线较弱的环境下,对动态手势识别成功率较高,具有较好的实时性和鲁棒性,达到了预期目标。
5 结束语
本文选用可以获取高精度深度图像的Kinect体感设备,结合空间向量算法计算骨骼节点信息进行动态手势识别,运用限幅滤波算法对深度图像进行优化。实验验证表明,基于Kinect视觉功能的体感传感器,对动态手势的识别具有较好的实时性和鲁棒性,可以实现人与计算机的人机交互。对该系统进一步优化,结合静态手势和动态手势的识别,可以应用于家庭数字电视、机器人、特殊环境下的人机交互,具有较大的研究价值和应用范围。