深度:Leap Motion手势识别大揭秘

来源:http://tech.163.com/16/0503/10/BM4QI1OF00094P0U.html

2013年,初创公司Leap发布了面向PC及苹果电脑MAC的体感控制器Leap Motion。但是当时Leap Motion的体验效果并不好,又缺乏使用场景,与二维计算机及终端有着难以调和的矛盾。

而VR的出现,仿佛为Leap Motion新开了一扇天窗,Leap Motion倡导的三维空间交互与VR可谓完美结合,因此Orion应运而生。Orion是原有的Leap Motion软件的一个升级版本,硬件不变。在VR系统中,Orion提供了一种手势的输入方式,它可以将手部的活动信息实时反馈到处理器,最后显示在VR头显中。

简单来说,Leap Motion是基于双目视觉的手势识别设备。那什么是基于双目视觉的手势识别呢?

基于双目视觉的手势识别

顾名思义,双目视觉就是有两个摄像头,利用双目立体视觉成像原理,通过两个摄像机来提取包括三维位置在内的信息进行手势的综合分析判断,建立的是手部的立体模型。这种方法对于用户手势的输入限制较小,可以实现更加自然的人机交互,但由于需要进行立体匹配,且由于立体模型的复杂性,需要处理大量的数据,计算相对来说较复杂。

要实现双目手势识别首先需要对双目摄像头做标定,即是计算空间中左右两台摄像机位置的几何关系。首先是对单摄像机的标定,其主要任务是计算摄像机的内部参数(包含摄像机的投影变换矩阵和透镜畸变参数)和外部参数(包含相对于某个世界坐标系的旋转矩阵和平移向量),形象点说,摄像机本身存在畸变,如果不经过标定过程,摄像机所拍摄出的影响是存在畸变的,即可能将原本的矩形显示成不规则的圆角四边形。然后是标定,即计算空两台摄像机在空间中的相对的几何位置关系(包含旋转矩阵和平移向量),通俗讲就是使得两台摄像机所成的影像显示在同一水平线上。

接下来就是具体的手势识别过程了。

首先从双目摄像头采集操作者手势动作的左右视觉图像,通过立体视觉算法生成深度图像。具体过程:经过立体标定后获取经过校准的立体图像对后,进行立体匹配,获得视差图像,再利用摄像机的内参数及外参数进行三角计算获取深度图像。

然后对左(或右)视觉图像使用手势分割算法处理,分割出的人手所在的初始位置信息,并将该位置作为手势跟踪算法的起始位置。

再使用手势跟踪算法对人手运动进行跟踪。

再根据跟踪得到的结果进行手势的识别。需要说明的是,如果跟踪目标消失,则重新进行手势分割,再重复上述步骤。

双目手势识别流程图如下:

Orion采用的即是双目手势识别方法,其实现流程与上文所描述的双目手势识别实现流程基本一致,但是通过各种基于Orion的实验,我在这里对Orion的细节算法做一个猜想,仅供读者参考。

Orion相比于上文所述的双目手势识别基本方法不同之处在于,Orion在获取深度图像的步骤,并未对整个手型上的所有点做立体匹配,而是只选择了13个左右的特征点(图中蓝色点)做匹配,获得这13个左右特征点的信息后再利用IK算法推算出整个手部模型。

基于一些实验,我猜想Orion选择的特征点是13个左右,如下图中蓝色点:

基于这13个左右的蓝色点即可利用IK算法推算出图中红色点的数据,并最终获得整个手部模型。这里我说一下为什么猜想是匹配特征点而不是匹配所有点:

Orion的处理时间为8ms,即从读到手的图片到做完所有计算的时间只有8ms。这个时间是非常短暂的,要基于这样的时长来做整个手型上所有点的立体匹配是不可能的,只能选择一些特征点来做匹配,再根据特征点数据去推算(或者说估计)其他点的点云数据。

我所画出的这13个点均是较易匹配的点,而基于这些点即可利用IK算法构建整只手的模型。例如某根手指,基于指尖和指根两个点,即可根据手指长度等信息利用IK算法推算出手指其他关节点的数据。

此外,如果是匹配所有点,则Orion识别手指个数应该更加准确一些,但是目前基于我的实验显示,Orion手指个数识别存在较大问题,具体实例可以参考下文场景描述。

Leap Motion——Orion的优劣势

首先我们看看Orion的优势。为了能够应用在VR行业中很好的发挥效用,Orion相比于前面的产品有了很大改进:

目前的刷新率为120HZ,延迟为4ms。一般情况下我们认为,VR领域需要将影像设备的延迟做到20ms以下,否则会损害沉浸体验,并且导致眩晕。VR头显屏幕本身就存在一定延迟,交互设备就必须不能有过大延迟。虽然目前实际的延迟比4ms还是要大一些,不过能做到10ms以下,基本也不影响目前的应用。此外,实际视场角达到150度,适配目前的VR头显还是非常有优势的。

初始化:在初始化方面,Orion有非常大的改进。所谓初始化即手部首次进摄像头拍摄范围内的手势,以前Orion对于首个手势识别非常有限,仅能识别五个手指张开的手势。而新的产品则在该方面做了很大改进,目前,以一些常规的不复杂的手势进入都没有问题,例如五个手指张开、一个手指张开其他握紧等。(这里所说的复杂的手势是指Orion本身无法识别或者识别错误率较高的手势,例如两根手指叠加在一起的手势等。)

翻转: 同样,Orion在手部翻转方面有很大改进,准确率有很大提高。

以上是Orion目前应用于VR行业的优势,也是其可以应用于VR行业的基础。至于劣势,我根据自己实际体验的结果,给大家说几个Orion目前体验效果不够好的场景,读者也可以拿出自己的Leap Motion设备测试一下看看事实是不是如此。

手指检测不够准确:Orion在手指检测方面做得依然不够好,如下图手势:

即当我们的中指处于微张开状态下,Orion多数情况下会识别成完全张开或者完全收起,当我们慢慢的张开中指的过程中,Orion识别的手势也会有一个突变,及很容易从完全收起的状态突然变为张开状态,而失去了张开过程中的手势跟踪。

这里只是说明其中一个例子,其实还有很多其他这样的手指检测不够准确的状况。

手指个数检测不够准确:Orion手指个数检测存在很大问题,这里我简单介绍两种情况:

上图展示的是将两个手指认成三根手指,即当使用者两个手指分开过大时,Orion很容易在两个手指中间再添加一个手指。这个问题出现的原因依我猜想可能是Orion在手势检测中对于两个手指的张开距离有一个阈值,如果大于这个阈值就认定中间还有一根手指,而之所以没检测到这根手指的指尖特征点可能是由于遮挡。

上图展示的是一个较复杂的手势,识别出现错误。因为Leap Motion的摄像头在使用者头顶上,以摄像头视角看中指与食指重叠,无法拍到中指指尖。因此算法判定只有一根手指张开,即出现上图所示识别状态。

侧面手指信息过少,估计不准确:Orion对处于侧面的手势识别很差,这也是当时作者猜测其使用13个特征点匹配的一个小原因。当手处于侧面面对摄像头时,特征点大部分均被遮挡,造成手部准确信息非常少,所谓的估计就基本上是胡乱猜测了,因此无法准确判断侧面的手势中手指的状态。如下图即是手部侧面对着使用者佩戴的Leap Motion,将两根手指识别成三根手指:

目前国际上比较具有代表性的还有RealSense的手势识别,该产品应用的是深度摄像头,可以直接获取深度图像。得到深度数据后,后面的具体算法步骤就与双目识别的一样了。这种直接获取深度图像的算法,因为本身具有手部所有点的深度信息,不需要估计,因此准确度更高。国内采用深度摄像头的有我们G-Wearables团队独立研发的StepVR产品中的手势识别方法。

基于深度摄像头的手势识别方法无需购买昂贵的设备,仅需要深度摄像头、PC机即可,手势识别准确率高,并且在操作时更加自然、方便,符合以人为本和自由性的要求,是手势识别未来发展的趋势。对基于深度摄像头的手势识别感兴趣的读者可以关注我后续的文章。

时间: 2024-10-10 04:48:30

深度:Leap Motion手势识别大揭秘的相关文章

Unity3D中使用Leap Motion进行手势控制

Leap Motion作为一款手势识别设备,相比于Kniect,优点在于精确度. 在我的毕业设计<场景漫游器>的开发中,Leap Motion的手势控制作为重要的一个环节.以此,谈谈开发中使用Leap Motion进行手势识别的实现方式以及需要注意的地方. 一.对Leap Motion的能力进行评估 在设定手势之前,我们必须知道Leap Motion能做到哪种程度,以免在设定方案之后发现很难实现.这个评估依靠实际对设备的使用体验,主要从三个方面: 1.Leap Motion提供的可视化的手势识

Leap Motion 之Unity 开发指南(一. 基本概念与制作手预制件)

LeapMotion 之Unity开发指南(一.基本概念和手的预制件) [序言] 最近用Leap Motion + 国产的3Glass眼镜构建了房地产.数字矿山的一些应用,感觉这是很经济的一个VR架构方案,比用Oculus和HTC的硬件要省钱得多,并且效果也不错. 在行业VR应用中,其实重在培训教育.生产安全的仿真演练上,更多地通过一些UI互动.基础性的手势(比如开关设备.拾起灭火装备等)来进行交互,这些并不一定需要非常昂贵的激光定位设备.复杂的硬件套件才可实现,而手势识别在未来也是一个趋势.

【VR】Leap Motion 官网文档 手型资源

前言: Leap Motion的官网文档已经有不少的热心网友参与了翻译,但没有覆盖官网文档的全部. 为迎合Unity VR的热潮与大家的学习需要,推出的针对Unity方向的官方文档翻译系列. 第三篇 <手型资源> 介绍了Leap Motion为Unity提供的资源包种的手型预设体资源. Hand Assets  手型资源 The Leap Motion core assets for Unity include a number of pre-made hand prefabs assets.

【VR】Leap Motion 官网文档 FingerModel (手指模型)

前言: 感谢关注和支持这个Leap Motion系列翻译的朋友们,很抱歉由于工作原因很久没有更新,今后这个翻译还会继续(除非官方直接给出中文文档).本篇献给大家的是 <FingerModel (手指模型)> ,该类主要用于手指模型的创建.更新.信息获取及控制等. FingerModel?  手指模型类 FingerModel is the base class for all the other finger scripts. If you are creating your own fing

【VR】Leap Motion 官网文档 HandController(手部控制器)

前言: 本系列译文是为迎合Unity VR的热潮与大家的学习需要,推出的针对Unity方向的Leap Motion官方文档中英对照翻译. 本篇第五篇 <HandController(手部控制器)> 介绍了HandController(手部控制器)预设体与HandController脚本组件使用,以及HandController类中定义的各个公共属性与方法. HandController  手部控制器 The HandController script is attached to the Ha

【手势交互】3. Leap Motion

美国 http://www.leapmotion.com/ Leap Motion是一种3D动作控制系统,其创始人在读书期间发现传统的鼠标对于3D软件的控制极为不方便,因此迸发出要设计一套全新的动作控制系统来自由的控制电脑软件.2012年5月,Leap Motion推出的3D动作控制系统完全突破了以前3D控制的概念,为未来的3D交互打开了无限的想象空间,可以在电脑里进行3D手绘.三维模型设计.游戏控制等.这个被称作Leap的技术能让人通过手指直接控制电脑,包括图片缩放.移动.旋转.指令操作.精准

【VR】Leap Motion 官网文档 Unity资源与插件

前言: Leap Motion的官网文档已经有不少的热心网友参与了翻译,但没有覆盖官网文档的全部. 为迎合Unity VR的热潮与大家的学习需要,本博客将推出针对Unity方向的官方文档翻译系列. 本篇首先对Leap Motion所提供的Unity资源与插件进行概述. 英文原文网址:https://developer.leapmotion.com/documentation/unity/index.html 译文首发&持续更新:http://blog.csdn.net/duzixi Leap M

Leap Motion 探究 【第一篇】

由于团队开发需要,今天拿到了Leap Motion做测试开发,也就是历动,一款手部识别传感器. 拿到历动之前已经对它有所了解,然而拿到手后发现确实不如想象中的那么没好,由于基础图像识别,肯定有一些弊端,例如手部遮盖部分识别出错,应用体验一般,应用也比较少等,给我的感觉好像这是一款还处于最后优化的产品,并不能代替现有的交互操作体验.不过,在一些简单的交互上,Leap还是给我了一个很好的反馈,比如手掌的左右倾斜,手指简单的点击操作等. 结合VR交互,这款产品应该是一个颠覆性体验,抛弃了传统的遥控器式

【VR】Leap Motion 官网文档 HandModel(手部模型)

前言: 本系列译文是为迎合Unity VR的热潮与大家的学习需要,推出的针对Unity方向的Leap Motion官方文档中英对照翻译. 本篇为第六篇 <HandModel(手部模型)> ,该类主要用于连接控制器和手部模型,以及处理手臂.肘部.手掌.手指的位置和角度等信息. Handmodel is the base class for all the other hand scripts. If you are creating your own hands and need a custo