Kinect for Windows SDK v2 基本介紹


最近 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 模式的使用的流程,就是:

  1. 取得感應器(sensor)
  2. 取得資料來源(data source)
  3. 開啟資料畫面讀取器(frame reader)
  4. 進入主迴圈
    • 透過讀取器取得資料畫面(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++ 的程式開發部分做整理就是了。


Kinect for Windows v2 C++ 程式開發目錄

廣告

關於 Heresy
https://kheresy.wordpress.com

58 Responses to Kinect for Windows SDK v2 基本介紹

  1. CK says:

    想請問一下 ,body basics 畫面顯示出來是全黑,想請問一下有可能甚麼問題??

    喜歡

    • Heresy says:

      如果深度影像能正常抓到的話,就是單純沒能抓到人吧?

      喜歡

  2. psytgm says:

    Heresy 您好

    我看了您的這篇詳細的介紹文後受益良多,於是很開心地跑去買了Xbox One回來。

    後來,我們把SDK灌在 Lenovo T460p 筆電,做了非常多次的window update,

    可是ㄧ直有一個問題無法解決,

    就是frame rate有時候會降到很低,甚至會抓不太到。

    想請教您對於frame rate無法拉高,以及不太穩定,有什麼解法?又或者是否有什麼想法?

    謝謝您的分享

    喜歡

    • Heresy says:

      以筆記電腦來說的話,建議先試試看插著電會不會比較好。
      這部份有可能是因為作業系統的電源模式的不同造成的。

      喜歡

      • psytgm says:

        謝謝您的回覆。筆電有插電,電源模式也開到最高效能,但仍未有解。
        這兩天我們飽受重新開機無敵慢的痛苦,所以先改SSD (固態硬碟),重灌,預備抗戰。
        若您仍有其他想法,也希望不吝提點指教。

        喜歡

        • Heresy says:

          如果是系統本身就慢的話,可能就得先從這方面下手了。
          另一個可能,是確認一下系統的溫度。
          如果散熱風扇效率變差(例如進灰卡塵),導致溫度不正常上升的話,是有可能讓系統強制降速的。

          喜歡

          • psytgm says:

            回應您所說的電源模式問題:
            昨天裝好SSD,系統重灌好,並試一下兩種電源模式:高效能模式 vs 省電模式
            發現省電模式比起高效能模式,反而能攫取到到較高的frame rate,但此現象並不太穩定。

            另考慮是否可能筆電有3個USB port,訊號傳輸時系統不時地在3個port之間分配資源,
            並非由XBox one所安插的USB port 獨佔,以致拉低frame rate。
            但,目前暫時想不到怎麼讓安插XBox one 的USB port獨佔資源。

            系統強制降速…確實是有可能。您說的溫度問題,我們會再想想怎麼處理,謝謝。

            喜歡

        • Heresy says:

          這樣的話,個人會先建議注意看看 CPU 溫度?
          否則,不曉得了。

          喜歡

          • psytgm says:

            想問個有點蠢的問題,可是還是忍不住想問問…..

            假設我在配備符合的桌機上灌SDK,而且都可以寫程式碼開發了,
            那麼建置好的執行檔,拿來筆電上使用時,frame rate過低的問題會依舊存在嗎?

            喜歡

    • Heresy says:

      這就期待你的測試結果了。

      喜歡

  3. 盧廉晰 says:

    如果使用範例depth basic d2d 可以screenshot(可以拍照成深度圖檔) 但是畫面顯示是白的 是什麼故障的情況呢

    喜歡

    • Heresy says:

      Direct 2D、Direct 3D 的程式可能會需要使用特殊程式才能擷取畫面。

      喜歡

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: