把 Kinect 的人體骨架拿來給 SteamVR 用:Drive4VR

Heresy 這邊之前已經開始有在用 HTC Vive 搭配 SteamVR 來做一些 VR 內容的展示了。而 HTC Vive 的設計,是可以追蹤頭戴式顯示器、以及兩個控制把手的位置。

不過為了讓開發者有更多的應用,日前也有推出「HTC Vive 移動定位器」,來做為額外的定位裝置;後來,HTC 也展示過如果使用兩個把手、再加上額外三個移動定位器,來進行全身骨架的追蹤(GitHub)。

而現在,則是有人把 Microsoft Kinect 的人體骨架追蹤拿來整合進 SteamVR 了!這個專案叫做「Driver4VR」,官網是:http://www.driver4vr.com/

Driver4VR 基本上應該是設計用來透過 FreePIE(Programmable Input Emulator、官網)來作為 VR 環境的追蹤資訊的軟體;而另外他也直接支援 Leap MotionMicrosoft Kinect,來做為輸入介面。

不過,這邊也必須先提醒一下,Driver4VR 並不是一個免費套件;雖然只要註冊,就可以有免費的試用資格,但是如果要持續使用,是必須要付 €14.40、註冊成回黃金會員的。

閱讀更多»

Kinect for Windows 的 UWP 程式開發

Kinect for Windows SDK v2 是微軟推出的第二代深度攝影機的開發方案,不過也不知道為什麼,微軟在 2014 年之後,基本上都沒有針對他有什麼大動作,官方網站的 SDK 也是維持在 2014/10/21 的 2.0.1410.19000(連結)、沒有更新過。

而在 2015 年底的時候,Heresy 寫過一篇《在 Windows 10 使用 Kinect v2 進行人臉解鎖》,當時是可以透過強制更新驅動程式到 2.1.1511.11000,來使用 Windows Hello 的人臉辨識功能;但是遺憾的是,K4W SDK v2 也還是沒有更新…

而前幾天,微軟官方又發布了一篇《Kinect demo code and new driver for UWP now available》,說明了在 Kinect for Windows 開發方面的一些更新。

閱讀更多»

給想開始學 Kinect/OpenNI 程式開發的人 2016

這篇的主題,是要開始學 Kinect、或是 OpenNI 程式開發前,應該要知道的一些事情;基本上,主要的目的,是壤還搞不清楚狀況的人,知道自己可以使用哪個開發環境,還有該開發環境的狀況。

其實之前都寫在各個文章裡面了,不過由於不時還是有人會弄錯、或是不知道某些東西,所以這邊彙整一下。

基本上,要選擇體感程式、深度感應器的開發環境,主要要取決於你用的是哪個感應器;根據所使用的感應器的不同,能使用的開發環境自然也就不同了。

所以接下來,這邊就是以硬體為導向,開始分類。首先,下面是以表格形式的彙整:

感應器
ASUS Xtion 與其他 PrimeSene 架構感應器
第一代 Kinect
第二代 Kinect
OpenNI 1
可使用
可使用
不可使用
OpenNI 2
可使用
可使用
不建議使用
Kinect for Windows v1
不可使用
可使用
不可使用
Kinect for Windows v2
不可使用
不可使用
可使用

閱讀更多»

Visual Gesture Builder C++ API

Heresy 之前在《建立 Kinect 的姿勢辨識資料庫:Visual Gesture Builder 工具(一)》和《建立 Kinect 的姿勢辨識資料庫:Visual Gesture Builder(二)》這兩篇文章,已經把 Visual Gesture Builder 的工具程式的基本操作都做了一定程度的介紹了。

接下來這一篇,則是來講一下要怎麼在自己的 C++ 程式裡面,透過 Visual Gesture Builder 提供的 C++ API、以及自己建立出來的姿勢資料庫、來進行姿勢的辨識。


Visual Gesture Builder 的檔案

要在 C++ 的程式裡面使用 VGB 的 C++ API 的話,首先需要引入 VGB 的 Header 檔、「Kinect.VisualGestureBuilder.h」。這個檔案所在位置和其他 K4W SDKv2 的 Header 檔所在位置相同,都是在「$(KINECTSDK20_DIR)\inc」下。

而在建置階段所需要的 lib 檔,則是「Kinect20.VisualGestureBuilder.lib」,同樣位於「$(KINECTSDK20_DIR)\Lib」這個資料夾下。(x86 與 x64 放置於不同資料夾內)

至於執行時需要的檔案,則是在「$(KINECTSDK20_DIR)\Redist\VGB」這個資料夾下。C++ 程式除了需要「Kinect20.VisualGestureBuilder.dll」這個檔案外,也還需要「vgbtechs」這個資料夾內的檔案;這個資料夾內的兩個 DLL 檔,應該分別是進行連續性、離散式姿勢偵測的演算法實作。

閱讀更多»

Kinect for Windows 官方網站搬遷、加入更多語言

這算是一個可能比較不容易被發現的事吧?微軟的 Kinect for Windows 的網站已經正式整合到「Windows 開發人員中心」這個網站(連結)下了~他新的連結是:

https://dev.windows.com/zh-tw/kinect

如果使用舊的網址(連結),也會被自動導到這個頁面,所以對於一般使用者來說,並沒有太大的影響。

不過,新的網站目前看來最大的好處,是他加入了包括繁體中文在內的多語言頁面!

雖然很多較深的連結點下去後,基本上都還是英文頁面(例如連到 MSDN 文件、或是部落格文章的部分),但是對於一些概念性、規格性介紹的部分,有中文頁面應該還是方便不少的~

閱讀更多»

建立 Kinect 的姿勢辨識資料庫:Visual Gesture Builder(二)

上一篇的文章裡面,Heresy 已經介紹過 Visual Gesture Builder 的使用流程、以及他的離散式的姿勢了。而接下來這一篇,則是先來講一下他的連續性姿勢吧~

首先,在微軟 Channel 9 的《Custom Gestures End to End with Kinect and Visual Gesture Builder Part 2》影片裡面,有提供離散式姿勢和連續性姿勢的比較,這邊就大概引用一下:

閱讀更多»

建立 Kinect 的姿勢辨識資料庫:Visual Gesture Builder 工具(一)

微軟在 Kinect for Windows SDK v2 這個開發環境中,在核心環境內有提供人體骨架的追蹤功能、讓程式開發者可以輕鬆地取得人體的骨架資訊(請參考《K4W v2 C++ Part 7:偵測、追蹤人體骨架》)。

而和第一代的 SDK 相比,在這一代的 SDK 中,微軟甚至提供了手掌的一些細節,讓開發者可以判斷手掌的狀態~如此一來,可用性算是比之前提高了不少。

不過,在 K4Wv2 的核心部分,微軟還是沒有提供姿勢辨識、動作辨識這類的功能,所以如果在僅使用核心元件的情況下,想要透過動作來觸發事件的話,就必須要自己根據骨架的資訊來做計算、判斷了。而實際上,這件事算是還滿麻煩、滿繁瑣的…

為了解決這個問題,微軟另外提供了一個名為「Visual Gesture Builder」(官方文件、以下簡稱「VGB」)的工具(包含軟體、以及 API);它可以讓使用者透過 Kinect Studio 錄下來的 XEF 檔來做學習,半自動地建立出姿勢辨識的條件、進而用在程式之中。

閱讀更多»

Kinect for Windows 的錄影工具:Kinect Studio

恩…Kinect for Windows SDK v2 的程式開發文章雖然已經寫了不少,但是由於最近都在做其他事,其實也停了好久沒繼續寫了…而接下來這篇,Heresy 是打算來簡單介紹一下 Kinect for Windows SDK 的資料錄製、撥放工具:Kinect Studio。

Kinect Studio 是包含在 Kinect for Windows SDK v2 裡面的一個工具程式,它可以用來預覽 Kinect 的資料,也可以把資料錄製成「eXtended Event File」(XEF)的格式,好方便以後使用。而除了工具程式外,他實際上也有提供 API,可以讓自己寫程式的時候,可以去呼叫、控制。

這部分完整的說明,可以參考 MSDN 上的《Kinect Studio》這個章節(連結)。而 Heresy 這邊,主要是簡單解釋一下,Kinect Studio 要怎麼用。

閱讀更多»

Kinect Fusion Part 2:含色彩資訊的版本

在前一篇《Kinect Fusion Part 1:C++ API 基本使用》,基本上已經把不包含顏色資訊的 Kinect Fusion 的程式寫過一遍了。而這一篇,則是來整理一下,怎麼把顏色資訊也加到掃描結果上吧~

首先,之前不包含色彩的版本,是使用「INuiFusionReconstruction」這個介面來做操作的,而當時也有提過,如果要有色彩的資訊,要改用「INuiFusionColorReconstruction」這個介面;他和 INuiFusionReconstruction 的操作方法基本上都一樣,不同的地方最主要只在於在呼叫 ProcessFrame() 的時候,需要多給他一張對應深度資訊的彩色影像了~

當然,由於在重建模型時也需要包含色彩資訊(這邊是 per-vertex color 的形式),所以在呼叫 CalculateMesh() 時產生的結果,資料型別也會從「INuiFusionMesh」變成「INuiFusionColorMesh」。

閱讀更多»

Kinect Fusion Part 1:C++ API 基本使用

在之前的《Kinect Fusion Part 0:使用概念》一文中,已經大致上解釋了 Kinect Fusion 在原理上的概念,以及範例程式的使用方法了。而接下來這一篇,則是來講一下,Kinect Fusion 的 C++ API 要怎麼使用吧。

Kinect Fusion 的檔案

首先,要在 C++ 的程式裡面使用 K4W SDK v2 所提供的 Kinect Fusion 模組的話,需要在程式碼內引入「NuiKinectFusionApi.h」這個 header 檔;檔案所在的位置,和 K4W SDK v2 的其他 header 檔相同(不過不知道為什麼,命名規則明顯不同…),都是在「$(KINECTSDK20_DIR)\inc」。而在建置程式時所需要的 lib 檔,則是「Kinect20.Fusion.lib」,一樣是放在「$(KINECTSDK20_DIR)\Lib」下。

比較不一樣的,是在執行階段時所需要的 DLL 檔並沒有被直接放到系統內,而需要另外複製到執行檔的所在路徑;他的檔案是「Kinect20.Fusion.dll」,位於「C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\Redist\Fusion\」這個目錄下,根據 32 位元和 64 位元的不同,有兩個版本。

閱讀更多»