Kinect sdk与OpenNI的前世今生

前世:Kinect SDK 1.6之前、OpenNI2.0之前

通过试玩过微软的Kinect sdk与OpenNi的Kinect之后,下面对两者作了一些比较。注意:微软的sdk版本是最初的beta版,与最新的released版本会有所出入。

Kinect sdk优点:

  1. 支持音频
  2. 支持马达
  3. 全身追踪。不需要标定姿势(投降姿势);包括头,手,脚和锁骨;看起来处理关节闭塞更好些。
  4. 支持多传感器(多台Kinect)
  5. 简化安装(安装更容易)
  6. 当新的视频或深度图有效时,SDK会有可用事件

Kinect sdk缺点:

  1. 非商用(商业需要付费)
  2. 只能追踪全身(不包含特定的追踪模式:例如只追踪手)
  3. 深度图与彩色图不提供自动对齐
  4. 全身追踪。关节只有坐标数据,没有旋转数据 (不过在v1.5版本已经解决);只能追踪全身,不包含特定的追踪模式:例如只追踪手或上半身;
  5. 和OpenNI/NITE相比,看起来更消耗CPU(没有采用适当的基准);
  6. 不包含手势识别系统 ;
  7. 不支持PrimeSense和华硕的WAVI Xtion硬件平台,只支持Win7(32位和64位);
  8. 不支持Unity3D游戏引擎;
  9. 不支持数据记录或回放到硬盘 ;
  10. 不支持红外线视频数据流
  11. 没有此类发生事件,例如当一个用户被侦测到或用户丢失等等。

OpenNi优点:

  1. 可以商用(不需要付费)
  2. 包含手部追踪框架
  3. 包含手势识别框架
  4. 可以自动对齐深度图数据到彩色图数据
  5. 全身追踪。包含坐标数据和旋转数据;支持特殊跟踪模式:例如:只追踪手和头或上半身
  6. 和微软的sdk相比消耗的CPU更少
  7. 支持Primesense和华硕的WAVI Xtion硬件平台
  8. 支持多传感器但是需要安装和枚举,这一点有点古怪
  9. 支持Windows(包括Vista&XP&WIN7),Linux系统和苹果操作系统(翻者:也支持Android)
  10. 自带的代码全面支持Unity3D游戏引擎,也支持Ogre
  11. 支持数据记录到硬盘或从硬盘回放数据
  12. 持红外数据流
  13. 有此类发生事件,例如:当一个用户被侦测到或者用户丢失。(提供回调函数供开发者使用)

OpenNi缺点:

  1. 不支持音频
  2. 不支持马达,马达是微软的专利,所以primesense公司不想惹微软。
  3. 全身追踪;缺乏以下关节:头,手,脚,和锁骨;需要一个标定姿势(投降姿势)才能开始追踪骨骼(注意:标定数据是可以存储和提取的方便重用,不过这在1.5版本已经解决,已经不需要手势)
  4. 关节闭塞没有被估算
  5. 支持多感应器但是需要安装和枚举,这一点有点古怪。
  6. 需要单独安装NITE

编后语:
微软在骨骼识别和音频方面还是比较有优势,而OpenNI似乎更适合做一些带颜色的点云的工作,和在非Win7平台来开发商业项目。如果你想开发基于上半身或手识别的项目,可以使用OpenNI和NITE;但如果是全身识别毋庸置疑微软的SDK是最好的,然而你必须自己编写你自己的手势识别代码。

 

转自:http://www.diiduu.com/kinect-sdk-openni-difference.html

 

================华丽丽的分割线===================

但是自从OpenNI2.0放出之后,格局就发生了巨大变化

Kinect sdk与OpenNI的前世今生_第1张图片

 

【1】程序接口作了较大的更新。具体更新可以查看《OpenNI Migration Guide》,http://www.openni.org/openni-migration-guide/,由于没有向下兼容,因此如果要升级OpenNI2的话,很多代码需要改动了。    

【2】驱动的变化。使用过OpenNI1.X的童鞋应该了解过SensorKinect这个驱动,但在OpenNI2的环境下,目前Kinect只能使用微软官方的Kinect for Windows SDK来驱动了,料想其它品牌的摄像头,也应该有各自不同的驱动方式吧。使用官方驱动的好处是安装比较方便,Kinect for Windows SDK中也自带了一些开发工具可以测试使用,坏处也显而易见,由于Kinect for Windows SDK只支持Win7以上的操作系统,让那些想在Linux上玩转Kinect的童鞋失望而归。

【3】第三方中间件的支持。在OpenNI1.X的世界里,NiTE一统天下的局面一去不复返了。现在的OpenNI2只负责操作硬件,提供应用数据,与中间件保持独立,在官网上,除了NiTE2之外,你还能找到其它的中间件来使用。

 

你可能感兴趣的:(Kinect sdk与OpenNI的前世今生)