什么是LeapMotion

时间:2022-09-06 16:19:15

LeapMotion预览

这个就是LeapMotion:

什么是LeapMotion

原文转自:   LeapMotion预览

LeapMotion 官网:http://leapmotion.com/

开发者:https://developer.leapmotion.com   (需注册)

官方视频:http://v.youku.com/v_show/id_XNTgzMjc5Njgw.html

Leap识别并绑定手,手指或者类似手指的工具,这款设备能够在毫米级别的前提下实现操作和帧率的绑定。基于Leap的SDK的软件能够分析在设备视野能的物体,并对手,手指和工具的位置,手势和动作做出反应!
Leap的视野范围是一个以设备为中心的倒状金字塔,有效的范围是从设备纸上26㎜到600㎜!

概括预览:

1. 坐标系统

2. 动作捕捉数据

2.1 帧

2.2 绑定数据列表

2.3 帧动画

3. 手模型

3.1 手属性

3.2手的动画

3.3手指和工具列表

3.4手指和工具模型

4. 手势

4.1 花圈

4.2 划过

4.3 点击

4.3.1 按键类型点击

4.3.2 屏幕类型点击

Coordinate system
1. 坐标系统
Leap遵循右手坐标系,坐标系中单位与世界中一毫米相对应,坐标原点是设备的中心。
XZ轴组成水平的一个平面,X轴指向设备的长边,Y轴竖直,向上为正方向!Z轴相对屏幕向外是正方向!

什么是LeapMotion

2. 动作绑定数据
Leap通过绑定视野范围能的手,手指或者工具来提供实时数据,这些数据多数是通过集合或者圳数据提供!每一帧都包含了一系列的基本绑定数据,比如手,手指或者工具的数据,当然,他也能实时的识别场景中的手势和自定义数据!

当设备检测到手、手指、工具或者是手势的话,设备会赋予它一个唯一的ID号码作为标记,只要这个实体不出设备的可视区域,这个ID号就会一直不变,如果设备丢失这个实体之后又出现了,Leap 就会赋予它一个新的ID号码,但是软件不会知道这个和以前的那个实体有什么关系。

注意:我们计划在发布给消费者能够提高为你程序提供的动画步骤的数据。在将来发布的SDK中,我们计划使用骨骼手指模型来提供更加详细的数据绑定和连续性的实时数据。

2.1 帧

A Frame object provides lists of the tracking data, gestures, and factors describing the overall motion observed in the Leap field of view.

一个Frame的对象提供了绑定数据,手势和元素的列表,这些数据用来描述设备视野内观察到整体的动作。

2.2 数据绑定的列表

Hands——所有的手

Pointables——所有作为 Pointables的手指和工具

Fingers——所有的手指
Tools——所有的工具

Gestures——所有的手势包括开始、结束或者在进行中的

这三个 可指向物体的列表(可指向物体、手指、工具)包含每一个在每一种里被检测到的可指向的物体。你可以使用一个手来访问这些可指向的物体,这个手对象是通过Hands在手列表中的对象。需要注意的是:手指或者工具可能不会被手对象所关联,愿意是这些可指向的物体只有一部分在Leap的可视区域里面。

如果你绑定了一个单独的物体,比如一个手指头,每一帧中,你都可以通过ID和那个物体关联起来,并在新的帧里面找到它。使用以下的方法来找到相应的类型物体。

Frame.Hand()
Frame.Finger()
Frame.Tool()
Frame.Pointable()
Frame.Gesture()

这些方法函数返回相应的对象的引用,如果在当前的帧里面存在的话。如果这个对象不再存在了,一个特殊的无效对象就会被返回。无效对象被很好的定义供你使用,但是不存在有效的绑定数据。这项技术帮助我们减少了空对象检测的工作。

2.3 帧动画

Leap 能够分析在场景中较早的帧中的整体的动画,并且综合典型的移动旋转和缩放因素。比如,如果你将两只手同时向左移动,并保证在Leap的视野里面,在帧中包含了移动的信息。如果你弯曲你的手就像旋转一个球,在帧里面就包含旋转的信息。如果你移动两只手相对或者相向移动,那么在帧中就包含了缩放的信息。Leap设备对于动画的分析基于在视野中的所有物体,如果有一个手在其中的话,那么就会基于这一个手的因素来分析,如果两个手的话,分析动画就会基于两个手的因素。你也可以为每一个手获得独立的动画因素,需要从Hand对象里面获得。

帧动画的产生是通过当前的帧与更早的帧的比较获得的。描述动画合成的属性包括以下:

RotationAxis — 旋转轴的方向.
RotationAngle —顺时针旋转的角度
RotationMatrix — 描述旋转的矩阵.
ScaleFactor — 表达碰撞或者收缩的因素
Translation — 线性移动的因素

你可以直接添加动画因素来操作这些物体,而不需要绑定个人的数据。

【2013-07-14 添加手模型的 信息】

3.手模型

这个 手模型 提供了被绑定的手的位置信息、特点以及运动方式。并且还包括了手指或者手上的工具的所有和手关联的东西的信息。

LeapAPI尽可能多的提供关于手的信息。但是,Leap不能够确定每一帧所有属性。比如当你的手突然攥成了拳头,这个时候,它上面的所有的手指是不能用了,手指的list就成了空。所以你的程序需要对这种情况最一个检测。

Leap设备不能确定某一个手是左手还是右手,多于两个手出现都可以放到list里面去,如果不止一个人将手放进来,或者有一个像手的物体。然而还是建议最多两个手来保证动作步骤的质量。

3.1 Hand 类属性

Hand对象提供了几个属性来反映绑定后的手的物理特性:

PalmPosition — The center of the palmmeasured in millimeters from the Leap origin.

PlamPosition——手掌中心到Leap设备原点以毫米测量的距离
PalmVelocity — The speed of the palm in millimeters per second.

PalmVelocity——以 毫米每秒为单位的手掌移动的速度。

PalmNormal——一个向量,这个向量是垂直于手掌所形成的平面的。并且向量从手掌出来指向下。

Direction——一个向量,从手掌指向手指的方向。

什么是LeapMotion

SphereCenter——适合手弯曲后曲率的一个球的中心(就像用手握住一个球一样)

SphereRadius — The radius of a sphere fit to the curvature of the hand. Theradius changes with the shape of the hand.

SphereRadius——适合手弯曲后曲率的一个球的半径,这个半径随着手的形状而变化。

direction 和PalmNormal是一个单位向量,描述了手相对于Leap设备的坐标系统。

PalmNormal向量指向了手掌的垂直向外的方向。Direction向量指向前。

我们手握住的时候,就好象有一个球在手里,SphereCenter和SphereRadius就描述了这样一个球的中心和半径,这个球的曲率随着我们的手变化。

什么是LeapMotion

3.2 手的动作

Hand对象也提供了一些属性来反映绑定的手在frames中的动作。Leap设备分析手的动作就像分析手指和工具的并且代表了移动、旋转、缩放等因素。在Leap设备的可视范围内移动手指表示移动,旋转、弯曲或者倾斜你的手表示旋转,是手指或者工具相对或者相对的移动表示缩放。

手的动作是通过比较手在当前frame的属性和较早的frame相比较产生的,手动作的属性包括:

RotationAxis — A direction vectorexpressing the axis of rotation.

RotationAxis——一个方向向量来表示旋转的轴
RotationAngle — The angle of rotation clockwise around the rotation axis (usingthe right-hand rule).

RotationAngle——沿着旋转轴顺时针所转动的角度(使用右手定则)
RotationMatrix — A transform matrix expressing the rotation.

RotationMatrix——一个表达旋转的变化矩阵
ScaleFactor — A factor expressing expansion or contraction.

ScaleFactor——一个表达收缩或者放大的因素
Translation — A vector expressing the linear movement.

Translation——一个表达线型移动的向量
3.3 手指和工具列表

你可以使用下面三个当中的一个来访问fingers或者tools:

Pointables — Both fingers and tools asPointable objects.

Pointables——finger和 tools 都是Pointable 对象(下面两个继承于它)
Fingers — Just the fingers.

Fingers——仅仅是fingers
Tools — Just the tools.

Tools——仅仅是tools

你也可以使用 从前一帧获取的ID值来访问fingers或者tools,使用 Hand.finger() ,Hand.tool()或者如果你不需要区分这两者的话可是使用 Hand.pointtable()方法。

4. 手指和工具的模型

在Leap设备可视区域里面可以识别并绑定手指和类似手指的工具。Leap设备将像手指的对象通过形状归为tools。工具对手指来说更长、更瘦、更值。

In the Leap model, the physical characteristics offingers and tools are abstracted into a Pointable object. Fingers and tools aretypes of pointable objects. The physical characteristics of pointable objectsinclude:

在Leap模型里面。手指或者工具的物理特性被抽象问Pointable对象。并且fingers和tools是pointable对象类型的。Pointable对象的物理特性包括:

Length — The length of the visibleportion of the object (from where it extends out of the hand to the tip).

Length——这个可以被看见的物体的长度(从手里陈出来到指尖)
Width — The average width of the visible portion of the object.

Width——可是物体的平均宽度
Direction — A unit direction vector pointing in the same direction as theobject (i.e. from base to tip).

Direction——一个和物体所指的方向一样的单位方向向量
TipPosition — The position of the tip in millimeters from the Leap origin.

TipPosition——末梢的位置距离Leap设备多少毫米
TipVelocity — The speed of the tip in millimeters per second.

TipVelocity——末梢以毫米每秒的移动速度

什么是LeapMotion

手指的 TipPosition and Direction 向量为我们提供了手指末梢的位置和手指所指的方向。

Leap设备将所绑定的物体分为手指或者工具。使用 Pointable.isTool属性就可以判断这个绑定的物体是手指还是工具了。

什么是LeapMotion

工具跟手比起来更长、更细、更直。

5.手势

Leap设备作为手势分析某一个运动模式,这个运动模式里面可能包含了用户的想法或者命令。设备响应在frame中观察到的手势和相应手指绑定数据和手是一样的。对于每一个观察到的手势,设备就会在frame中放置一个Grsture对象。你可以从 Frame gestures列表中获取这个对象。

以下运动模式能够被Leap所识别。
Circle — A single finger tracing a circle.

Circle——单一的手指被或者旋转一周
Swipe — A linear movement of the hand.

Swipe——一个手的直线运动

点击

Leap设备能够分析两种类型的点击:向下的 KeyTap 和向前的 ScreenTap
Key Tap — A tapping movement by a finger as if tapping a keyboard key.

KeyTap—— 一种就像点击键盘的点击运动
Screen Tap — A tapping movement by the finger as if tapping a vertical computerscreen.

ScreenTap——一种点击运动就像点击一个虚拟的电脑屏幕

当Leap设备首先将一个运动模式分类为手势的时候,首先对Frame里面添加了一个Gesture 对象。如果这个手势持续到结束时间。Leap就对在随后的Frame里面更新这个Gestures对象。手势 Circle和Swipe是连续的,设备在每一帧都更新手势的进度。点击是分离的手势。设备响应点击是使用了一个单独的Gesture对象。

重要的是:在在你的应用程序使用手势之前,你需要开启每一个你需要用的手势。在Controller类中有一个方法 EnableGesture() 你可以使用它来开启你需要用到的手势。

Circle

画圈

设备识别一个手指头画一个圈作为Circle手势。

什么是LeapMotion

手指画圈动作

你可以使用手指或者工具画圈。Cirlce 手势是一个连续性的手势,一旦手势开始,设备就开始更新进度知道手势结束。Circle手势在画完或者背离圆弧轨迹或者画的太慢。

滑动

设备认为一个手指线性移动是Swipe手势。

什么是LeapMotion

一个水平滑动的手势

你可以使用任何一个手指在任何方向上做一个平滑的手势。平滑的手势也是连续性的手势。一旦手势开始,Leap设备就会一直更新这个手势的进度直到结束。一个平滑移动的手势的结束包括改变了移动方向或者移动的太慢。

点击

设备识别两种类型的点击:向下点击和向前点击(KeyTap和ScreenTap)

键盘点击

设备识别一种快速的向下的手指或者工具的移动作为KeyTap。

什么是LeapMotion

一种KeyTap 的点击方式

你可以做一个键盘式的点击手势通过把手指像是弹钢琴一样的向下点击。点击是独立的手势,一个Gesture对象只对一次点击手势添加。

屏幕点击

设备分析手指或者工具的一个快速的向前的点击屏幕的运动为ScreenTaps。

什么是LeapMotion

一种screentap的手势点击效果

你可以通过使用手指或者工具向前推进就像点击垂直的屏幕一样做一个ScreenTap。ScreenTap也是离散的所以一个点击手势智慧添加一个Gesture对象。

作者:leisure 
原文出自:http://www.cnblogs.com/leisure/ 
感谢园子,感谢各位支持。本文版权归伟征和博客园共有,欢迎转载@ 但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 
只是想分享,欢迎拍砖!促进我成长

 
分类: c++之路

什么是LeapMotion的更多相关文章

  1. 查看leapmotion的frame信息

    leapmotion的SDK里有个c#实例,很详细,其中的frame类已经把这些封装的很完善了.可惜是控制台的,运行时很难去找那些动作对应的哪些数据.我今天做的就是把它们在窗体控件里分别显示出来,这样 ...

  2. LeapMotion(2):追踪五指

    上一篇文章,我们实现了Leap Motion的简单测试.追踪其中一个手指并用红色圆形表示其在空间的位置. 这篇文章,我们来实现五指的追踪. 其实,能够实现一指的追踪,那么五指的追踪自然不成问题.但是, ...

  3. 第一个leapmotion的小游戏

    自从看过leapmotion的宣传视频,就被吸引住了.觉得这东西迟早要替代鼠标,然后关注了一年多leapmotion的动态,终于在今年8月份入手了一只.//675大洋啊,心疼~ 一直想写份评测,一直想 ...

  4. LeapMotion预览——什么是LeapMotion

    LeapMotion预览 这个就是LeapMotion: 原文转自:   LeapMotion预览 LeapMotion 官网:http://leapmotion.com/ 开发者:https://d ...

  5. LeapMotion Demo3

    原文:LeapMotion Demo3   从Github及其他论坛下载一些LeapMotion的例子,部分例子由于SDK的更新有一些小Bug, 已修复,感兴趣的可以下载:       http:// ...

  6. LeapMotion Demo2

    原文:LeapMotion Demo2    官方doc有四个手势,最近尝试实现对握拳的识别,并能在我的程序界面上体现出来.    调试过程较为繁琐,幸好最终效果还差强人意! 首先看看我的效果图:   ...

  7. LeapMotion Demo1

    原文:LeapMotion Demo1     LeapMotion SDK For c# 只提供了一个Sample.cs.   Leap Motion App Home 可以给初入手者提供很好的用户 ...

  8. LeapMotion控制器 java语言开发笔记--(连接控制器)

    (1)为了连接LeapMotion控制器,创建controller对象,这个对象自动创建与控制器的服务或者后台程序连接,然后捕获数据提供给你的应用程序.可以使用该对象来获取连接信息. (2)获取Fra ...

  9. LeapMotion控制器 java语言开发笔记--(Java开发环境的准备)

    (1)官方文档说的是必须是JDK6,JDK7,我试了一下JDK8也是可以的 (2)我是在Windows系统下用的是Eclipse Java的开发环境这里不再多说.将下载的JDK里面的java.dll和 ...

随机推荐

  1. 使用BAPI_ACC_DOCUMENT_POST,创建会计凭证,用BADI扩展字段(转)

    业务需求:和银行做一个接口,要通过银行流水产生会计凭证,会计凭证的事务码是F-02,查到了BAPI方法BAPI_ACC_DOCUMENT_POST.昨天测试发现,有一些参数在BAPI_ACC_DOCU ...

  2. dom 筛选器

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  3. &period;Net Standard扩展支持实例分享

    上篇(.Net基础体系和跨框架开发普及)介绍了.Net当前生态下的大概情况,也分享了简单实现的过程,这篇文章就是讲解我的OSS.Common项目扩展.Net Standard 支持的过程,主要集中在: ...

  4. SharePoint Patterns and Practices 简介

    作者:陈希章 发表于 2017年12月22日 SharePoint Patterns and Practices,以下简称PnP,是由微软的SharePoint产品组发起并主持的一个有关SharePo ...

  5. Cocoa惯性思维调试一例

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 人总有惯性思维,在编程调试里也不例外.你总以为错误是显然的那一 ...

  6. django(models)视图与html 简单的操作

    !数据提前写好 urls映射图 点击a标签之后

  7. Notepad2、Sublime&lowbar;text带图标的右键快捷打开方式

    实现的效果:选中文本文件右键鼠标之后,按x键即可用notepad2快速打开文件,按3则可以用Sublime_text打开文件. 具体过程:根据各自需求,将下面的注册表信息,保存到本地新建的文本文件中, ...

  8. 2019&period;02&period;06 bzoj4503&colon; 两个串(fft)

    传送门 题意简述:给两个字符串s,ts,ts,t,ttt中可能有通配符,问ttt在sss出现的次数和所有位置. 思路:一道很熟悉的题,跟bzoj4259bzoj4259bzoj4259差不多的. 然后 ...

  9. 为什么要使用encodeURL转换URL编码?

    参考: https://www.cnblogs.com/haitao-fan/p/3399018.html http://www.ruanyifeng.com/blog/2010/02/url_enc ...

  10. spring boot2&period;0冷知识

    首先,Spring Boot 2.0.0 要求 Java 8 或更高版本,不再支持 Java 6 和 7. 在 Spring Boot 2.0 中,许多配置属性已被重命名或被删除,相应地,开发者需要升 ...