【翻译】Kinect v1和Kinect v2的彻底比较

  本连载主要是比较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 v1Kinect 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 v1Kinect 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预览版上的比较和介绍。
posted @ 2014-12-01 23:18  Trace0429  阅读(82863)  评论(1编辑  收藏  举报