本连载主要是比较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 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」库来支持,不过在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预览版上的比较和介绍。

【翻译】Kinect v1和Kinect v2的彻底比较的更多相关文章

  1. Kinect v1 (Microsoft Kinect for Windows v1 )彩色和深度图像对的采集步骤

    Kinect v1 (Microsoft Kinect for Windows v1 )彩色和深度图像对的采集步骤 一.在ubuntu下尝试 1. 在虚拟机VWware Workstation 12. ...

  2. ROS indigo下Kinect v1的驱动安装与调试

    ROS indigo下Kinect v1的驱动安装与调试 本文简要叙述了在ROS indigo版本下Kinect v1的驱动安装与调试过程. 1. 实验环境 (1)硬件:  台式机和Kinect v1 ...

  3. Kinect for Xbox one(v2) + Ubuntu 14.04 +ROS 安装

    相比于kinect for xbox 360(v1)通过结构光来获取深度,Kinect for Xbox one(v2) 采用time flight技术,极大改善了深度图像的性能. kinect fo ...

  4. ROS与深度相机入门教程-在ROS使用kinect v1摄像头

    ROS与深度相机入门教程-在ROS使用kinect v1摄像头 说明: 介绍在ros安装和使用kinect v1摄像头 介绍freenect包 安装驱动 deb安装 $ sudo apt-get in ...

  5. Kinect for Windows SDK v2.0 开发笔记 (十五) 手势帧

     (转载请注明出处) 使用SDK: Kinect for Windows SDK v2.0 public preview1409 同前面,由于SDK未完毕,不附上函数/方法/接口的超链接. 这次最 ...

  6. win10 +Kinect V1 1414环境配置

    win10 +Kinect V1 1414环境配置 想起老Lab的机器人头顶的Kinect 安装准备 demo展示 人脸识别 照片不能够检测到人脸 可以去除背景 检测骨架 想起老Lab的机器人头顶的K ...

  7. 使用hector-slam和Kinect V1建图

    一.建图实际操作 下载源码测试源码,depthimage_to_laserscan,参考https://blog.csdn.net/u010925447/article/details/5649468 ...

  8. ORB-SLAM2实现(kinect V1/ROS)

    实验室电脑环境ubuntu14.04和ROS indigo已经装好. 1. 构建工作空间[非常重要的一步] mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catki ...

  9. kinect v1+ ubuntu 配置问题

    从github上下载openni 以及 SensorKinect. install 之后 启动openni下的例子 NiViewer发生错误. Open failed: Failed to set U ...

随机推荐

  1. zsh(yum装包的时候,有时候会不行)

    [root@GIT ~]# yum search zsh =============================== N/S Matched: zsh ====================== ...

  2. JUC回顾之-Semaphore底层实现和原理

    1.控制并发线程数的Semaphore Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,保证合理的使用公共资源. 线程可以通过acquire()方法来获取信号量的 ...

  3. 在Android中让Preference的宽度占满整个屏幕的宽度

    今天遇到一个问题,需要修改Preference的宽度,让其与屏幕宽度一致.搞了一上午. 终于发现Preference的这个尺寸是在PreferenceFrameLayout中设置的.通过下面这段代码, ...

  4. wp8 json2csharp

    string jsonData = "{\"result\":\"600\",\"data\":{\"items\&qu ...

  5. Android中dp和px之间进行转换

    在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip).一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致.但是在代码中,如何处理呢?很多控件的方法中都只提供了 ...

  6. C# http 发送post或get请求

    /// <summary> /// 向服务器提交XML数据 /// </summary> /// <param name="url">远程访问的 ...

  7. HealthKit开发教程之HealthKit的辅助数据

    HealthKit开发教程之HealthKit的辅助数据 在HealthKit中除了主要数据之外,还有6个辅助数据分别为:体积类型数据.压力类型数据.时间类型数据.温度类型数据.标量类型数据和电导率类 ...

  8. JavaScript中两个感叹号(!!)的作用是什么?

    !!一般用来将后面的表达式强制转换为布尔类型的数据(boolean),也就是只能是true或者false. 看这么个例子: var a: var b=!!a; a默认是undefined.!a是tru ...

  9. 暴力 hihoCoder 1251 Today Is a Rainy Day (15北京C)

    题目传送门 题意:一串数字变成另一串数字,可以单个数字转变,或者一类数字转变,问最少操作次数 分析:首先一类转换比单个转换优,先枚举找出最优的映射方案,然后将零碎的操作加上.6位6进制表示map映射, ...

  10. WCF 采用net.tcp协议实践

    概述 与Socket相比,WCF真是爽得不得了,其基本指导思想为SOA——面向服务. 其基本配置在于ABC(Address,Binding,Contract),通常,只要这三个因素配置对了,那么,基本 ...