最近 Heresy 終於開始認真學 Kinect for Windows SDK v2的程式開發了!而這一篇,就算是開始寫程式之前,一些比較基本的介紹了~
Kinect 最早是針對 Xbox 360 遊戲機所推出用來作為體感操作用的深度感應器,而 Kinect for Windows 則是將這個感應器用在 Windows PC 上的開發套件(最初的介紹)。不過當時 Heresy 主要是在學 OpenNI,所以比較沒有涉略這一塊。
而現在的 Kinect for Windows v2(以下簡稱 K4Wv2)呢,則是新一代、針對 Xbox One 的深度感應器的 SDK;他和舊款的感應器是不相容的(但是可以同時安裝、使用),而是針對新的感應器,提供更強大的功能。
基本介紹
下面的圖片,是官方投影片內的示意圖(參考)。可以看到,他主要的構成,是包括了深度感應器(depth sensor)、彩色攝影機(RGB camera)以及四個單元的麥克風陣列(microphone array)所組成。
如果對感應器有興趣的話,可以參考之前的開箱文(Kinect for Xbox One @ Windows 開箱文、Kinect for Windows v2 感應器簡單開箱 )。
而透過 SDK 可以取得的資料,則包括了:
- 彩色影像:1920 x 1080 @ 30 / 15 FPS(根據環境亮度)
- 深度影像:512 x 424 @ 30 FPS、16bit 距離值(mm)、可偵測範圍 0.5 ~ 8 M
- 紅外線影像:512 x 424 @ 30 FPS、16bit 強度值
- 聲音資訊
根據上面的原始資料,則可以再透過軟體,進行人體的追蹤、骨架的辨識(0.5 ~ 4.5 M)。在 K4Wv2 下,最多六個人、每個人 25 個關節點(右圖),其中每個關節點都可以取得空間中的位置、以及方向性資訊。而由於這代的 SDK 有辦法抓到拇指,所以也可以藉此來判斷手的開闔~
在聲音的部分,由於他配置了麥克風的陣列,所以可以用來判斷出聲音的來源方向。
上面的都算是 Kinect SDK 提供的基本功能,而更進一步,K4Wv2 也另外提供了一些額外的模組,可以用來進行:用手來操作的介面,人臉追蹤與分析(Face)、人臉多邊形重建(HD Face),以及 3D 場景的重建(Fusion)等功能。
此外,目前 K4Wv2 也還有提供了預覽版的手勢辨識、自動學習功能,讓手勢的辨識從程式面轉到資料面,相對起來應該會更為好用、簡單。
而如果搭配 Microsoft Speech SDK 的話,也可以用來分析聲音的輸入、拿來做語音的控制。
系統需求
而在開始之前,首先須要確認自己的電腦的硬體需求。K4Wv2 的系統需求,其實算是相當高的!根據官方的列表,他需要:
- 作業系統:Windows 8、Windows 8.1、Embedded 8 Standard(應該需要 64 位元版本)
- 硬體:
- 64bit、雙核心 3.1Ghz 以上的處理器
- 4GB 以上的系統記憶體
- 可支援的 USB 3.0 控制器(Intel 或 Renesas 晶片)
- 支援 DirectX 11 的顯示卡
- 開發環境:Visual Studio 2012、Visual Studio 2013
所以,如果電腦不符合上述需求的話,建議先想辦法把它弄到符合需求再說吧。
其中,比較討厭的應該是 USB 3.0 的控制器了吧…他的相容性,感覺比上一代更差了。而如果是電腦上的 USB 3.0 控制器不能用的話,個人是建議可以考慮買張 Renesas(NEC)晶片的 USB 3.0 擴充卡來用;Heresy 自己就是這樣才能使用的。
而在開發環境的部分,微軟現在也有釋出免費的全功能版 Visual Studio Community 2013 了~所以對於個人使用者來說,要取得應該不會有什麼問題了。
安裝
如果確定基本環境沒問題,手邊也有感應器的話,接下來就是要到官網(連結)、下載 SDK 來安裝了~目前最新的版本是 2014/10/21 的 2.0.1410.19000(下載頁面);目前 SDK 只有英文版,說實話,SDK 這類型的東西有中文版的機會應該不大。
檔案下載完成後,請直接執行並完成安裝。SDK 預設的安裝路徑會在「C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409」(最後的版本可能以後會有不同),裡面包含了開發 K4Wv2 所必需的東西。
(運作所需的檔案有的會裝在別邊)
在安裝完 SDK 的同時,會順便安裝 K4Wv2 的驅動程式。而如果一切都順利的話,在連上感應器後,在裝置管理員裡面,應該可以看到像是右圖的狀況。其中包括了:
- WDF KinectSensor Interface 0
- Xbox NUI Sensor
- 麥克風陣列(Xbox NUI Sensor)
另外,由於 K4Wv2 基本上應該是採用 server – client 的操作模式,在安裝完成後,就會有管理 Kinect 感應器的程式在背景執行著;所以在工作管理員裡面,應該也會看到好幾個多出來的處理程序:
- KinectMonitor.exe
- KinectService.exe
- KStudioHostService.exe
不過上面都只是 Heresy 有注意到的,還有沒有其他的就不確定了。
SDK Broswer、測試
當都準備就緒後,就可以透過「SDK Browser (Kinect for Windows) v2.0」來跑一些範例程式起來測試了~
SDK Broswer 的介面基本上如下,裡面有許多的工具、範例等資源,可以用來參考。
在這個介面上有一些分類,其中在範例的部分,有提供 C#、C++、以及 Windows Store 三種,前兩者都可以透過按右下角的「Run」直接執行。
如果是和 Heresy 一樣,是要進行 Native C++ 的程式開發的話,就是要看 C++ 的範例;而如果是打算使用 .Net Framework 來做開發環境的話,則是可以參考 C# 的範例。
至於 Windows Store 的範例,則是透過 WinRT API(Windows API for Windows Runtime apps、MSDN)來做為開發環境,這樣可以開發出可以在 Windows 8 的 Windows Store 上架的 App。
而在都安裝好後,個人會建議先選幾個範例來執行、確認裝置是可以正確運作的。例如,如果找到「Depth Basics-D2D」之後,點選他右下角的「Run」的話,應該就會看到類似右圖的深度圖。
如果範例都可以正常運作的話,那應該就代表軟硬體的環境設置沒有問題了~
接下來,如果想要自己編譯、修改範例的話,除了可以在 SDK Broswer 裡面點選「Install」、將檔案複製到指定的地方來進行後續動作外,也可以直接把「Samples」目錄下需要的範例手動複製出來。
(因為資料夾權限的關係,所以本來的檔案位置無法進行修改)
SDK 架構
而在這篇最後,先來提一下 K4W v2 的 SDK 架構。下圖是出自官方投影片的架構圖(High-level architecture):
在上圖中,紅色的部分,就是 K4W v2 SDK 軟體上的所提供的功能;最下方的「Kinect Drivers」是用來和實際的感應器硬體溝通的,而在上面則有「Kinect Runtime」在運作。對於程式開發者,SDK 則是提供了「Native API」、「.Net API」以及「WinRT API」可以用來開發屬於自己的應用程式。
而也由於 K4W v2 是採用共用同一份 runtime 的模式,所以可以多個應用程式同時使用感應器,並不會有應用程式把感應器鎖死的問題。不過可惜的是,現階段的 SDK 似乎是不支援多感應器的。
至於在基本的資料存取上,K4W v2 SDK 基本的資料都是使用相同的架構設計,基本上如果是 polling 模式的使用的流程,就是:
- 取得感應器(sensor)
- 取得資料來源(data source)
- 開啟資料畫面讀取器(frame reader)
- 進入主迴圈
- 透過讀取器取得資料畫面(frame)
在資料來源的部分來說,以 C++ 的 API 來看,包括了深度影像(depth frame)、彩色影像(color frame)、紅外線影像(infrared frame)、長時間曝光紅外線影像(long exposure infrared frame)、聲音(audio)、身體(body frame)、身體索引(body index frame);這些不同的來源,都有對應的 frame reader 和 frame 的定義。
而如果是採用 event 的架構的話,則拿到的則會是資料畫面的參考(frame reference),之後再透過這份參考取得真正的畫面。
這篇簡介就大概先寫道這了。
接下來,應該會正式進入程式的部分;不過基本上,Heresy 應該只會針對 C++ 的程式開發部分做整理就是了。
[…] 2017 年,微軟也放棄繼續生產了;而用來在 Windows PC 上開發的工具、Kinect for Windows SDK […]
讚讚
Kinect for Windows SDK v2可以運用到Window 10嗎?
讚讚
之前測試是沒問題
讚Liked by 1 person
[…] OpenNI / Kinect […]
讚讚
Heresy 您好,
在專案開發上,透過您的文章獲益良多
想請教您一個問題
目前案子開發一個c#系統,用Kinect監視物件,透過額外的感應器
當物件經過感應器時,系統會送一個訊號給kinect
Kinect會將深度影像與RGB影下存下做影像處理與分析
全程Kinect 深度&RGB鏡頭會開啟,物件經過才會存圖
因為放系統設備的地方只放主機,沒有放螢幕
所以需要用遠端桌面操作
我的問題是
當我要遠端桌面登入或登出電腦時,Kinect會自動關閉
這樣會無法使用遠端桌面操作這個系統
後續利用其他使用者帳戶做測試,Kinect也會自動關閉
請問可以從哪個方向去處理這個問題?
謝謝
讚Liked by 1 person
沒記錯的話,Kinect for Windows SDK 有使用到 GPU。
而遠端桌面基本上只有一張虛擬顯卡可以用,可能是這個問題導致他無法運作的。
建議改用 TeamViewer 試試看。
讚Liked by 1 person
Kinect for Windows SDK v2 可以搭配VS2017做開發嗎
讚讚
這個建議你可以自己試試看,很快就會知道可不可以了。
讚讚
想請問一下 ,body basics 畫面顯示出來是全黑,想請問一下有可能甚麼問題??
讚讚
如果深度影像能正常抓到的話,就是單純沒能抓到人吧?
讚讚
對阿 !!純粹沒抓到人
讚讚
想請問有辦法抓到人骨追蹤嗎
讚讚
建議先檢查一下深度影像有沒有問題吧。
讚讚
Heresy 您好
我看了您的這篇詳細的介紹文後受益良多,於是很開心地跑去買了Xbox One回來。
後來,我們把SDK灌在 Lenovo T460p 筆電,做了非常多次的window update,
可是ㄧ直有一個問題無法解決,
就是frame rate有時候會降到很低,甚至會抓不太到。
想請教您對於frame rate無法拉高,以及不太穩定,有什麼解法?又或者是否有什麼想法?
謝謝您的分享
讚讚
以筆記電腦來說的話,建議先試試看插著電會不會比較好。
這部份有可能是因為作業系統的電源模式的不同造成的。
讚讚
謝謝您的回覆。筆電有插電,電源模式也開到最高效能,但仍未有解。
這兩天我們飽受重新開機無敵慢的痛苦,所以先改SSD (固態硬碟),重灌,預備抗戰。
若您仍有其他想法,也希望不吝提點指教。
讚讚
如果是系統本身就慢的話,可能就得先從這方面下手了。
另一個可能,是確認一下系統的溫度。
如果散熱風扇效率變差(例如進灰卡塵),導致溫度不正常上升的話,是有可能讓系統強制降速的。
讚讚
回應您所說的電源模式問題:
昨天裝好SSD,系統重灌好,並試一下兩種電源模式:高效能模式 vs 省電模式
發現省電模式比起高效能模式,反而能攫取到到較高的frame rate,但此現象並不太穩定。
另考慮是否可能筆電有3個USB port,訊號傳輸時系統不時地在3個port之間分配資源,
並非由XBox one所安插的USB port 獨佔,以致拉低frame rate。
但,目前暫時想不到怎麼讓安插XBox one 的USB port獨佔資源。
系統強制降速…確實是有可能。您說的溫度問題,我們會再想想怎麼處理,謝謝。
讚讚
這樣的話,個人會先建議注意看看 CPU 溫度?
否則,不曉得了。
讚Liked by 1 person
想問個有點蠢的問題,可是還是忍不住想問問…..
假設我在配備符合的桌機上灌SDK,而且都可以寫程式碼開發了,
那麼建置好的執行檔,拿來筆電上使用時,frame rate過低的問題會依舊存在嗎?
讚Liked by 1 person
這就期待你的測試結果了。
讚讚
如果使用範例depth basic d2d 可以screenshot(可以拍照成深度圖檔) 但是畫面顯示是白的 是什麼故障的情況呢
讚讚
Direct 2D、Direct 3D 的程式可能會需要使用特殊程式才能擷取畫面。
讚讚