最近要在项目中用到 Leap Motion,无意中发现了一个 Go 语言的 Leap Motion 库:

  • https://gobot.io/documentation/platforms/leapmotion/

示例代码看起来很简单,但是要实际运行起来还需要一些条件。

在示例代码中,我们看到它连接的是 6437 端口,这其实是一种比较老的 Leap Motion 使用方式了, 6437 实际上是一个 websocket 端口,Leap Motion 驱动会通过这个端口将数据帧发送给连接的客户端,这一功能是给 LeapJs 库使用的,让网页端也能使用 Leap Motion,但是自从 5.0 版本以后,这一功能就从 Leap Motion SDK 中删除了。

如果要继续使用这个功能,有两个选择:

  • 一是降 Leap Motion SDK 版本,但是要找到旧版本的下载地址可能要花一些功夫;
  • 二是使用 UltraleapTrackingWebSocket ,他是官方专为新版本 Leap Motion 能继续使 LeapJs 库用而提供的方案。

UltraleapTrackingWebSocket 并未提供预编译版本,需要我们自己编译,Github 地址如下:

  • https://github.com/ultraleap/UltraleapTrackingWebSocket

按照 ReadMe 去编译的话,大概率是编不出来的,缺一些步骤,所以这里记录一下 Windows 上的编译过程。

UltraleapTrackingWebSocket 需要依赖 libwebsocketsLeapSDK ,官方建议我们使用 vcpkg 管理依赖,会简单很多,那咱也是主打一个听劝。

安装 vcpkg

vcpkg 是 C++ 的包管理器,C++ 终于有包管理器了,然而我早就不做 C++ 开发了。。。安装过程比较简单,按照官网指示一步一步操作即可。

  • 通过 CMake 安装和使用包 | Microsoft Learn

首先下载 vcpkg 源码:

> git clone https://github.com/microsoft/vcpkg.git

然后进入源码目录,执行一个脚本:

> cd vcpkg
> bootstrap-vcpkg.bat

这个脚本最终会去下面的地址下载 vcpkg.exe 放到源码目录下。

  • https://github.com/microsoft/vcpkg-tool/releases/download/2025-04-16/vcpkg.exe

这种操作属实是头一回见,放一起发布不好吗?如果你在执行脚本的时候遇到网络问题,可以直接点击链接下载,然后放到源码目录下。注意不要点我这里的链接,当你执行脚本的时候,第一行日志就会打印出下载地址,用那里的地址。

> bootstrap-vcpkg.bat
Downloading https://github.com/microsoft/vcpkg-tool/releases/download/2025-04-16/vcpkg.exe -> E:\project\c\vcpkg\vcpkg.exe...

虽然我们可以自行下载 vcpkg.exe 放到 vcpkg 目录下,但是脚本并不会检测文件是否存在,这样是为了保证版本兼容。我们可以看一下 vcpkg.exe 的下载地址,与版本有关的是一个日期,这个日期在 vcpkg/scripts 目录下的 vcpkg-tool-metadata.txt 文件的第一行。

VCPKG_TOOL_RELEASE_TAG=2025-04-16

其实我们完全可以拿这个日期拼装出正确的地址自行下载。接下来我们稍微修改一下 vcpkg/scripts 目录下的 bootstrap.ps1 文件,他才是真正下载 vcpkg.exe 的脚本。我们将第52行至64行的代码包裹到一个 if 判断中,如果 vcpkg.exe 存在就不去下载了。

if (!(Test-Path "$vcpkgRootDir\vcpkg.exe")) # 新增
{ # 新增if ($env:PROCESSOR_ARCHITECTURE -eq 'ARM64' -or $env:PROCESSOR_IDENTIFIER -match "ARMv[8,9] \(64-bit\)") {& "$scriptsDir/tls12-download-arm64.exe" github.com "/microsoft/vcpkg-tool/releases/download/$versionDate/vcpkg-arm64.exe" "$vcpkgRootDir\vcpkg.exe"} else {& "$scriptsDir/tls12-download.exe" github.com "/microsoft/vcpkg-tool/releases/download/$versionDate/vcpkg.exe" "$vcpkgRootDir\vcpkg.exe"}Write-Host ""if ($LASTEXITCODE -ne 0){Write-Error "Downloading vcpkg.exe failed. Please check your internet connection, or consider downloading a recent vcpkg.exe from https://github.com/microsoft/vcpkg-tool with a browser."throw}
} # 新增

其实 bootstrap-vcpkg.bat 的全部功能就是调用 bootstrap.ps1 ,之所以不直接调用是因为 Windows 默认的脚本执行策略是”严格”,会阻止脚本执行,大家可以参考微软官网。

如果我们自行下载 vcpkg.exe 的话,其实这个脚本已经没有执行的必要了。但是如果我们依然执行的话,会看到一段输出:

vcpkg package management program version 2025-04-16-f9b6c6917b23c1ccf16c1a9f015ebabf8f615045See LICENSE.txt for license information.
Telemetry
---------
vcpkg collects usage data in order to help us improve your experience.
The data collected by Microsoft is anonymous.
You can opt-out of telemetry by re-running the bootstrap-vcpkg script with -disableMetrics,
passing --disable-metrics to vcpkg on the command line,
or by setting the VCPKG_DISABLE_METRICS environment variable.Read more about vcpkg telemetry at docs/about/privacy.md

意思很明显,vcpkg 会搜集用户使用数据,但是可以禁用。

第一种方式是调用 vcpkg.exe 时加上一个 --disable-metrics 参数,但是每次都要加肯定不是我们想要的。

第二种方式是调用安装脚本 bootstrap-vcpkg.bat 时,加上 -disableMetrics 参数。它的本质是在 vcpkg 目录下创建一个名为 vcpkg.disable-metrics 的空文件,所以,如果你安装时没有传这个参数,可以自行创建这个文件。

第三种方式是设置 VCPKG_DISABLE_METRICS 环境变量。第三和第二种方式都是永久性的,所以选哪种都可以。

最后将源码目录添加到环境变量,这样 vcpkg 就安装好了。

编译UltraleapTrackingWebSocket

基本上还是按照官方步骤来,编译之前先下载依赖:

> vcpkg install libwebsockets --triplet x64-windows

这一步可能会遇到网络问题,重试几次就好了。然后下载 UltraleapTrackingWebSocket 源码,进入源码目录创建 build 文件夹:

> git clone https://github.com/ultraleap/UltraleapTrackingWebSocket.git
> cd ultraleap-tracking-websocket> mkdir build
> cd build

下一步是 make 我们的工程,这里有两个要注意的地方:

一是将 -DCMAKE_TOOLCHAIN_FILE 后面的路径换成我们自己的 vcpkg 安装目录。二是需要设置下 LeapSDK 的目录,如果已经安装过 Leap Motion SDK,在安装目录下能找到,如果没有安装,可以直接从👉这里👈下载,然后找个地方解压,设置下 LeapSDK_DIR 环境变量指向解压的目录即可,这里设置临时环境变量就行了。

> set LeapSDK_DIR=E:\project\c\UltraleapTrackingWebSocket\LeapSDK
> cmake -DCMAKE_TOOLCHAIN_FILE=E:/project/c/vcpkg/scripts/buildsystems/vcpkg.cmake ..

make 成功以后我们就可以我们就可以编译了。

cmake --build .

可以用 cmake 编译,也可以双击 build 目录下的 LeapWS.sln 在 visual studio 中打开编译。

运行

在命令行运行编译出来的 Ultraleap-Tracking-WS.exe ,然后再运行 Go 的 Leap Motion 示例,就能看到手势数据了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912702.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912702.shtml
英文地址,请注明出处:http://en.pswp.cn/news/912702.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[ linux-系统 ] 磁盘与文件系统

1.认识磁盘结构 机械键盘是计算机中唯一的机械设备,磁盘是外设,容量大,速度慢,价格便宜 物理结构: 磁头是一面一个,左右摆动,两个整体移动的,有磁头停靠点磁头和盘面不接触&#x…

Spring AI RAG

目录 Spring AI 介绍 Spring AI 组件介绍 Spring AI 结构化输出 Srping AI 多模态 Spring AI 本地Ollama Spring AI 源码 Spring AI Advisor机制 Spring AI Tool Calling Spring AI MCP Spring AI RAG Spring AI Agent 一、技术架构与核心流程‌ 检索增强生成 (RA…

深入Linux开发核心:掌握Vim编辑器与GCCG++编译工具链

文章目录 一、Vim:终端环境下的编辑艺术1.1 Vim设计哲学:模态编辑的终极实践1.2 高效导航:超越方向键的移动艺术1.3 定制化开发环境:从基础到专业IDE1.4 调试集成:Vim作为调试前端 二、GCC/G:Linux编译基石…

阿里云-spring boot接入arms监控

目标:在ecs中启动一个java应用,且携带arms监控 原理:在java应用启动时,同时启动一个agent探针,时刻监控java应用变化(如:接口调用、CPU、线程池状态等) 1.arms接入中心添加java应用…

昆泰芯3D霍尔磁传感器芯片在汽车零部件中的应用

HUD即抬头显示系统(Head-Up Display),HUD 是一种将重要的车辆或飞行等相关信息(如速度、导航指示、警告信息等)投射到驾驶员或操作员前方视野范围内的透明显示屏或直接投射到风挡玻璃上的技术。 HUD即抬头显示系统(Head-Up Display)&#xff…

new Vue() 的底层工作原理

当你调用 new Vue() 时,Vue.js 会执行一系列复杂的初始化过程。让我们深入剖析这个看似简单的操作背后发生的事情: 1. 初始化阶段 (1) 内部初始化 function Vue(options) {if (!(this instanceof Vue)) {warn(Vue is a constructor and should be cal…

最简安装SUSE15SP7导致大部分命令缺失

我嘞个去~~~明明选择Enable了ssh,结果也没给装。 俺习惯使用NetworkManager管理网络,没给装,用不了nmcli和nmtui。不高兴归不高兴,最简安装的话,也情有可原。我嘞个去去~~连ping、vi都没有装,这也太简了。…

Vue-14-前端框架Vue之应用基础嵌套路由和路由传参

文章目录 1 嵌套路由1.1 News.vue1.2 Detail.vue1.3 router/index.ts2 路由传参2.1 query参数2.1.1 News.vue(传递参数)2.1.2 Detail.vue(接收参数)2.2 params参数2.2.1 router/index.ts(需要提前占位)2.2.2 News.vue(传递参数)2.2.3 Detail.vue(接收参数)2.3 props配置2.3.1 r…

Python网安-ftp服务暴力破解(仅供学习)

目录 源码在这里 需要导入的模块 连接ftp,并设置密码本和线程 核心代码 设置线程 源码在这里 https://github.com/Wist-fully/Attack/tree/cracker 需要导入的模块 import ftplib from threading import Thread import queue 连接ftp,并设置密码…

ES6数组的`flat()`和`flatMap()`函数用法

今天给大家分享ES6中两个超实用的数组函数:flat()和flatMap(),学会它们能让数组处理变得更轻松! 1. flat()函数 1.1 基本介绍 flat()用于将嵌套数组"拍平",即将多维数组转换为一维数组。 1.2 语法 const newArray …

upload-labs靶场通关详解:第15-16关

第十五关 getimagesize函数验证 一、分析源代码 function isImage($filename){$types .jpeg|.png|.gif;if(file_exists($filename)){$info getimagesize($filename);$ext image_type_to_extension($info[2]);if(stripos($types,$ext)>0){return $ext;}else{return false…

【Linux】基础IO流

好的代码自己会说话,清晰的逻辑与优雅的结构,是程序员与世界对话的方式。 前言 这是我自己学习Linux系统编程的第五篇笔记。后期我会继续把Linux系统编程笔记开源至博客上。 上一期笔记是关于进程: 【Linux】进程-CSDN博客https://blog.csdn…

【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(二)

🔥个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题 🍉学习方向:C/C方向 ⭐️人生格言:为天地立心,为生民立命,为…

AD8021ARZ-REEL7【ADI】300MHz低噪声运放放大器,高频信号处理的性价比之选!

AD8021ARZ-REEL7(ADI)产品解析与推广文案 1. 产品概述 AD8021ARZ-REEL7 是 Analog Devices Inc.(ADI) 推出的一款 高速、低噪声运算放大器(Op-Amp),属于 ADI的高性能放大器系列,专为…

WPF学习笔记(11)数据模板DataTemplate与数据模板选择器DataTemplateSelector

数据模板DataTemplate与数据模板选择器DataTemplateSelector 一、DataTemplate1. DataTemplate概述2. DataTemplate详解 二、DataTemplateSelector1. DataTemplateSelector概述2. DataTemplateSelector详解 总结 一、DataTemplate 1. DataTemplate概述 DataTemplate 表示数据…

【V6.0 - 听觉篇】当AI学会“听”:用声音特征捕捉视频的“情绪爽点”

系列回顾: 在上一篇 《AI的“火眼金睛”:用OpenCV和SHAP洞察“第一眼缘”》 中,我们成功地让AI拥有了视觉,它已经能像一个严苛的“质检员”一样,评判我视频的画质和动态感。 但我的焦虑并没有完全消除。因为我发现&a…

(5)pytest-yield操作

1. 简介 上一篇中,我们刚刚实现了在每个用例之前执行初始化操作,那么用例执行完之后如需要清除数据(或还原)操作,可以使用 yield 来实现。fixture通过scope参数控制setup级别,既然有setup作为用例之前前的操…

C++中的cmath库

在C编程中,数值计算是科学计算、工程应用及算法开发的基础。cmath库作为C标准库的重要组成部分,提供了丰富的数学函数和工具,能够高效处理各种数值计算任务。本文将全面解析cmath库的核心功能,并通过实战案例展示其强大威力。 一…

python包管理工具uv VS pip

在 Python 中,uv 和 pip 都是包管理工具,但它们的定位和特性有所不同。以下是主要区别: 1. pip(传统工具) 定位:Python 官方的包安装工具,是 Python 生态中最基础的包管理器。特点:…

OpenCv基础(C++)

1.图像读取与显示 #include<opencv2/opencv.hpp> using namespace cv;Mat src imread("C:/Users/16385/Desktop/new/photo/1.jpg");//读取图像 Mat src imread("C:/Users/16385/Desktop/new/photo/1.jpg",IMREAD_GRAYSCALE); //将读取的图像转为灰…