定义:
OpenNI(开放自然交互)是一个多语言,跨平台的框架,它定义了编写应用程序,并利用其自然交互的API。OpenNI API由一组可用来编写通用自然交互应用的接口组成。OpenNI的主要目的是要形成一个标准的API,来搭建视觉和音频传感器与视觉和音频感知中间件通信的桥梁。
这里提到了两个概念,视觉和音频传感器和视觉和音频感知中间件。前者好理解,就是类似Microsoft的Kinect等传感器;后者则指的是用于实时的记录音频和视觉分析的数据并理解它们的软件组件,貌似还是有点拗口,简单来说,就是利用从传感器获取的原始的音频视觉数据进行分析和理解,并返回上层应用所需要的信息,比如手掌的位置信息等。
好处:
OpenNI的这种分层设计机制,允许中间件开发者直接基于原始的数据格式编写算法,而不需要考虑这些数据是由何种传感器设备产生,同时也让传感器生产商制造的设备能用于任OpenNI兼容的应用程序。同时OpenNI的这套标准化API也使得高层的自然交互应用开发人员可以利用传感器输入并计算过的数据类型,很方便的进行应用开发,比如各种体感游戏。
OpenNI的安装
在了解了OpenNI结构的基础上,所需要的开发包的意义就比较清楚了。安装完整的OpenNI框架需要3个模块。
- OpenNI,包含所有需要的API
- SensorKinect,提供sensor的驱动程序
- NITE,一套功能强大的中间件
在此,对于入门的同学,查看各种博客应该会发现两个版本的安装。一种是Microsoft’s Kinect SDK一种就是上面的提到的PrimeSense OpenNI/NITE,两种的区别可以参看下文。
Microsoft’s Kinect SDK
优点:
支持音频
支持马达
全身跟踪:
不需要标定姿势,进入就能识别
包含头、手、脚和锁骨
对封闭关节处理更好
支持多台Kinect设备
安装简单,一个程序安装完即可
当新的视频帧或者深度信息帧可用时,SDK能产生对应事件
缺点:
许可证不包含商业用途
只有全身跟踪,没有单独对手的跟踪模式
不支持彩色图和深度图的坐标对齐
目前有个别的坐标对齐功能
有迹象显示未来将有该功能
全身跟踪:
只有关节位置数据,没有旋转角度数据
只有全身跟踪模式,没有上半身或者只有手模式
CPU资源消耗似乎超过OpenNI/NITE(没有采用适当的基准,即没有进行严格的比对测试)
没有手势识别系统
不支持PrimeSense和华硕WAVI Xtion?(不太确定)
只支持Win7(x86 & x64)
不支持Unity3D游戏引擎
没有内建的录制/播放功能
不支持获取红外视频流的原始数据
SDK对新用户的进入和离开没有对应事件
PrimeSense OpenNI/NITE
优点:
许可证包含商业用途
包含一个手部跟踪框架
包含一个手势识别框架
能够进行深度图到彩色图像的自动对齐
全身跟踪:
计算了骨骼的旋转角度
支持只识别手模式
CPU消耗似乎比微软SDK小(没有进行严格测试)
支持Primesense的设备和华硕WAVI Xtion
支持多设备,但是设置和枚举的方法比较奇怪
支持Windows(包括Win 7, Vista和XP),Linux和Mac OSX
代码代码完全支持Unity3D游戏引擎
支持获取红外视频流原始数据
SDK对新用户的进入和离开有对应事件
缺点:
不支持音频
不支持马达(虽然可以用CL-NUI的马达驱动)
全身跟踪:
缺少头部、手、脚和锁骨的旋转角
需要一个标定姿势才能开始跟踪谷歌(标定数据可以存储起来,方便重用)
闭塞关节点没有估算
支持多设备,但是设置和枚举的方法比较奇怪
l 安装需要三个独立的安装包和一个NITE的序列号
SDK没有提供新视频或者深度图数据可用时的事件。
个人总结:
微软在骨骼识别和音频方面很有优势。
OpenNI可能更适合做带颜色点云的工作,在非Win7平台开发和进行商业项目开发。
手势识别工作中:
如果你想开发上半身或手的项目,或者想使用一个现有的框架,可以使用OpenNI和NITE
如果是全身识别,则使用微软的SDK更稳定,当然你也就必须要自己编写手势识别算法(OpenNI/NITE全身识别的也是如此)。