欢迎光临
我们一直在努力

【翻译】Leapmotion-python开发官方文档(4)

Lord_Rebel要了转载权,TA翻译了10篇文章,就像我以前翻译c++。十分感谢她的努力,我全部转载到这里方便大家阅读。

【翻译】Leapmotion-python开发官方文档(1)
【翻译】Leapmotion-python开发官方文档(2)
【翻译】Leapmotion-python开发官方文档(3)
【翻译】Leapmotion-python开发官方文档(4)
【翻译】Leapmotion-python开发官方文档(5)
【翻译】Leapmotion-python开发官方文档(6)
【翻译】Leapmotion-python开发官方文档(7)
【翻译】Leapmotion-python开发官方文档(8)
【翻译】Leapmotion-python开发官方文档(9)
【翻译】Leapmotion-python开发官方文档(10)

(介于本人翻译能力有限,如有错误,望指出)

Hands

手是LeapMotion控制器所追踪的最基本的实体。控制器内部保持着一个手部模型,以此来验证从其传感器收集到的数据。这就能够使得即使一个手指没有完全可见,控制器仍能追踪到其位置。注意,当一个手指在手的后方或者正前方(以控制器的视野)时移动或者发生改变时其位置可能会发生丢失。LeapMotion软件会将现实数据与内建模型进行匹配。在某些情况下,软件可能产生一个错误的匹配——比如,将左手错认成右手。
Hand类代表一个被LeapMotion检测到的手部对象。Hand对象提供Pointables列表以及描述手位置,运动,方向的属性。
手象可以被定义成左手以及右手。此外,每个手部对象第一次被检测到时都会分配一个ID值(使用timeVisible属性判断一只手是不是刚刚探测到。)如果LeapMotion软件认为一只手被错误分类或者必须改变其类型(从左手变成右手或者相反)也会重新分配一个新的ID值。

获取手对象

从Frame对象中获得Hand对象。

或者如果你已经从之前的数据帧中知道了相关ID

你也可以通过手在数据帧的相对位置来获得它。

注意,leftmost和rightmost函数只会判断处于最左或者最右边的手使用Hand.isLeft 或者isRight属性判断手对象代表右手还是左手。

获得手的属性

一只手由其位置,方向,姿势,运动以及左右手性质描述:
isRight,isLeft——定义手是左手还是右手。
Palm_Position——手掌中心左标(单位:毫米,以LeapMotion坐标系)
Palm_Velocity——手掌的运动速度及方向(毫米每秒)
Palm_normal——一个垂直于手掌平面的向量。(手掌平面法线),向量朝下穿出手掌。
Direction——一个从手掌中心指向手指方向的向量。
grabStrengh,pinchStrength——描述手的姿势。
Motion_factors——提供相对缩放,旋转,平移因子(从两帧之间的运动中比对而出)
手的位置基于其手掌位置属性,手掌位置属性提供一个基于Leap坐标系的手掌中心点坐标(三维,单位:毫米)。手的方向由两个向量决定:朝向,从手掌中心指向手指的向量;手掌法线,方向向下穿过手掌并与手掌平面垂直。
手掌的运动由速率属性给出,速率属性是一个提供实时移动速率(mm/s)的向量。你也可以获得表征手在两帧之间的运动的(平移,翻转,缩放)运动因子。

下面代码段展示了如何从帧中获得Hand对象并访问其基本的属性:

获得手指对象

你可以以列表形式或者使用相应的ID获得与手关联的手指对象。
通过列表形式:

通过ID:

通过在LeapMotion视野中的相对位置获得手指对象,使用相关的类列表中的right-,left-以及frontmost函数:

注意,这些函数都是以Leapmotion坐标系为参考系的,而不是手本身的参考系。你可以使用Leap中的Matrix类将手指坐标变换到手掌坐标系中。

计算手方向

你可以使用手的朝向及法相向量计算手的方向。
法线向量垂直穿出手掌,朝向向量指向手指。
Vector类提供了一些函数来获得与x轴的夹角(pitch)、与y轴的夹角(yaw)、与z轴的夹角(roll)

注意 roll函数在法相向量的使用中只会提供理想的角度。

将手指坐标变换到手参考系下

有些时候得到手指相对于手参考系下的坐标是十分有用的。这能让你在空间上处理手指位置简化对手指位置的分析。你可以使用Matrix类创建一个用于变换手指位置和方向的变换矩阵。以手为参考系的坐标系可由手的basis和palm_position属性轻松定义。基本坐标轴x轴从手掌侧面穿过,z轴指向手指方向,y轴平行于手掌法线,原点在手掌中心。

手列表

Handlist类看起来像std::vector数组(C++ STL)同时支持迭代器。从LeapMotion API获得的手列表是只读的,但你可以组合拥有相同对象类型的列表。
使用迭代器访问一个列表类。

HandList类还定义了一些用于基于Leapmotion坐标系下相对位置访问列表成员的函数。这些函数包括leftmost(), rightmost(), 和frontmost()。以下代码段展示如何获得最右边的手对象

 

赞(0) 直达链接
未经允许不得转载:小明编程 » 【翻译】Leapmotion-python开发官方文档(4)

评论 抢沙发