編譯UltraleapTrackingWebSocket

最近要在項目中用到 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); //將讀取的圖像轉為灰…