【翻譯】Kinect v1和Kinect v2的徹底比較

查志強發表於2016-08-02

【原文:http://www.cnblogs.com/TracePlus/p/4136297.html

本連載主要是比較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 v1的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。可以計算一下,以XRGB Color為例30fps那麼每秒所需傳輸的資料大小為640 x 480 x 4 x 30約為35M;再加上USHORT格式的Depth Color30fps大小為320 x 240 x 2 x 30約為4M。總計約為40MB/s因為頻寬有限所以在保證畫面幀率穩定的情況下解析度只能如此而且基本上必須獨佔一個USB Controller。再算算v2的情況Color = 1920 x 1080 x 4 x 30 約為237MDepth = 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×424Kinect 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_LEFTHAND_TIP_RIGHT)大拇指(THUMB_LEFTTHUMB_RIGHT)增加了這5個Joint。不僅僅是手的位置大拇指和指尖的細小資訊也可以獲取到。
 
   Hand State(手的開閉狀態)的識別Kinect v1是靠Developer Toolkit裡的「Kinect Interaction」庫來支援不過在Kinect V2預覽版SDK裡是標準支援。
    

Kinect v1和Kinect v2預覽版可以取得的Joint
Kinect v1為了搖頭裝載了傾斜電機(Tilt motor),也有視角擴充套件,Kinect v2預覽版沒有搭載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
表2 Kinect v1和Kinect v2預覽版的最小執行環境比較
 
  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不相容而導致不能正常執行的情況,現在是Renesas和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預覽版上的比較和介紹。

相關文章