就目前情况来看,一部分开发者在使用OpenNI SDK进行体感相关开发的过程中,以微软的Kinect(for Xbox 360)设备为主,但实际上,OpenNI并不是原生支援Microsoft Kinect的,在OpenNI环境下使用Kinect,并不能使用官方驱动程序,而必须使用修改过的驱动程序,这一点比之于ASUS的Xtion感应器来说,Xtion才是真正对应OpenNI的设备,它不需要特殊版本的驱动程序,可以直接使用OpenNI的公版驱动程序。本书中所使用的体感设备即是Xtion,这里也为读者来细数一下Xtion和Kinect之间的区别。
2.2.1 Xtion和Kinect的区别
1.体积轻便
相比于Kinect设备,Xtion设备体积上小了不少,相对的重量上也轻了不少,便于携带、移动、放置。图2-4是两款设备的对比图片,可以明显看出Xtion设备比Kinect设备体积更小,重量更轻。
图2-4 Xtion与Kinect比对
2.供电便捷
Xtion设备采用的是USB供电,而Kinect设备则需要额外供电,因此在使用Xtion设备时只需要插入USB接口,即可直接使用,而Kinect设备则需要额外的供电器进行供电。当然该区别的原因在于Xtion设备上没有可以上下调控角度的马达,所以Xtion设备的耗电量相对低了不少,只需要通过USB供电就可以驱动设备。而Kinect设备上有一个上下调整角度的马达,使得Kinect必须通过外接电源的方式才能正常使用,这一点在使用时就没有Xtion设备方便,当然由于Xtion设备没有马达,所以要调整角度,就必须手动去调整。不过Xtion设备基本设计上是能够无段式上下调整倾角,可调整范围也比Kinect的电机调整范围稍大。
3.驱动支持
从体感开发的角度来看,读者应该更加重视两款设备在感应器上面的差异,不过实际上这两者在硬件上的配置大同小异。在彩色感应器和深度感应器方面,Xtion设备和Kinect设备所使用的都是以色列PrimeSence公司的PS1080芯片,所以这一点上,两者的功能实际上基本是相同的。
不过在声音部分,Xtion设备和Kinect设备就有区别了,相对来说Kinect设备的四单元麦克风阵列更为优秀,然而可惜的是目前的驱动程序是无法正确地通过OpenNI来获取Kinect的声音资料的,所以虽然Kinect有比较好的声音硬件,但是目前还没有办法使用。同样的情况还有Kinect设备的马达,虽然Kinect的马达是可控制的,但是目前还没有办法通过开放的软件来控制它。
Xtion设备这点比较好,开发者是可以通过OpenNI及驱动程序获取到声音信息的。所以在完整体验性上面,Xtion设备反而有着较为完整的功能(尤其是声音)。
4.软件开发包(SDK)支持
相对于上面这些区别来说,Xtion Pro/Xtion Pro Live比之于Kinect目前最大的优势就是可以直接由OpenNI来支援,所以驱动程序的支援更加完整、快捷,而Kinect其最本源还是应用于Xbox360,所以针对基于Windows和Linux系统的体感开发来说,更多地会使用OpenNI SDK,因此Xtion无疑是更好的选择。
2.2.2 硬件设备的软件支持
通常以Xtion硬件设备为基础的体感应用开发所使用的软件开发包名为OpenNI,本质上作为一种API(Application Programming Interface,应用程序编程接口),OpenNI搭建了以下两方面的通信桥梁:
·视觉和音频传感器(包括分析周围环境的设备);
·视觉和音频感知中间件(用于实时的记录音频和视觉分析的数据并理解它们的软件组件)。
OpenNI可以将人体的空间深度信息从背景中剥离出来,并且演化出更丰富的人体空间位置信息,让抽象的视觉信息转化为具体的数字信息,从而使得计算机以及开发者可以去识别并使用这些信息。除了支持体感开发最基础的深度信息之外,OpenNI还包含了对常用彩色图像已经声音信息的支持,这样开发者的体感应用开发之路就会更加的丰富多元。
实际上对于体感开发者来说,除了OpenNI之外,Kinect也有一个应用于Windows系统上的SDK,这两者所对应的硬件设备的区别本章之前内容也有所涉及。在做体感应用开发的时候,除了硬件上的区别,这两者软件开发包上的区别一定程度也影响着体感功能的开发体验,这里介绍一下这两者软件开发包之间的异同。
1.平台支持
在平台支持方面,作为开放式软件OpenNI的多平台支持要明显比Microsoft Kinect for Windows SDK丰富,而Kinect仅仅只能用于Windows 7及以后的平台系统,这点难免让开发者有点遗憾。OpenNI在跨平台上几乎支持目前所有的主流系统Window、Mac OS X、Linux、Android等,在目前便携式设备大放异彩的当下,多平台支持的OpenNI无疑会在这些方面有着更进一步的优势。
2.开发语言支持
作为一款软件开发包,多语言的支持也在一定程度上影响着相应设备的使用广泛程度。OpenNI以C语言开发为主,同时还支持C++、.NET、Java这些语言。Microsoft Kinect for Windows SDK相应地支持C++/C#/Visual Basic,实际上这两者的语言支持上并无太大区别,仅在应用于Android平台时产生区别。OpenNI由于其多平台性,会支持Java开发。
3.支持硬件
前面提到过,Xtion设备可以完全支持OpenNI,但是OpenNI并非只支持Xtion设备,实际上OpenNI也可以一定程度地支持Kinect,以及一些使用OpenNI硬件协议的产品。这一点上Microsoft Kinect for Windows SDK则仅仅支持Kinect。
4.功能区别
实际上,作为一名体感开发者,最为看重的还是这两者开发包之间的功能上的差异。
·从支援感应器角度来看,OpenNI支持的感应器包括3D深度影像、彩色影像、红外线影像、声音。相应的Microsoft Kinect for Windows SDK支持的感应器少了一个红外线影像,因此从这一点看这两者并无太大差异。
·从功能上看,这两者在很多方面并无特别大的差异,但是还是存在不同之处。从追踪人数来看,OpenNI并没有人数限制,而Kinect仅提供四个使用者,并且只能追踪两个人骨架;在骨架关节数上,OpenNI可以追踪15个关节,这一点上Kinect较多,可以追踪20个关节。考虑到OpenNI以及其中间件NITE的两者结合,OpenNI相比于Kinect来说多出了手势侦测、姿势侦测、手部追踪的功能。
·从体感开发多元化的角度来看,这两者在对各自硬件上的声音和彩色图片的支持都比较完全。它们都可以对声音信息进行杂音抑制、消除回音、来源方向判断等处理;对彩色图信息都可以进行获取,匹配等处理。
·从扩展角度讲,目前OpenNI 2.0之后的版本,可以支持更多的中间件,这也意味着OpenNI的功能会更加的丰富,更为全面,可扩展性更强。在这一点上Kinect或许会相对逊色一点。