基于Kinect的实时手势识别方法
2018-06-19王学璠王志锋
田 元,王学璠,王志锋,陈 加,姚 璜
(华中师范大学 教育信息技术学院,湖北 武汉 430079)
0 引 言
在人机交互中,手势能生动表达大量交互信息。目前,手势识别主要有依靠穿戴设备的方法[1,2]和利用RGB摄像头的方法[3-8]。依靠穿戴设备能准确提取手势且有较高辨识度,如MAZUMDAR D提出的基于颜色手套的识别方法[1],用户穿戴特殊红色手套进行手势识别,但这对手部活动造成不便,无法识别用户指尖。利用RGB摄像头的识别方法主要有:基于肤色模型和基于分类学习的识别方法。基于肤色模型的手识别方法通过皮肤颜色分割手部进行识别,如张文清等提出的一种基于手势识别的智能输入[5],虽然识别率较高但易把与肤色相近部位判断为手部;俞博等提出的基于手指角度的方法[6],该方法依赖光照,易受背景影响。基于分类学习的识别方法主要运用HMM、Adaboost学习等算法结合SIFT等特征进行识别,识别率高,如李东洁等提出的BP神经网络和PSO算法相结合的识别方法[7],这种方法需采集大量样本、训练时间长、效率较低。
许多研究者利用深度信息研究手势识别[9-12],如刘鑫辰等提出的用RGB-D摄像头获取3D空间分析指尖数量[9],但当不同手势指尖点数量相同时无法进行区分;谈家谱等利用Kinect获取骨骼信息跟踪手部位置,结合肤色分割提取手部[10],这种方法受肤色分割法局限,难以保证手势的旋转、平移和缩放不变性,实时性不高。
为克服上述问题,本文提出一种基于Kinect的实时手势识别方法,可以准确识别常用的10种计数手势。首先利用Kinect获取人体深度数据与骨骼位置,记录手掌中心和手肘中心关节的坐标;然后根据关节点位置分析深度图像快速得出人体手部区域,根据手部区域中闭合曲线的包围面积筛选出准确的手部轮廓,并分析手部轮廓和手掌中心关节点位置修正手掌中心点;再根据手部轮廓查找手指指尖位置,判断是否存在弯曲手指,确定手部特征点;最后通过特征点匹配进行手势识别。该方法能够在复杂背景下准确、高效地识别操控者的手势,能够克服光照变化和肤色差异的影响,并且算法简便、具有良好的实时性,能够识别弯曲手指,并保证手势的旋转、平移以及缩放不变性,可以适应体感交互的需求。
1 手部轮廓提取
1.1 分割手部区域
微软的Kinect体感设备可实时获取RGB彩色图像、深度图像以及人体关节点的三维坐标。本文利用Kinect获取图像的深度信息后,若检测到人体,则分析深度图像直方图,根据阈值T,将图像分为人体和背景两部分,用白色区域表示人体,黑色区域表示背景。然后利用提取的人体骨骼中手掌中心t、手肘中心r、头部中心点h和脖子中心点n的位置,计算头部中心点h和脖子中心点n之间的欧式距离c。以手掌中心点t为中心在图像中取一个半径为0.8×c的圆形区域。剔除圆形区域外的人体信息以及区域内与手掌中心深度值相差0.1 m的人体信息,得到人体手部信息。将手部像素点填充白色,其余像素点填充黑色,获得一幅只包含人体手部区域的二值图I1。
1.2 获取手部轮廓
提取I1中以t为中心、c为半径的圆形邻域,在邻域内进行中值滤波,快速消除手部区域附近的噪声,过滤部分非手部像素,平滑图像边缘,得到图像I2。然后用Canny算法对图像I2进行边缘检测,得到近似手形的曲线点集,即图像边缘曲线顶点序列。对所得的曲线顶点序列进行过滤,计算每条曲线所包围的连通区域的面积,排除面积小的干扰区域,筛选出面积最大且顶点数大于等于3的曲线,即为手部轮廓。按以下步骤对手部轮廓进行多边形逼近,得到一个多边形的顶点序列pi(i为顶点序列号且i≥3)。
步骤1 连接轮廓上首尾两点S和E,形成一条线段SE,即轮廓的弦;
步骤2 计算轮廓上到线段SE距离最大的点M,并求距离d;
步骤3 比较d与给定的阈值thr,若d≤thr,则SE就是轮廓的近似。
步骤4 若d≥thr,则将SE分为SM和EM两条线段,然后分别对SM和EM重复进行步骤1~步骤3。
步骤5 重复上述步骤,直到所有线段分割完,依次连接每个M点,得到轮廓的近似多边形。
多边形逼近过程如图1所示,图1(a)为进行多边形逼近前的手部轮廓,图1(b)~图1(d)为分割过程,图1(e)为获得的近似多边形。从图1(a)和图1(e)的对比可以看出,该近似多边形和手部轮廓形状相似度高,但顶点数量较少,消耗的存储空间更少,更平滑。
图1 多边形逼近过程
2 手部特征提取
手部特征是手势识别的依据与关键,特征提取算法的好坏直接影响着手势识别的效率。根据人体手部形态特征,手指定位可以准确地描述手势。目前有些研究者选取指尖点作为特征点,虽然能在一定程度上描述手势,但难以在保证手势旋转、平移、缩放不变性的同时也能检测到弯曲的手指。本文提出一种手部特征提取方法,首先求取手掌中心和手掌大小;然后逆时针扫描近似多边形的顶点序列,检测出近似多边形的凸包点;再根据手掌大小和凸包点到手掌中心点的距离,计算比例阈值,查找出伸直的手指指尖和指根位置;最后结合手肘关节点位置,计算手掌中心点t到手肘中心点r的方向,由这个方向可以检测到非伸直手指的特征点。具体方法如下:
(1)在多边形的顶点序列中查找凸包点与凹陷点
首先,建立一个堆栈S,将多边形顶点p0、p1压入堆栈S。从i=2开始逆时针遍历多边形的顶点序列pi(2≤i<多边形的顶点个数),根据由Sj-1指向Sj的向量判断顶点pi的方向,方向判断的方法如图2所示,图2(a)中pi的方向为向右转,图2(b)中pi的方向为向左转。若方向向左转,则将顶点pi压入堆栈;若方向向右转,则将Sj弹出堆栈。当算法终止时,堆栈S中仅包含多边形凸包点中的顶点,其顺序为个各顶点在边界上出现的逆时针方向排列的顺序。
然后,逆时针依次计算多边形顶点序列上的两个相邻凸包点之间的每个点到两个凸包点的欧氏距离,将距离最大的点存储到凹陷点集中,得到多边形的每个凸包点对应的凹陷点序列,如图2(c)所示,图中每一条实线段对应一对凸包点和凹陷点,其中距离手心较远的点表示凸包点,距离手心较近点表示凹陷点。
图2 查找凸包和计算指尖
(2)计算手掌中心点g和手掌大小maxdist
扫描图像所有像素点,位于多边形内并且与多边形距离最大的点为最大内切圆圆心g,到多边形的欧氏距离为内切圆的半径maxdist。半径为maxdist的圆大小近似等于手掌心的区域。
(3)修正手掌中心点t
由于人体体态差异和测量存在误差,直接用Kinect获取到的手掌关节点t不稳定也不准确,尤其在手指弯曲或者握拳的情况下对手掌中心的定位误差很大。所以要利用前面计算得到的g来修正手掌中心点t,引入权重系数ω。计算方法如下
(1)
(4)计算指尖与指根
滤除手掌下部(如图3(a)中矩形范围内)的凸包点和凹陷点,并剔除图2(c)中实线段长度过短或过长的凸包点和凹陷点。方法如下。
图3 手掌下部和计算指尖
设向量A由手掌中心t指向凸包点f,向量B由手掌中心t指向手肘中心r。若向量A和向量B之间的夹角为锐角,即向量的点乘为正数,则剔除此手掌下部的凸包点f和它对应的凹陷点b(如图3(a)中实心点f、b)。根据人体生理学,以手心面的视角看手掌占整个手部长度的3/5,以手背的视角看手指与四指比例相等。计算手掌上部的凸包点f与手掌中心点t的欧氏距离dis1和手掌上部的凹陷点b与手掌中心点t的欧氏距离dis2(如图3(a)中空心点f、b),若满足dis1>1.8×maxdist且dis2>maxdist,就将该凸包点与对应的凹陷点构成的线段记录为手指,凸包点对应指尖部分,凹陷点对应指根部分,如图3(b)所示。并计算手指个数N。此方法可以保持旋转、平移和缩放不变性。
(5)获取多边形的包围特征点
沿手掌中心点t到手肘中心点r的方向扫描图像,计算多边形的最高点坐标o、最内点坐标e。如图4所示,虚线表示扫描线,空心点表示最高点o,实心点表示最内点e。
图4 获取包围特征点
3 手势匹配
本文所提出的方法可以识别如图5所示的10种传统计数手势。手势一到六以及手势八都是伸直手指的手势,手势七和手势九是半伸直手指的手势,而且手势九存在弯曲手指的特征,手势十没有伸出手指。根据以上描述结合提取的特征数据N、f、b、t、r、e、o、maxdist,可以将其量化为以下六级分类标准。
图5 本文识别的传统计数手势
第一级分类标准是手指个数N(0≤N≤5)。
第二级分类标准是图像坐标系中每个手指对应的指尖点f与手掌中心点t和手肘中心点r连线的垂直距离Distance,如图6所示。计算方法如下
(2)
(3)
图6 Distance
第三级分类标准是每个指尖间的欧式距离Fingdis。
第四级分类标准是每个手指的指根点和手掌中心t的相对位置dotZ。设向量A由手掌中心t指向指根点b,向量B由手掌中心t指向手肘中心r。计算方法如下
dotZ=(bx-rx)×(rx-tx)+(by-ry)×(ry-ty)
(4)
第五级分类标准是多边形的包围特征点e、o和多边形最大内接圆maxdist的关系rEO。判断方法如下
(5)
第六级分类标准是凹洞检测,方法如下:扫描多边形的包围特征点o和e之间的点,若全部位于多边形内部,则判定为无凹洞;否则,判定有凹洞,如图7所示,白色粗线表示被扫描的像素,空心点表示o,实心点表示e,图7(a)和图7(c)为左右手手势七且无凹洞的情况,图7(b)和图7(d)为左右手手势九且有凹洞的情况。
图7 凹洞检测
手势识别方法如下:
步骤1 若N=0且rEO=1,则判定手势为十;若N=0且rEO≠1,进行凹洞检测。若有凹洞,则判定为手势九;若无凹洞,则判定为手势七;否则执行步骤9;
步骤2 若N=1,且满足以下条件:-25 步骤3 若N=2,且两个手指都满足条件:-20 步骤4 若N=2,且其中一个手指满足以下条件条件:-50 步骤5 若N=2,且其中一个手指满足以下条件:-50 步骤6 若N=3,且3个手指都满足以下条件:-30 步骤7 若N=4,且4个手指都满足以下条件:-30 步骤8 若N=5,则判定为手势五;否则执行步骤9; 步骤9 获取下一帧图像数据,重复步骤1到步骤8。 本文实验的硬件设备为一台二代Kinect体感设备XBOX ONE,计算机处理器为Intel Core i5-5200U@2.20 GHz,4 GB内存。实验的软件环境为:Windows 10操作系统、Microsoft Visual Studio2013和OpenCV以及Kinect for Windows SDK 2.0软件开发包。实验中所有图像分辨率为512×424。 本文随机选取了10个人进行测试,测试者需要将手心方向正对摄像头,站在距离体感设备0.5m-1m的范围内,每人左右手各测试10种手势10次,每个手势共测试100次。测试结果见表1。 表1 实验结果 从表1可以看出,此方法对手势二、三、四、八、九的识别率较高,接近100%,对手势一、五、六、七、十的识别率也能达到95%以上,所有手势的平均识别率为98.7%。 文献[6]提出构造手指尖到手掌中心的线段作为手部骨架,计算手部骨架间的角度;以角度的大小和检查指尖数量进行分类的方法。可以识别手势一到九,但手势七和九定义为伸直手指的手势。文献[10]提出利用Kinect获取手部位置,结合肤色分割法提取手部。然后利用行像素变化次数获取掌心,并通过分析轮廓与掌心间的距离曲线来提取指尖点,通过静态手势特征分析识别手势。 将本文方法与文献[6]和文献[10]提出的方法进行对比,结果见表2。由表2可以得出,文献[6]的平均识别率为96.78%,文献[10]对手势一到九的平均识别率为98.43%,本文方法的平均识别率为98.83%。而且,文献[6]中的手势七和八以及九都定义为伸直手指的手势,并不是日常约定俗成的手势,虽然容易识别但降低了实用性与舒适感,不能满足自然人机交互方式的要求。文献[10]虽然能识别弯曲手指,但不能保证手势的旋转,影响了操纵者的交互体验,带来很大不便。本文方法克服了以上不足,能够在手势旋转的情况下得到正确的识别结果。 表2 3种识别方法对比 为了证明本文方法的旋转、平移、缩放不变性,分别在操纵者手部旋转、平移以及前进后退的情况下进行了实验。实验结果如图8所示。由图8可以看出,手势在发生平移、旋转、缩放的情况下,也能获得正确的识别结果。 图8 平移、旋转、缩放测试 为了证明本文方法在光照发生明显变化条件下的鲁棒性,在实验过程中使光线由明到暗发生变化,实验结果如图9(a)所示,第一行为真实的测试场景,第二行为对应的识别结果。从图中可以看出,当光线由正常光照变化到严重不足时,本文方法也能正确识别手势。 图9 光照条件变化和复杂背景测试 为了证明本文方法在复杂背景环境下的鲁棒性,本文在复杂环境下进行了实验。实验结果如图9(b)所示,测试者在实验过程中不断有其他人出现甚至有其他的人手进行干扰,在这种情况下,本文方法也能准确的识别手势。 在实验的过程中,本文让测试者戴上白色的棉布手套,如图10所示。在这种情况下,若采用基于肤色模型的手势识别方法,识别正确率会受到手套颜色的影响而大大降低,而采用本文的方法能够准确的识别手势。 图10 戴白布手套测试 在实时性方面,本文方法的平均处理速度为每秒20~30帧,具有良好的实时性,各个步骤的平均处理时间见表3。 表3 各个步骤平均处理时间 本文主要研究了一种基于Kinect的实时手势识别方法。主要通过运用Kinect体感设备获取深度信息和骨骼位置信息,然后提取人体手部信息并分析手部轮廓,再提取手掌中心点和指尖、指根以及包围特征,并结合手肘关节点的位置进行分析与手势匹配,能够准确实时的识别10种常用的计数手势。通过实验结果可以得出,手势二、三、四、八、九的平均识别率为99.7%,手势一、五、六、七、十的平均识别率为97.7%。除此之外,本文方法还能消除复杂背景和颜色差异以及光照变化的干扰,允许手势发生旋转、平移以及缩放,具有良好鲁棒性。本文的手势方法识别可以应用在很多领域中,如数字教学、虚拟游戏、智能家庭等。在未来的工作中,可以与动作识别相结合,实现更丰富的手势识别。 参考文献: [1]Zhu Y,Yang Z,Yuan B.Vision based hand gesture recognition[C]//Proceedings of the International Conferenceon Ser-vice Sciences.Washington:IEEE Computer Society,2013:260-265. [2]Mubashira Zaman,Soweba Rahman,Tooba Rafique,et al.Hand gesture recognition using color markers[C]//Procee-dings of the 16th International Conference on Hybrid Intelligent Systems.New York:Springer-Verlag New York Inc,2017:1-10. [3]Jeong J,Jang Y.Max-min hand cropping method for robust hand region extraction in the image-based hand gesture recognition[J].Soft Computing,2015,19(4):815-818. [4]Nasri S,Behrad A,Razzazi F.Spatio-temporal 3D surface matching for hand gesture recognition using ICP algorithm[J].Signal Image & Video Processing,2015,9(5):1205-1220. [5]ZHANG Wenqing,LI Fenlan,OU Haiyan.Intelligent input with gesture recognition[J].Computer Systems & Applications,2014,23(10):167-171(in Chinese) [张文清,李芬兰,欧海燕.基于手势识别的智能输入[J].计算机系统应用,2014,23(10):167-171.] [6]YU Bo,CHEN Yongqiang,WANG Shuangyi,et al.Static gesture recognition algorithm based on characteristics of finger angle[J].Journal of Xihua University Natural Science,2014,33(1):69-71(in Chinese).[俞博,陈永强,王双一,等.基于手指角度特征的静态手势识别算法[J].西华大学学报(自然科学版),2014,33(1):69-71.] [7]LI Dongjie,LI Junxiang,ZHANG Yue,et al.Gesture recognition of data glove based on PSO-improved BP neural network[J].Electric Machines and Control,2014,18(8):87-93(in Chinese).[李东洁,李君祥,张越,等.基于PSO改进的BP神经网络数据手套手势识别[J].电机与控制学报,2014,18(8):87-93.] [8]CHEN Qijun,ZHU Zhenjiao,GU Shuang.Hand gesture re-cognition based on Fourier description and HMM[J].Control Engineering of China,2012,19(4):634-638(in Chinese).[陈启军,朱振娇,顾爽.基于傅立叶描述子和HMM的手势识别[J].控制工程,2012,19(4):634-638.] [9]LIU Xinchen,FU Huiyuan,MA Huadong.Real-time fingertip tracking and gesture recognition using RGB-D camera[J].Computer Science,2014,41(10):50-52(in Chinese).[刘鑫辰,傅慧源,马华东.基于RGB-D摄像头的实时手指跟踪与手势识别[J].计算机科学,2014,41(10):50-52.] [10]TAN Jiapu,XU Wensheng.Fingertip detection and gesture recognition method based on Kinect[J].Journal of Computer Applications,2015,35(6):1795-1800(in Chinese).[谈家谱,徐文胜.基于Kinect的指尖检测与手势识别方法[J].计算机应用,2015,35(6):1795-1800.] [11]FU Qian,SHEN Junchen,ZHANG Qianying,et al.Gesture recognition with Kinect for automated sign language translation[J].Journal of Beijing Normal University(Natural Science),2013,49(6):586-592(in Chinese).[付倩,沈俊辰,张茜颖,等.面向手语自动翻译的基于Kinect的手势识别[J].北京师范大学学报(自然科学版),2013,49(6):586-592.] [12]ZHAO Aifang,PEI Dong,WANG Quanzhou,et al.Gesture recognition fused with multi-information in complex environment[J].Computer Engineering and Applications,2014,50(5):180-184(in Chinese).[赵爱芳,裴东,王全州,等.复杂环境中多信息融合的手势识别[J].计算机工程与应用,2014,50(5):180-184.]4 实验结果分析
5 结束语