本連載主要是
比較
Kinect for Windows的現行版(v1)和次世代型的開發者預覽版(v2),
以C++開發者為背景介紹進化的硬件和軟件。本文主要是對
傳感的配置和運行條件進行
徹底的比較。
本連載介紹的
Kinect for Windows Developer Preview是暫定的,
軟件、硬件以及API有可能因為最終的產品版發生變更,
還請諒解。
關於本連載
本連載主要是比較次世代型的
Kinect for Windows(后面稱作
Kinect v2預覽版
)和現行型的
Kinect for Windows(后面稱作
Kinect v1
)的同時,
介紹面向c++開發者而進化的硬件和軟件。(本網站也發布了對應C#/Visual Basic開發者的內容,
.NET開發者可以同時參考[
新型Kinect for Windows v2 Developer Preview programing入門
])
次世代型的
Kinect for Windows
2012年美國微軟發售的Kinect v1,因為可以很方便就能取得Depth(深度)和 skeleton(人物姿勢)等信息,被全世界的開發者和研究人員關注。
2014年預定發售的Kinect v2,
預測在
硬件和軟件上會做很大的進化,
在銷售前,
開發者向的預覽版的Kinect v2(傳感器)和SDK v2(軟件開發套件)很早就發布了出來。
還有,因為這個開發者向的早期提供程序是必須簽訂NDA(密碼保持契約),本稿有不能公布的事項
也事先請各位諒解。
Kinect v1和Kinect v2預覽版的外觀比較
Kinect v1(圖1)和Kinect v2 預覽版(圖2)的外觀的照片。

圖1 Kinect for Windows v1(現行型)
Kinect v
1的Depth傳感器,
采用了
「Light Coding」的方式,
讀取投射的紅外線
pattern,
通過
pattern的變形來取得Depth的信息。為此,Depth傳感器分為投射紅外線
pattern的IR Projector(左)和讀取的這個的IR Camera(右)。還有Depth傳感器中間還搭載了Color Camera。
Light Coding是以色列的PrimeSense公司的Depth傳感器技術,於2013年被美國蘋果公司收購。

圖2 Kinect for Windows v2(次世代型)預覽版
Kinect V2預覽版的Depth傳感器,采用的是「Time of Flight(TOF)」的方式,通過從投射的紅外線反射后返回的時間來取得Depth信息。Depth傳感器看不到外觀,不過Color Camera旁邊是紅外線Camera(左)和投射脈沖變調紅外線的Porjector(右)。
微軟過去收購過使用TOF方式處理Depth傳感器技術的公司
(注:應該是指的
3DV
),
已經在
使用
這個技術,
不過沒有詳細的公布。
Kinect v1和Kinect v2預覽版的配置比較
Kinect v1和Kinect v2預覽版的傳感器的配置比較在表1顯示。
Kinect v1 | Kinect v2預覽版 | ||
---|---|---|---|
顏色(Color) | 分辨率(Resolution) | 640×480 | 1920×1080 |
fps | 30fps | 30fps | |
深度(Depth) | 分辨率(Resolution) | 320×240 | 512×424 |
fps | 30fps | 30fps | |
人物數量(Player) | 6人 | 6人 | |
人物姿勢(Skeleton) | 2人 | 6人 | |
関節(Joint) | 20関節/人 | 25関節/人 | |
手的開閉狀態(Hand State) | △(Developer Toolkit) | ○(SDK) | |
檢測範囲(Range of Detection) | 0.8~4.0m | 0.5~4.5m | |
角度(Angle)(Depth) | 水平(Horizontal) | 57度 | 70度 |
垂直(Vertical) | 43度 | 60度 | |
(Tilt Motor) | ○ | ×(手動) | |
複數的App | ×(単一的App) | ○ |
表1是Kinect v1和Kinect v2預覽版的傳感器的配置比較
Kinect v1的Color Camera的分辨率是640x480較低,不能取得非常漂亮的圖像,Kinect v2預覽版的分辨率大幅
提高,能取得1920×1080非常漂亮的圖像(圖3)。
(注:v1的要求是USB2.0理論傳輸速率是60MB/s,v2是USB3.0理論傳輸速率是500MB/s。可以計算一下,以X
RGB
Color為例,
30fps,
那么每秒所需傳輸的數據大小為640 x 480 x 4 x 30約為35M;再加上USHORT格式的Depth Color,
30fps,
大小為320 x 240 x 2 x 30約為4M。總計約為40MB/s,
因為帶寬有限,
所以在保證畫面幀率穩定的情況下,
分辨率只能如此,
而且基本上
必須獨占一個
USB Controller。再算算v2的情況,
Color = 1920 x 1080 x 4 x 30 約為237M,
Depth = 512 x 424 x 2 x 30約為12M,
總計約為250M/s。所以非USB3.0不可,
否則傳輸不了這么大的數據量。顯而易見,
Color Map是最占帶寬的,
其實可以通過一些其他格式,
比如I420或MJPG來減少數據量,
然后通過CPU或GPU來進行解壓和回放。
)


圖3 Kinect v1和Kinect v2預覽版的Color
Kinect v2預覽版的
Depth傳感器的分辨率也提高到512×424,
而Kinect v1是可以取640×480分辨率的Depth數據,乍一看規格好像下降了,其實Kinect v1的Depth傳感器的物理分辨率是320x240,Up Sacling到640x480而已(注:猜測是Runtime處理的)。另外,Depth傳感器的方式也是從Light Coding變更為Time of Flight(TOF)。
不能詳細敘述,
不過
Kinect V2預覽版Depth數據的精度也提高了(圖4),
關於精度還敬請等待產品版。


圖4 Kinect v1和Kinect v2預覽版的Depth
Kinect v1,v2預覽版可以取得Player(可識別的人體)數量都是6人。
Kinect v2預覽版因為
Depth傳感器的分辨率提高了,
用Player數據只需要簡單的剪切就可以很漂亮得把背景和人物分離。
Kinect v1可以取得全部關節(Joint)的skeleton的數量是2人,隨着Depth傳感器的分辨率上升和視角的寬廣,Kinect v2預覽版變得能取得
6人
。
還有,
Kinect v1能取得的Joint是20個Joint每人,
Kinect v2預覽版變為能取得25個Joint。具體的如圖5所示,
頭(Neck),
指尖
(HAND_TIP_LEFT,
HAND_TIP_RIGHT),
大拇指(THUMB_LEFT,
THUMB_RIGHT),
增加了這5個Joint。不僅僅是手的位置,
大拇指和指尖的細小信息也可以獲取到。
Hand State(手的開閉狀態)的識別,
Kinect v1是靠
Developer Toolkit里的「Kinect Interaction」庫來支持,
不過在K
inect V2預覽版SDK里是標准支持。


Kinect v1和Kinect v2預覽版可以取得的Joint
Kinect v1為了搖頭裝載了傾斜電機(Tilt motor),也有視角擴展,
Kinect v
2預覽版沒有搭載
Tilt motor,
靠手動來搖頭。
Kinect v1不能多個應用程序同時連接到一個傳感器。Kinect v2預覽版通過「Kinect Service」,可以讓多個應用程序同時從傳感器取得數據(參考圖6)
現在,Kinect Service作為常駐程序被提供, 一般認為產品版里會成為Windows的服務(Service)。

圖6 通過Kinect Service,對應多個應用程序
Kinect v1和Kinect v2 預覽版的運行環境的比較表(表2)。
Kinect v1 | Kinect v2預覽版 | |
---|---|---|
OS | Windows 7以后 | Windows 8以后 |
編譯器(Compiler) | Visual Studio 2010以后 | Visual Studio 2012以后 |
接続端子(Connector) | USB 2.0 | USB 3.0 |
CPU | Dual-Core 2.66GHz | Dual-Core 2.66GHz |
GPU | DirectX 9.0c | DirectX 11.0 |
RAM | 2.0GBytes | 2.0 GBytes |
Kinect v1要在Windows 7以后的版本上運行,Kinect v2要求是在Windows 8 運行。關於Visual Studio也要求是2012以后的版本。
Kinect v1要求USB 2.0(或更快的USB)來運行,因為Kinect 2預覽版傳感器的分辨率也提高了,需要更快的USB 3.0來運行。Kinect v1和Kinect v2預覽版的專有USB總線帶寬都沒有變化。
Kinect v1和
Kinect v2預覽版都有與部分USB Host Controller不兼容而導致不能正常運行的情況,現在是R
enesas和Intel的USB 3.0
Host Controller可以運行。台式PC也可以增加USB3.0擴展卡來對應。
CPU方面,
和
Kinect v1一樣,
要求
Dual Core 2.66 GHz以上。
「時鍾頻率較低」一類的運行環境也稍微下降了,
不是特別差的情況都可以運行,
不過注意傳感器分辨率提高,
取得的數據的處理消耗也上升了。
Kinect v1要求的是支持
DirectX 9.0c的GPU(Kinect Fusion除外
),
Kinect v2預覽版要求支持
DirectX 11.0以后的GPU,
像筆記本這種沒有裝載
NVIDIA GeForce和AMD Radeon外置GPU(獨立顯卡)的很多無法運行,而
像有
Intel HD Graphics這種支持
DirectX 11.0以后的處理器內置的GPU(集成顯卡)是可以運行的。
如上展示了
Kinect v2預覽版的必要運行環境,
和前述一樣在產品版中有變更的可能性,
現在還不需要着急准備對應環境。關於USB
Host Controller的
兼容性今后也有解決的可能,希望起到參考的作用。
總結
這次徹底的比較了
Kinect v1和Kinect v2預覽版的傳感器配置和必要運行環境,
下一回是
關於使用Kinect SDK v2.0預覽版的C++的程序設計方法在
v1和v2預覽版上的
比較和介紹。