Leap Motion开发环境搭建及简单样例
来源:互联网 发布:比赛赛程安排软件 编辑:程序博客网 时间:2024/04/29 10:41
Leap Motion简介
之前上《人机交互》的课程的时候接触到了Leap Motion,后来入手了一个,一开始只是玩玩里面的小应用,后来就尝试着自己写个小样例,然后搜相关的文档,感觉写的都很乱(应该是小弟理解有问题),而且动不动就要配置环境变量什么的,个人不喜欢那样的,因为配置了环境变量换个电脑还要配置,但是直接放在bin目录就省事了,而且关于C#的文档也很少,所以这两天有时间打算把之前搭建过程什么的写写。
环境搭建
首先要下载Leap Motion SDK,官网地址:https://developer.leapmotion.com,有的人可能找不到或者像我一开始似的下载错SDK,大家可以在底下留言我发给大家
解压压缩包后会有三个文件:
第一个文件里面包含我们需要的类库、文档、样例代码等,那个回来说,先把中间那个exe文件安装一下,这个是对Leap Motion的一个管理软件,安装好以后会在右下角出现一个这样的图标,如果没有插入Leap Motion设备会显示黑色,有设备表面污染时会显示黄色。双击后会出现下面管理页面,这里可以先默认这样(当然“允许后台应用程序”的勾需要勾上之类的就不需要我说了吧)。
接下来新建一个C#程序,在项目的属性->生成->平台 中查看自己项目的运行平台是什么,我这里用的版本是.net4.0,平台是X86,所以引入LeapSDK\lib文件夹下的LeapCSharp.NET4.0.dll(3.5的引入相应的dll即可),同时将LeapSDK\lib\x86文件夹中的Leap.dll、Leap.lib、LeapCSharp.dll三个文件放在项目的Debug文件夹中。
这里简单介绍一下LeapSDK中的文件
docs中是对Leap Motion的一个开发文档,包括C++、C#、java、js(对Leap Motion还有js接口,挺好玩的)、python、unity等语言。
include文件中是C++的头文件。
lib是Leap提供的的dll库。
samples是C++、js、python、java的样例代码(是的,没有C#的源码),项目可以直接用vs打开,但是我打开发现有的包是没有导入的会出错,需要重新导入,除此以外两个.html文件可以直接用浏览器打开,如果你的Leap Motion控制器打开着,并且设备也连接着,你会发现这俩.html文件就能显示很多参数,这就是js通过web Socket获取的。
util里面也是一些源码文件。
下面的两个txt,version.txt是版本文件,head_sha.txt就不知道是什么东西了,只是一串编码,不知道什么用(如果知道对有什么用的话,请告诉我一下)。
然后在程序主函数页面添加下面两句,运行即可
有的人通过配置环境变量实现时,运行的时候出现了错误如下就是因为环境变量配置错误,没有找到Leap.dll、Leap.lib、LeapCSharp.dll这三个文件,可以直接将三个文件放在Debug文件夹中即可。
Demo
int main(int argc, char** argv) { // Create a sample listener and controller SampleListener listener; Controller controller; // Have the sample listener receive events from the controller controller.addListener(listener); if (argc > 1 && strcmp(argv[1], "--bg") == 0) controller.setPolicy(Leap::Controller::POLICY_BACKGROUND_FRAMES); // Keep this process running until Enter is pressed std::cout << "Press Enter to quit..." << std::endl; std::cin.get(); // Remove the sample listener when done controller.removeListener(listener); return 0;}
大家可以直接看一下这个C++的样例程序会发现main函数里面有controller.addListener(listener),这个listener对象就是用来监听Leap Motion的一些参数。
所以我们接下来新建一个类MyListener继承类Leap.Listener这个类,点开这个Listener类会发现里面有如下函数
这里面主要是这些虚函数,我们通过重构这些虚函数来实现对Leap Motion数据的获取,而Controller类型的参数中包含着Leap Motion的手、指的坐标等属性参数,下面先简单介绍一下这些虚函数:
OnConnect:连接时触发该函数(这里的连接是指连接硬件设备,与下面的onServiceConnect做区别);
OnDeviceChange:检查到设备有变化时触发;
OnDisconnect:解除连接时触发该函数(这里的接触连接是指接触连接硬件设备,与下面的onServiceConnect做区别);
OnDeviceChange:检查到设备有变化时触发;
OnExit:退出时触发;
OnFocusGained:检测到焦点时触发(后面大家会发现当该软件到焦点找不到,即运行时点击了别的应用后,该Listener中的函数会停止运行);
OnFocusLost:找不到焦点时触发;
OnFrame:每一帧的时候调用,这个函数非常重要,以后我们写的很多判断都是在这个函数触发的时候,就是每执行一帧就会获取一组手的属性参数;
OnImages:每一次获取图像时调用,Leap Motion中有两个可见光摄像头,类似人的双眼,这个函数即获取其参数;
OnInit:初始化的时候调用该事件;
OnServiceConnect:连接时触发该函数(这里连接是指连接Leap Motion Server软件);
OnServiceDisconnect:断开连接时触发该函数(这里断开连接是指断开连接Leap Motion Server软件)。
数据传输过程
样例代码
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Leap;namespace LeapDemo{ public class MyListen:Listener { public override void OnConnect(Controller arg0) { Console.WriteLine("OnConnect"); } public override void OnDeviceChange(Controller arg0) { Console.WriteLine("OnDeviceChange"); } public override void OnDisconnect(Controller arg0) { Console.WriteLine("OnDisconnect"); } public override void OnExit(Controller arg0) { Console.WriteLine("OnExit"); } public override void OnFocusGained(Controller arg0) { Console.WriteLine("OnFocusGained"); } public override void OnFocusLost(Controller arg0) { Console.WriteLine("OnFocusLost"); } public override void OnFrame(Controller arg0) { Frame f = arg0.Frame();//每一帧的具体数据 HandList hands = f.Hands; Console.WriteLine("当前有"+hands.Count+"只手"); } public override void OnImages(Controller arg0) { //这里的图片获取函数不会触发,在OnFrame的参数里面也获取不到image照片, //如果想获取照片加上 myController.SetPolicy(Controller.PolicyFlag.POLICY_IMAGES); //下节会具体说 Console.WriteLine("OnImages"); } public override void OnInit(Controller arg0) { Console.WriteLine("OnInit"); } public override void OnServiceConnect(Controller arg0) { Console.WriteLine("OnServiceConnect"); } public override void OnServiceDisconnect(Controller arg0) { Console.WriteLine("OnServiceDisconnect"); } }}
这里的Demo我已经上传到我的CSDN上面了,大家也可以去下载运行。
- Leap Motion开发环境搭建及简单样例
- Leap Motion开发第一步环境配置
- Leap Motion C++开发笔记(一)下载安装及环境配置
- Leap Motion开发环境配置LeapmotionDevelopmentKit3.2.0+VS2013
- leap motion VC环境配置
- Leap Motion C++环境的配置
- Leap Motion环境配置(C++)
- 使用C++开发Leap Motion应用程序——Windows下开发环境配置
- leap motion
- Leap Motion
- Leap Motion
- leap motion遇到的问题及解决
- [Leap Motion开发系列]win32应用的环境配置[2013-11-2更新]
- Leap Motion C++开发笔记(三)获取深度值及距离估算
- openSUSE leap 42.1下Qt5.6.0 开发环境搭建
- Leap Motion 入门一:VS上环境配置
- Leap Motion的环境配置(使用c#)
- [Leap Motion开发文档翻译]屏幕定位 Screen Location
- zookeeper如何永久监听
- caffe笔记2——mnist例子
- 构建和运行您的应用Instant Run
- 第3章后台执行命令
- 好友精品文章推荐
- Leap Motion开发环境搭建及简单样例
- 锋利的jQuery
- POJ1988 Cube Stacking(并查集)
- Django的SAE部署
- 优化 SQL 查询
- (九)模板方法模式详解(包含与类加载器不得不说的故事)
- 关键字的作用
- gedit打开文件出错
- C 堆和栈的区别