浅谈OpenNI之我见

浅谈OpenNI之我见

        一晃就是一年,从第一次见到Kinect算起,回想起一年的开发历程确实是磕磕绊绊。一直用微软的库给公司开发体感游戏,只是业余时间用OpenNI1.5做些小实验和不起眼的算法。像什么虚拟摄像头、语音区分玩家、控制鼠标、姿势识别、人体3D重构啊什么的都是用OpenNI来做,咳咳,好了吹牛到此为止,言归正传。很长一段时间都在QQ群里和论坛上看见大家提到OpenNI、讨论OpenNI,苦于一直没有时间写篇帖子,今天终于决定也来说说OpenNI之我见吧,希望对大家多少能有些帮助,偏颇之处请大家多多包涵。

        在这里主要说两个方面吧:OpenNI环境搭建注意事项、版本取舍之我见。        
        在开始正题之前先介绍一下几个东西,我也是翻墙之后才发现和下载到的,好像很少在国内的论坛和讨论里听人提到,这里给大家补充一下吧:(注意下面给出的链接有时候可能需要翻墙看)


1、OpenNI Bridge:是一个将OpenNI直接桥接到微软驱动而不需要安装PrimeSensor驱动的连接器。这东西是日本人写的,OpenNI1.0开始的时候就有了。我发现它更新还挺积极,相信微软1.7SDK发布后不久又会有新的版本。它让OpenNI库可以切换使用PrimeSensor驱动还是微软驱动(驱动本身共存的方法论坛里已经有贴子说过了,我就不赘述了),后面会提到安装和使用OpenNI Bridge的方法。“能桥接到微软驱动”并不是OpenNI2.0的创举,反而2.0抛弃PrimeSensor驱动我觉得是一种遗憾,因为这之前OpenNI相对于微软SDK的跨平台优势暂时就体现不出来了。


2、Brekel Kinect:是国外一个大牛用OpenNI和Qt做的一个跨平台的Kinect应用,里面的3D reconstruction很不错,做这方面的童鞋“你懂的”。虽然谣传它是一个开源项目,但我一直没能找到源代码在哪获得,要是有人发现了请贡献上来吧。我估计应该是个商业项目。
 

一、OpenNI环境搭建注意事项

1)OpenNI1.5版本环境搭建

1.注意一个小细节:OpenNI 1.5.2对应PrimeSensor驱动的v5.1.0.41版本,OpenNI 1.5.4 则对应PrimeSensor驱动的v5.1.2.1版本,才能正常使用。很多童鞋都是牺牲在这里了。2.首先装OpenNI库。


3.在OpenNI装好后,(WinXP上)再安装PrimeSense sensor的驱动;若(Win7)使用桥接微软的驱动,那就不要装这个驱动了,直接装OpenNI-Bridge。


4.最后安装NITE库,一定要手动选择安装路径,非文字输入,文字修改有BUG.


5.设备管理器里刷新后注意驱动目录指向OpenNI目标目录下的driver目录,例如:
C:\Program Files\OpenNI\Driver


6.如果运行样例报缺少XnCore.dll等错误,除了可以将这些dll拷贝到样例目录下以外,还可以在系统环境变量Path最后加上XnCore.dll所在的路径,例如:F:\Program Files\OpenNI\Bin;F:\Program Files\PrimeSense\SensorKinect\Bin。一般如果版本正确不会出现这种错误,出现这种错误八成是版本不匹配。


7.重点:OpenNI各部分的安装顺序非常重要!一定先安装OpenNI再装驱动和NITE库,因为这两个东西都要修改OpenNI目录下的配置文件。OpenNI-Bridge是OpenNI连接微软驱动的桥梁,所以和OpenNI的Sensor驱动一样应该在OpenNI之后安装。运行OpenNI-Bridge的安装脚本(install.bat)前记得添加系统环境变量:OPEN_NI_BIN="E:\Program Files\OpenNI\Bin",不然会报错的。

修改下面 \OpenNI\Data\modules.xml文件xml 文件的中文注释部分可以控制OpenNI库是否使用OpenNI-Bridge:
<Modules>
    <Module path="F:\Program Files\OpenNI\bin\nimRecorder.dll" />
    <Module path="F:\Program Files\OpenNI\bin\nimMockNodes.dll" />
    <Module path="F:\Program Files\OpenNI\bin\nimCodecs.dll" />
    <Module path="F:\Program Files\PrimeSense\NITE\Features_1_3_0\Bin\XnVFeatures_1_3_0.dll" configDir="F:\Program Files\PrimeSense\NITE\Features_1_3_0\Data" />
    <Module path="F:\Program Files\PrimeSense\NITE\Features_1_3_1\Bin\XnVFeatures_1_3_1.dll" configDir="F:\Program Files\PrimeSense\NITE\Features_1_3_1\Data" />
    <Module path="F:\Program Files\PrimeSense\NITE\Features_1_4_1\Bin\XnVFeatures_1_4_1.dll" configDir="F:\Program Files\PrimeSense\NITE\Features_1_4_1\Data" />
    <Module path="F:\Program Files\PrimeSense\NITE\Features_1_4_2\Bin\XnVFeatures_1_4_2.dll" configDir="F:\Program Files\PrimeSense\NITE\Features_1_4_2\Data" />
    <Module path="F:\Program Files\PrimeSense\NITE\Features_1_5_2\Bin\XnVFeatures_1_5_2.dll" configDir="F:\Program Files\PrimeSense\NITE\Features_1_5_2\Data" />
<!-- 删除本行,打开OpenNI-Bridge
    <Module path="F:\Program Files\kinect-mssdk-openni-bridge-v1.6.0.0-for-1.5.2.23\bin\kinect-mssdk-openni-bridge-V10Release.dll" />
    <Module path="F:\Program Files\kinect-mssdk-openni-bridge-v1.6.0.0-for-1.5.2.23\bin\kinect-mssdk-openni-bridge-V10Debug.dll" />
删除本行,打开OpenNI-Bridge -->
    <Module path="F:\Program Files\PrimeSense\SensorKinect\Bin\XnDeviceFile.dll" />
    <Module path="F:\Program Files\PrimeSense\SensorKinect\Bin\XnDeviceSensorV2KM.dll" configDir="F:\Program Files\PrimeSense\SensorKinect\Data" />
</Modules>
\OpenNI\Data\SamplesConfig.xml主要是用来配置OpenNI数据节点Node信息的,比如是否打开Image彩色图节点、是否打开Audio音频节点等,如何配置这个文件我就不多说了,专门讲述OpenNI开发的帖子应该都会提到。 

2)OpenNI2.0版本环境搭建:
        Win7以上系统,因为微软的驱动在XP下不能用。先装微软Kinect SDK1.5到1.7的版本都行(1.0我没试过,猜想也行),然后一键式傻瓜安装OpenNI2.0(就一个包)。我想大家都懂,就不废话了。

二、版本取舍之我见
终于到尾声了,这部分主要说说OpenNI2.0之前之后版本的几个值得注意的差别吧,好的方面咱就不多说了,说说值得忧虑的地方吧。

1.OpenNI2.0暂时不支持音频节点了,我在OpenNI2.1的源码库里明确看见"case AUDIO_NODE: return;",之前用OpenNI1.5做的音频应用只能停留在1.5时代了,泪奔一下。

2.OpenNI2.0不支持马达控制,1.5时代还可以用直接操作USB的开源代码做,2.0时代由于微软驱动不开源没有也不提过任何接口,所以OpenNI2.0在这点上悲催了。用微软SDK的哥们就乐吧!

3.以前OpenNI是靠NITE库和其他第三方算法库,来支持扩展复杂姿势算法和复杂应用的,现在由于OpenNI2.0彻底重构了软件架构,很多原来优秀的第三方库都没来得及做对应的更新。虽然NITE总算还有更新,但细用之下功能支持上只减无增,而且我们自身应用从OpenNI1.5到2.0的迁移工程量就不是一点半点,相信用过的童鞋都知道,那就相当于重写一遍。

综上,我有如下建议:

1.如果已经在使用OpenNI1.5开发体感应用的朋友们,且用OpenNI开发也比较顺手、比较深入了的话,就没有必要在现阶段急于迁移到OpenNI2.1上去,因为OpenNI2.1相比OpenNI1.5本身还不完善,功能缺损比较严重;不否认OpenNI2.0在软件架构上的优化工作,也许真能让OpenNI比1.5版本有本质的飞跃,就目前情况看还未到达可胜任大规模应用的阶段,建议大家继续安心使用OpenNI1.5、期待OpenNI2.0的升级吧。

2.如果没开始使用OpenNI的朋友们或者体感应用的新手们,优先选择微软的SDK做应用开发吧,至少这样会少走很多弯路。不是迫不得已,就没必要再用老的OpenNI1.5了。毕竟OpenNI2.0出来之后,我发现1.5版本原有的BUG都长期没有人解决,估计只能盼望有大牛发布第三方补丁了。而2.0要达到1.5现有的完整程度也尚需时日。


王哥的总结也很精彩,链接如下:

透过现象看本质:Kinect for Windows SDK、OpenNI背后的故事!


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dj0379

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值