最近要在項目中用到 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 需要依賴 libwebsockets
和 LeapSDK
,官方建議我們使用 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 示例,就能看到手勢數據了。