图2-4 手在Leap Motion上方大致的位置
2。2。1 坐标系统
Leap Motion的系统采用的是右手笛卡尔坐标系,返回的数值均以毫米为单位。原点被设置在Leap Motion 控制器的中心。X轴和Z轴在器件的水平面上,X轴和设备的长边平行,Z轴和短边平行。Y轴是垂直的,以正值增加形式朝上。距离计算机屏幕越远,Z轴正值不断增加。三维坐标系示意图如图2-5所示。
图2-5 Leap Motion采用的右手笛卡尔三维坐标系
Leap Motion在三维坐标系内检测并跟踪时需要用到的物理量与其对应的单位[8]见表2-1所示。
表2-1 Leap Motion 需要用到的物理量与单位
物理量 距离 时间 速度 角度
单位 毫米 微秒 毫米/秒 弧度
2。2。2 动作跟踪数据
由于Leap Motion设备最终在它视野中的是手、手指和工具,它会提供一组数据集更新,或者是帧,或者是数据。每帧数据包含一个基本追踪数据列表,如手、手指和工具,也包括识别出的手势和描述场景中的运动因素。
但检测到手、手指和工具或手势时,Leap Motion'软件为它分配一个唯一的ID指示符。只要这个实体一直存在于设备可视范围内,这个ID指示符就保持不变。如果追踪目标丢失或者失而复得,Leap Motion软件会分配一个新的ID(软件无法得知手、手指是否在之前已经被探测过)[9]。
1) 帧
一个帧对象提供追踪数据、手势和在Leap Motion可视范围内的整体运动因素的列表。帧运动信息的产生是通过比较当前帧与之前一个特别的帧。描述合成运动的属性包含:
Hands手,所有的手。
Pointables有端点的,手指和有段点的工具。
Fingers手指,所有的手指。
Tools工具,所有的工具。
Gesture手势---所有手势的开始、结束或者哪个进行了更新。
这三个具有端点的列表(Pointables,Fingers,Tools)包含了任何在数据帧检测出的有端点的对象。通过访问手的列表,可以获取手中物体的信息。需要注意的是,如果用户的手只在Leap Motion的视野中出现一部分,那么手指或者工具都无法与手关联。文献综述
如果通过一帧又一帧的来追踪一个单一的物体,例如手指,可以使用与物体关联的ID,在新的帧中查询它。通过ID,可以查询手、手指、工具、端点物体和手势。如果这个物体在当前帧存在,那么查询函数返回一个关于物体的引用。如果物体不存在了,那么返回一个特别的无效对象。无效对象被很好定义,但不包含任何有效的追踪数据。这个技术使得在使用Leap Motion追踪数据时,简化了大量的对于空指针的检测。
2) 帧运动
Leap Motion软件分析总体运动,只要之前帧数据发生了位移、旋转、尺度变化等。例如,如果把双手同时移动到Leap Motion的左侧视野,帧就包含了位移变化。如果扭动双手,好像旋转一个球,帧就包含旋转。如果将双手靠近或者远离,帧就包含缩放信息。Leap Motion软件会使用视野范围内的物体,只要分析到发生了运动。如果它只检测到一只手,那么Leap Motion程序就会基于那只手的运动,给出帧运动因素。如果它检测出一双手,它就将双手的运动趋势结合起来,给出运动因素。通过每只手对应的手对象,也可以获取单独运动参数。