一种用于控制模拟量的手势识别控制方法与流程

文档序号:17440596发布日期:2019-04-17 04:42阅读:152来源:国知局
一种用于控制模拟量的手势识别控制方法与流程

本发明属于手势识别控制技术领域,特别是涉及一种用于控制模拟量的手势识别控制方法。



背景技术:

手势作为人机交互的一种重要方式具有非接触、操控方便等特点,现有的手势识别方法主要分基于可穿戴设备和视觉的方法。基于可穿戴设备的方法是利用传感器跟踪手部在空间中的运动轨迹和时序信息,优点是可以获得精确的手部数据,缺点是需要穿戴各种复杂的设备,影响人机交互体验的自然性。基于视觉的方法主要是基于单目摄像头和深度摄像头,单目摄像头在获取图像时丢失了深度信息,只能识别特定类别的手势,例如静态手型手势;在深度摄像头方面主要集中在静态手势识别、手部的左右挥动识别,控制量也主要是一些开关量,然而在实际生活中需要对一些设备进行连续的模拟量控制,例如设备的音量、温度等。

此外,在利用手势进行控制时还存在一些其他问题,一方面是各个手势之间存在一定的相似性;另一方面是在动态手势过程中,由于每个人的动作习惯以及手指运动先后顺序不同,常常会产生手势的耦合,即在某一个动态手势过程中会包含其他的动态手势。上述问题的解决不仅仅依靠具体的识别方法,还需要在控制逻辑上进行一些处理,对手势变换过程中的一些状态作相应的约束和干扰手势的剔除。



技术实现要素:

本发明目的是为了解决现有技术中的问题,提供了一种用于控制模拟量的手势识别控制方法。

本发明是通过以下技术方案实现的,本发明提出一种用于控制模拟量的手势识别控制方法,

步骤1、利用摄像头采集手部3d空间数据,得到一个完整的手势动作;

步骤2、将所述完整的手势动作分解成静态手势、动态手势和连续手势;

步骤3、根据单帧图像中各关节之间的位置关系与方向关系进行静态手势识别;

步骤4、在识别到静态手势后进行动态手势识别或连续手势识别;如果在识别到静态手势后进行动态手势识别则执行步骤5;如果在识别到静态手势后进行连续手势识别则执行步骤7;

步骤5、进行动态手势识别,如果识别到动态手势则执行步骤6;如果没有识别到动态手势则执行静态手势对应的操作;

步骤6、进行连续手势识别,如果识别到连续手势,则将识别到的静态手势、动态手势和连续手势进行融合,得到手势融合结果,根据手势融合结果执行相应的操作;如果没有识别到连续手势则执行动态手势识别结果对应的操作;

步骤7、如果识别到连续手势,则根据连续手势的识别结果执行相应的操作;如果没有识别到连续手势,则执行步骤5。

进一步地,所述静态手势包括数字1手势、数字2手势、数字3手势和数字5手势;所述动态手势包括两指捏合手势、三指捏合手势、握拳手势和手掌挥动手势;所述连续手势包括水平面直线运动手势和水平面圆周运动手势。

进一步地,所述数字2手势为拇指与食指伸平,其余手指握紧;所述数字3手势为拇指、食指和中指伸平,其余手指握紧;所述两指捏合手势为从数字2手势到指尖接触;所述三指捏合手势为从数字3手势到指尖接触;所述手掌挥动手势为五指伸平在xoy平面顺/逆时针挥动;所述水平面直线运动手势为三指捏合沿x轴方向滑动;所述水平面圆周运动手势为两指捏合在xoz平面绕固定圆心滑动。

进一步地,所述静态手势识别是基于单帧图像中手部各关节与掌心之间的距离比例以及各手指骨骼方向与掌心方向向量之间的方向关系来进行区分。

进一步地,所述动态手势识别是基于多帧图像中各手指指尖之间距离的变化、手指指尖到掌心之间的距离变化以及掌心在空间中的位置变化进行识别,所述多帧为非连续帧。

进一步地,所述连续手势识别是基于连续的帧序列来进行手势分析。

进一步地,在所述连续手势识别中连续获取相邻5帧图像的手部关节数据,再将相对应的关节数据加权求平均值,最后利用该平均值统一作为5帧图像的手部关节数据,以消除数据的抖动。

本发明利用深度摄像头leapmotion提供的手部3d空间数据,根据单帧图像中各关节之间的位置关系与方向关系进行静态手势识别;多帧图像中关节数据的变化进行动态手势识别;以及基于连续多帧图像的连续手势识别,在连续手势识别方面,消除了由于人手操作原因或leapmotion数据误差造成的抖动导致连续手势的间断,从而实现了连续手势的模拟量控制。

附图说明

图1是本发明所述一种用于控制模拟量的手势识别控制方法流程图。

具体实施方式

下面将结合本发明实施例中的附图对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,本发明提出一种用于控制模拟量的手势识别控制方法,

步骤1、利用摄像头采集手部3d空间数据,得到一个完整的手势动作;

步骤2、将所述完整的手势动作分解成静态手势、动态手势和连续手势;

步骤3、根据单帧图像中各关节之间的位置关系与方向关系进行静态手势识别;

步骤4、在识别到静态手势后进行动态手势识别或连续手势识别;如果在识别到静态手势后进行动态手势识别则执行步骤5;如果在识别到静态手势后进行连续手势识别则执行步骤7;

步骤5、进行动态手势识别,如果识别到动态手势则执行步骤6;如果没有识别到动态手势则执行静态手势对应的操作;

步骤6、进行连续手势识别,如果识别到连续手势,则将识别到的静态手势、动态手势和连续手势进行融合,得到手势融合结果,根据手势融合结果执行相应的操作;如果没有识别到连续手势则执行动态手势识别结果对应的操作;

步骤7、如果识别到连续手势,则根据连续手势的识别结果执行相应的操作;如果没有识别到连续手势,则执行步骤5。

所述静态手势包括数字1手势、数字2手势、数字3手势和数字5手势;所述动态手势包括两指捏合手势、三指捏合手势、握拳手势和手掌挥动手势;所述连续手势包括水平面直线运动手势和水平面圆周运动手势。

所述数字1手势为食指伸平,其余手指握紧;所述数字2手势为拇指与食指伸平,其余手指握紧;所述数字3手势为拇指、食指和中指伸平,其余手指握紧;所述数字5手势为五指伸平;所述两指捏合手势为从数字2手势到指尖接触;所述三指捏合手势为从数字3手势到指尖接触;所述握拳手势为从数字5手势到五指握紧;所述手掌挥动手势为五指伸平在xoy平面顺/逆时针挥动;所述水平面直线运动手势为三指捏合沿x轴方向滑动;所述水平面圆周运动手势为两指捏合在xoz平面绕固定圆心滑动。

所述静态手势识别是基于单帧图像中手部各关节与掌心之间的距离比例以及各手指骨骼方向与掌心方向向量(垂直于手掌平面且从掌心穿出)之间的方向关系来进行区分。例如数字1手势,食指指尖到掌心之间的距离要明显大于其他手指指尖到掌心之间的距离,同时食指最末骨骼(靠近掌心的骨骼)方向垂直于掌心向量,而其他手指该骨骼的方向几乎与掌心方向向量平行,基于上述两个条件就可以完成数字1手势的识别。

所述动态手势识别是基于多帧图像中各手指指尖之间距离的变化、手指指尖到掌心之间的距离变化以及掌心在空间中的位置变化进行识别,所述多帧为非连续帧。具体对应关系如表1所示。

表1动态手势说明

所述两指捏合手势的识别流程为:获取当前帧手关节数据,计算拇指指尖与食指指尖之间的距离,如果该距离小于某一阈值(优选为30)则认定该手势为两指捏合手势,如果大于某一阈值则重新获取数据或结束流程。

所述三指捏合手势的识别流程为:获取当前帧手关节数据,计算当前帧下拇指与食指指尖距离和拇指与中指指尖距离,并计算距离累加和;获取过去第30帧手关节数据,计算过去第30帧下拇指与食指指尖距离和拇指与中指指尖距离,并计算距离累加和;判断指尖距离变化的相对值和绝对值,如果相对值即过去第30帧的距离累加和减去当前帧的距离累加和后除以过去第30帧的距离累加和的值大于某一阈值(优选为0.5),并且,绝对值即过去第30帧的距离累加和减去当前帧的距离累加和大于某一阈值(优选为60),计数加1,当计数大于10时,判定该手势为三指捏合。

所述握拳手势的识别流程为:获取当前帧手关节数据,分别计算五指指尖到掌心之间的距离,计算距离累加和;获取过去第30帧手关节数据,分别计算五指指尖到掌心之间的距离,计算距离累加和;判断距离变化百分比,即过去第30帧的距离累加和减去当前帧的距离累加和后除以过去第30帧的距离累加和的值大于某一数值(优选为0.4),则认为该手势为握拳手势,如果不大于则重新获取数据或结束流程。

所述挥动手势的识别流程为:获取过去第30帧手掌心坐标(x30,y30,z30),获取过去第15帧手掌心坐标(x15,y15,z15),获取当前帧手掌心坐标(x,y,z),计算过去第30帧和过去第15帧手掌心xoy平面运动方向向量(x15-x30,y15-y30),计算过去第15帧和当前帧手掌心xoy平面运动方向向量(x-x15,y-y15),计算向量外积t、水平距离d和垂直距离h,t=(x15-x30)*(y-y15)-(y15-y30)*(x-x15),d=│x-x30│,h=│y-y30│,如果d大于80并且h大于80则判断t是等于0、大于0还是小于0,否则结束流程,如果t等于0则结束流程,如果t大于0,则表示逆时针挥动手势,如果t小于0,则表示顺时针挥动手势。

所述连续手势识别是基于连续的帧序列来进行手势分析。在连续手势识别中最主要的一点就是稳定性,即识别的手势运动不能产生抖动,同时相应控制条要与手部的运动相一致(即跟随效果)。因此在识别的第一步就是数据的去抖动,本发明在去抖动方面主要采用了连续5帧图像的均值平滑方法来消除抖动提高稳定性,即连续获取相邻5帧图像的手部关节数据,再将相对应的关节数据加权求平均值,最后利用该平均值统一作为5帧图像的手部关节数据。

所述连续手势包括线性的水平面直线运动和非线性的水平面圆周运动。

所述直线运动手势的识别方法具体为:获取第1-5帧手部数据,得到拇指、食指和中指指尖坐标均值平滑x_t、x_i和x_m;获取第6-10帧手部数据,得到拇指、食指和中指指尖坐标均值平滑x1_t、x1_i和x1_m;根据上述步骤得到的结果计算拇指、食指和中指指尖位移累加值sumdis_t+=x_t-x1_t、sumdis_i+=x_i-x1_i和sumdis_m+=x_m-x1_m;对三个位移累加值进行距离判定,如果同时满足sumdis_t>5、sumdis_i>5并且sumdis_m>5,则手势为向x轴正方向滑动;如果同时满足sumdis_t<-5、sumdis_i<-5并且sumdis_m<-5,则手势为向x轴负方向滑动。

所述圆周运动手势的识别方法具体为:判断是否初始化圆心,如果是则获取连续5帧掌心坐标,并将掌心坐标平滑成一点,设定半径和初始角度,从而确定圆心坐标(ox,oy,oz);如果不初始化圆心则获取连续5帧掌心坐标,并将掌心坐标平滑成一点(x,y,z);根据圆心坐标和平滑成一点的掌心坐标计算方向向量(x-ox,z-oz);计算方向向量与-z轴之间夹角alpha;比较x和ox坐标大小,如果x>ox,则输出圆周角度alpha,如果x<ox,则输出圆周角度360-alpha。

在手势识别中主要分类介绍了各种手势的识别方法,然而一个完整的手势控制方法包含多种手势,由于手势之间的相似性以及耦合,会产生干扰以及误识别,特别是在不同手势之间切换时,误识别几率会增大。单存的从识别方法上并不能彻底解决这个问题,因此需要在控制逻辑上加以约束,特别是不同手势状态的切换。本发明中将一个完整的手势分解成多个不同类型的手势加以处理,降低了手势之间的相互干扰,例如两指捏合后水平直线运动这个手势,被拆分成了一个静态的数字2手势、动态的两指捏合手势以及水平面直线运动手势三部分,在控制逻辑中首先利用静态手势识别检测到数字2手势,当完成识别以后接下的状态就只有两种,一种是两指捏合,另一种是不进行任何动作(包括手从leapmotion视场中消失),在此基础上若检测到两指捏合手势,则接下来的状态又只有两种,一种是水平直线运动手势,另一种是不进行任何动作(包括手从leapmotion视场中消失)。所以基于上述的控制逻辑,包含许多分支的复杂手势状态都变成了只有两种状态的分支,通过这种控制逻辑解决了手势之间的相互干扰,提高了手势控制系统的稳定性。

现以多媒体播放器为例,说明本发明的具体实施步骤,相应手势所对应的播放器功能如表2所示。

表2播放器功能与对应手势

步骤a:判断播放器状态,如果关闭状态执行步骤b,如果开启状态执行步骤c;

步骤b:静态数字1手势,打开播放器,执行步骤c;

步骤c:判断是否要对播放器做相应功能的操作(即更改播放器状态),如果不需要相应功能的操作,执行步骤d,如果需要相应的功能操作,执行步骤e;

步骤d:维持播放器当前状态,并执行步骤c;

步骤e:进行静态手势识别,并执行步骤f;

步骤f:是否有执行直线运动手势指令或圆周运动手势指令,如果无指令,执行步骤g,如果有指令且为直线运动指令,执行步骤h,如果有指令且是圆周运动指令,执行步骤i;

步骤g:进行动态手势识别,如果检测到挥动手势,执行步骤j,如果检测到握拳手势执行k,如果检测到两指捏合手势,发出圆周手势指令并执行步骤f,如果检测到三指捏合手势,发出直线运动手势指令并执行步骤f,如果未检测到动态手势执行步骤c;

步骤h:播放器进度调节(直线运动手势),执行步骤c;

步骤i:音量调节(圆周运动手势),执行步骤c;

步骤j:节目切换,执行步骤c;

步骤k:关闭播放器,执行步骤a;

以上对本发明所提供的一种用于控制模拟量的手势识别控制方法,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1