LeapMotion系统概述

转载 2015年07月09日 19:47:27

从leap motion官网的介绍文章leap motion overview中,提取出个人认为有价值的东西,做下笔记,也是分享,希望能给大家带来帮助。原文地址

https://developer.leapmotion.com/documentation/Languages/C++/Guides/Leap_Overview.html

一、坐标系统

leap motion系统使用右手笛卡尔坐标系(图1)。什么是右手坐标系呢?就是右手四指从X轴正向向Y轴正向握拳,拇指方向就是Z轴正向(图2)。记录单位为毫米,原点在设备中心。X,Z轴水平,Y轴竖直。远离屏幕Z值增大,向上Y值增大,需注意放置方向。


图一 leap motion 坐标系


图二 右手坐标系

二、动作跟踪数据

leap motion可以跟踪手,手指,和一些小工具,并以帧的形式更新跟踪数据。每一帧包括跟踪对象的列表,和描述对象动作的特征。每检测到一个对象leap motion就自动给它分配一个唯一的ID,直到对象移动出检测区域,重新进入检测区域的对象会重新分配ID。

1、帧的结构

每一个帧的实例都包括跟踪数据,手势和动作因子(factor)等。

跟踪数据列表:

  • hands手。包括所有可以检测到的
  • fingers手指。所有的
  • tools工具。所有的
  • pointables。具有指向性的物体,包括所有的手指和工具
  • gestures手势。包括以上所有对象的动作
每帧有三个pointables列表,手指、工具、pointables,包含了所有被检测到的具有指向性的物体。可以利用和手的关联性,通过手的列表找到pointables。在帧序列中跟踪一个独立物体时,可以根据ID号在下一帧中查找该物体。通过ID可以查找到跟踪数据列表里面的所有对象。如果当前帧存在查找对象,查找函数返回一个指向该对象的引用。如果对象不存在了,就返回一个不可见对象,其中不包含有效的跟踪数据。这样就可以避免每次跟踪物体时都有检查其是否存在。

leap motion通过分析当前帧动作与之前帧动作的变化,将动作翻译成平移、旋转、缩放等动作因子。例如双手都向左移动表示平移,双手做转球的动作表示旋转,双手相向移动或远离表示缩放。leap motion根据检测区域内检测到的所有对象的运动转化为动作因子。如果检测到两只手,则同时考虑两只手的动作,也可以通过单个手的实例分别获取每一只手的动作因子。

描述动作的属性包括:

  • rotation axis旋转轴 
  • rotation angle旋转角度
  • rotation matrix旋转矩阵
  • scale factor缩放系数
  • translation平移向量
通过动作因子操作物体就可以避免跟踪多帧间的手和手指。帧可以帧内动作进行估计,把它当成特定的动作,比如当缩放系数特别大的时候,就可以忽略平移和旋转。使用该估计过滤掉多余的帧可以增加程序的可用性。

2、手的模型

手模型可以提供位置、特征、动作,以及和手关联的手指、工具等信息。对手的模型leap motion API提供了尽可能多的信息,但并不是每一帧都能完全检测到这些属性。例如握拳时,手指不可见,所以手指的列表就可能为空,编码时要注意到这些情况。

leap motion并不区分左右手,hand列表也可以包含超过2只手,但是超出两只手时会影响跟踪效果。

手的属性包括:

  • palm position手掌位置,手掌中心位置距leap motion原点的距离,单位毫米
  • palm velocity手掌速度,单位mm/s
  • palm normal手掌法向量,由掌心向下指向外部,图3
  • direction方向,掌心指向手指的向量,图3
  • sphere center球心,根据手的曲线拟合出的球的球心,图4
  • sphere radius球半径,拟合球的半径,图4
方向和手掌法向量都是单位向量。


图3 法向量和方向


图4 球心与球半径

手的动作即上面提到的平移,旋转,缩放等,不再赘述。

调用函数hand::finger(),hand::tool(),hand::pointable()可以得到手指和工具的ID。

3、手指和工具的模型

leap motion靠形状识别手状物体,工具指比手更长、更细或者更直的物体(图5)。在leap motion模型中,手指和工具被抽象为pointable对象。其物理属性包括:

  • length长度。可见部分长度
  • width宽度。可见部分平均宽度
  • direction方向。物体的单位向量,例如从指根到指尖,图6
  • tip position指尖的位置。指尖相对leap motion原点的位置,单位mm
  • tip velocity指尖的速度。单位mm/s
函数Pointable::isTool()可以判断一个pointable对象是手指还是工具。


图5 工具更长,更细,更直


图6 指尖位置和方向向量

4、手势

leap motion可以识别特定的运动模式,用户可以靠这些手势发令。手势和手指、手等其他运动跟踪数据的传回方式一样,每发现一个手势就向帧中自动添加一个手势对象,可以从帧中的手势列表获取手势对象。

leap motion可以识别的运动模式包括:

  • circle画圆,一根手指画一个圆
  • swipe挥扫,手的线性运动
  • key tap击键,敲键盘一样的轻击
  • screen tap触屏,触摸垂直屏幕一样的轻击
leap motion首次识别出一个手势后将其加入帧,如果这是一个持续性动作,leap motion将一个更新的手势对象加入后续帧。画圆和挥扫是持续性动作,leap motion在每一帧中更新这些手势,tap轻击是不连续的动作,所以每次敲击只需一个手势对象。

程序中,想使用某个手势前,需要调用Controller类中的enableGesture()方法启用该手势的识别。

画圆

可以用手指和工具画圆,手势开始后leap motion会一直更新这个过程直到手势结束,手指或工具离开圆的轨道或动作过慢时视为手势结束。相关API:CircleGesture。


图7 画圆

挥扫

相关API:SwipeGesture。


图8 挥扫

击键

快速的向下敲击被视为一次击键手势。相关API:KeyTapGesture。


图9 击键

触屏

快速向前轻击被视为一次触屏手势,相关API: ScreenTapGesture。


图10 触屏

有些地方翻译的比较生硬。请指教。

相关文章推荐

Leap Motion 教你玩转手势

刚尝试手势的时候我差点选择放弃,现在想想还是自己不好好看SDK,小心使得万年船啊。         五一不想断更的,实在是没办法,出去的急忘了带笔记本,只好断更。下午才回来,毕竟这种万年没休的也习惯...

1.leapmotion之API概述(Javascript文档V3.1)

API概述 Leap Motion系统识别和跟踪手和手指。 该装置以高精度和跟踪帧速率紧密接近地操作,并报告离散位置和运动。 Leap Motion控制器使用光学传感器和红外灯。 传感器沿着y...

LeapMotion猜拳跟随程序

  • 2016-10-09 13:04
  • 26.67MB
  • 下载

Leapmotion SDK

  • 2014-09-15 20:36
  • 1.94MB
  • 下载

Hadoop基础教程-第3章 HDFS:分布式文件系统(3.1 HDFS概述)

第3章 HDFS:分布式文件系统3.1 HDFS概述在大数据时代,需要处理分析的数据集的大小已经远远超过了单台计算机的存储能力,需要将数据集进行分区(partition)并存储到若干台独立自治计算机中...

LeapMotion_CoreAsset_Orion_4.1.5

  • 2017-04-07 10:00
  • 1.91MB
  • 下载

LeapMotion PPT控制软件

  • 2014-04-07 23:12
  • 458KB
  • 下载

海量文献管理系统概述

很长一段时间不写博客了,因为最近要弄论文,但看到我的博客上被CSDN加了个“恒”的小图标,要求是每个月发四篇日志以上,以鼓励大家多把东西拿出来分享。这一点其实挺好的,很多程序员擅长于编码,但并不一定讲...

leapmotion拼图

  • 2014-12-08 10:09
  • 2.01MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)