Gesture手势-------LeapMotion API

LeapMotion API允许软件识别用户的手势,如CircleGesture(圆形运动)、SwipeGesture(滑动)、ScreenTapGesture(屏幕敲击)和KeyTapGesture(敲击)。手势对象在识别后分配ID,并随帧更新其属性。要启用手势识别,必须调用controller.enableGesture()。可以从Frame对象获取手势实例,并通过ID值进行查找。
部署运行你感兴趣的模型镜像

class Leap::Gesture

Gesture 类代表了用户已识别的运动。

控制器监视着可见范围内的表示用户手势或命令的一些运动情况,例如,手从一边到一边的运动,表示滑动手势,一根手指向前点动表示屏幕敲动手势。

软件识别一个手势后,他将分配一个ID,并为这一帧的手势集(gesture list)添加一个手势对象。对于持续的手势,他出现在在很多帧,软件增加一个有相同ID的手势对象,在每一个子序列帧中更新属性。

提示:识别每一种手势必须使用controller.enableGesture(),来开启。否则无法识别。

controller.enableGesture(Leap::Gesture::TYPE_CIRCLE);
controller.enableGesture(Leap::Gesture::TYPE_KEY_TAP);
controller.enableGesture(Leap::Gesture::TYPE_SCREEN_TAP);
controller.enableGesture(Leap::Gesture::TYPE_SWIPE);
Gesture子类定义了属性,来判断可以被LM软件识别的特殊运动。包括:

CircleGesture A circular movement by a finger.

SwipeGesture A straight line movement by the hand with fingers extended.

ScreenTapGesture A forward tapping movement by a finger.

KeyTapGesture A downward tapping movement by a finger.

画圆和滑动手势是连续的,并且这些对象有开始、更新和停止状态。敲击屏幕手势是一个离散的手势。软件只能够为每一次敲击创建单个对象,并且总是有停止状态。

从Frame对象中,获得一个有用的手势instance。你能从Frame::gesture()方法中得到手势队列。这个方法还可以使用ID值来寻找。在特定的帧里寻找使用的是Frame::gesture(const Frame&)方法。

下面的案件可以使用config类来创建手势识别器。


public 函数

duration()

float durationSeconds()

Frame frame()

Leap::Frame frameOfGesture = gesture.frame();
Gesture()

构建一个新的手势对象


**********************待续**********************

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### C# 中 Leap Motion 手势识别 API 的使用方法 在 C# 开发环境中,Leap Motion 提供了一套完整的 SDK 来支持手势识别功能。以下是关于如何通过 C# 获取并解析 Leap Motion 手势数据的具体实现方式。 #### 1. 初始化 Leap Motion Controller 首先需要创建 `Controller` 对象来连接设备并与之交互。此对象用于接收来自 Leap Motion 设备的帧数据。 ```csharp using Leap; public class GestureRecognizer : Listener { private Controller controller; public GestureRecognizer() { this.controller = new Controller(); this.controller.AddListener(this); } } ``` #### 2. 处理 Frame 数据 每次调用 `OnFrame()` 方法时都会接收到一个新的帧数据。这些帧包含了当前捕捉到的手部、手指以及手势的信息。 ```csharp public override void OnFrame(Controller controller) { Frame frame = controller.Frame(); foreach (Hand hand in frame.Hands) { List<Gesture> gestures = frame.Gestures(); foreach (var gesture in gestures) { HandleGesture(gesture.Type, gesture); } } } ``` 这里我们遍历每一帧中的所有手势,并根据其类型进一步处理[^1]。 #### 3. 判断具体手势类别 不同类型的动态或静态手势可以通过枚举值区分。例如,“圆周运动”对应于 `Gesture.StateType.STATE_START` 和其他状态变化组合而成;而像“V字形”的简单姿态则可能只需要分析单帧内的指尖坐标关系即可完成判定逻辑[^1]^。 对于预定义好的几种基本形式(如挥手、点击等),可以直接利用官方提供的接口访问它们的状态参数: - **Swipe**: 表示快速滑动操作. - **Circle**: 描述围绕某一点旋转轨迹形成圆形的动作 . - **Screen Tap & Key Tap**: 分别代表轻触屏幕边缘或者模拟键盘敲击行为. 下面展示了一个简单的例子用来捕获 Swipe 动作: ```csharp private void HandleGesture(Gesture.Type type, Gesture gesture){ if(type == Type.TYPE_SWIPE){ SwipeGesture swipe = new SwipeGesture(gesture); Console.WriteLine($"Direction:{swipe.Direction}, Speed:{swipe.Speed}"); } } ``` 此外还可以自定义复杂些的姿态模式匹配算法,比如连续绘制特定形状路径等等[^2]. 综上所述,在实际项目开发过程中可以根据需求灵活选用现成工具包所提供的基础构件亦或是自行构建更加精细复杂的解决方案.
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值