本连载主要是比较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 (Microsoft Kinect for Windows v1 )彩色和深度图像对的采集步骤
Kinect v1 (Microsoft Kinect for Windows v1 )彩色和深度图像对的采集步骤 一.在ubuntu下尝试 1. 在虚拟机VWware Workstation 12. ...
- ROS indigo下Kinect v1的驱动安装与调试
ROS indigo下Kinect v1的驱动安装与调试 本文简要叙述了在ROS indigo版本下Kinect v1的驱动安装与调试过程. 1. 实验环境 (1)硬件: 台式机和Kinect v1 ...
- Kinect for Xbox one(v2) + Ubuntu 14.04 +ROS 安装
相比于kinect for xbox 360(v1)通过结构光来获取深度,Kinect for Xbox one(v2) 采用time flight技术,极大改善了深度图像的性能. kinect fo ...
- ROS与深度相机入门教程-在ROS使用kinect v1摄像头
ROS与深度相机入门教程-在ROS使用kinect v1摄像头 说明: 介绍在ros安装和使用kinect v1摄像头 介绍freenect包 安装驱动 deb安装 $ sudo apt-get in ...
- Kinect for Windows SDK v2.0 开发笔记 (十五) 手势帧
(转载请注明出处) 使用SDK: Kinect for Windows SDK v2.0 public preview1409 同前面,由于SDK未完毕,不附上函数/方法/接口的超链接. 这次最 ...
- win10 +Kinect V1 1414环境配置
win10 +Kinect V1 1414环境配置 想起老Lab的机器人头顶的Kinect 安装准备 demo展示 人脸识别 照片不能够检测到人脸 可以去除背景 检测骨架 想起老Lab的机器人头顶的K ...
- 使用hector-slam和Kinect V1建图
一.建图实际操作 下载源码测试源码,depthimage_to_laserscan,参考https://blog.csdn.net/u010925447/article/details/5649468 ...
- ORB-SLAM2实现(kinect V1/ROS)
实验室电脑环境ubuntu14.04和ROS indigo已经装好. 1. 构建工作空间[非常重要的一步] mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catki ...
- kinect v1+ ubuntu 配置问题
从github上下载openni 以及 SensorKinect. install 之后 启动openni下的例子 NiViewer发生错误. Open failed: Failed to set U ...
随机推荐
- zsh(yum装包的时候,有时候会不行)
[root@GIT ~]# yum search zsh =============================== N/S Matched: zsh ====================== ...
- JUC回顾之-Semaphore底层实现和原理
1.控制并发线程数的Semaphore Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,保证合理的使用公共资源. 线程可以通过acquire()方法来获取信号量的 ...
- 在Android中让Preference的宽度占满整个屏幕的宽度
今天遇到一个问题,需要修改Preference的宽度,让其与屏幕宽度一致.搞了一上午. 终于发现Preference的这个尺寸是在PreferenceFrameLayout中设置的.通过下面这段代码, ...
- wp8 json2csharp
string jsonData = "{\"result\":\"600\",\"data\":{\"items\&qu ...
- Android中dp和px之间进行转换
在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip).一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致.但是在代码中,如何处理呢?很多控件的方法中都只提供了 ...
- C# http 发送post或get请求
/// <summary> /// 向服务器提交XML数据 /// </summary> /// <param name="url">远程访问的 ...
- HealthKit开发教程之HealthKit的辅助数据
HealthKit开发教程之HealthKit的辅助数据 在HealthKit中除了主要数据之外,还有6个辅助数据分别为:体积类型数据.压力类型数据.时间类型数据.温度类型数据.标量类型数据和电导率类 ...
- JavaScript中两个感叹号(!!)的作用是什么?
!!一般用来将后面的表达式强制转换为布尔类型的数据(boolean),也就是只能是true或者false. 看这么个例子: var a: var b=!!a; a默认是undefined.!a是tru ...
- 暴力 hihoCoder 1251 Today Is a Rainy Day (15北京C)
题目传送门 题意:一串数字变成另一串数字,可以单个数字转变,或者一类数字转变,问最少操作次数 分析:首先一类转换比单个转换优,先枚举找出最优的映射方案,然后将零碎的操作加上.6位6进制表示map映射, ...
- WCF 采用net.tcp协议实践
概述 与Socket相比,WCF真是爽得不得了,其基本指导思想为SOA——面向服务. 其基本配置在于ABC(Address,Binding,Contract),通常,只要这三个因素配置对了,那么,基本 ...