上篇文章我们介绍Kinect硬件构成及原理,今天小编继续为大家讲解SimpleOpenNI 0.27 版本Processing 平台搭建的具体操作过程。
开发平台搭建
一 、SimpleOpenNI 0.27 版本Processing 平台搭建
1 其实还是需要下载这样的一个软件:
Processing 如果发现报错,那么你可能是把
Processing放在文件夹下了,这是不可以的,一定要放在磁盘的根目录下,再如果你发现下载之后你打不开它,那么可能是你没搭建Java环境,要解决起来很简单,只要安装Java SDK就行了,现在的版本是JDK 1.7。
2 其实运行
Processing后你是不能马上开发
Kinect,为还要安装一个
library,这个
library可以理解为
Processing的插件,但是大家不要担心,我会整合资源,预先安装好”插件”在
Processing上,然后大家下载运行就可以了。另外
JDK1.7我也会整合在内的,到时候大家可以直接下载我的”大包”然后一气呵成
3 如果下载了Windows kinect SDK那么先卸载它,为什么? 个人理解:这个是驱动的原因,因为不同的API不同的开发者对函数,类的写法,思想是不同的,底层的中间介质就会不同,如果都安装的话就会出现问题。
4 卸载完毕------记得先插上
Kinect;然后, 要安装
OpenNI的SDK 因为
OpenNI消耗资源比较小,比较Windows SDK 来说有更大的灵活性的解决方案。其实
OpenNI在VC下还是存在解决方案的,在这里只是
Processing+SimpleOpenNI的一个解决方案。总的来说有这样三种解决方案: 1 windows Kinect SDK+Visual Studio 2 OpenNI+Visual Studio 3 SimpleOpenNI+
Processing,那么现在来说我们的解决方案就是第三种。
上面的图片意思就是:这回你遇到问题了,是什么呢?就是当你卸载Windows SDK 驱动后,在安装OpenNI驱动的话,就会报错,但是这并不代表不能安装。解决方案就是重启机器,开机之前一直抖动着按F8,笔记本的话应该是好FN(功能键,左下角)+F8组合的,大家注意,F8 会带你进入一个比较好玩的模式,黑纸白字,第一项就是安全启动,然后是最后一次正确配置,这个不重要,最重要的是,选择禁止驱动强制签名,然后回车(Enter键)。说到这里,有的电脑直接可以安装,不会报以上截图的错。
F8帮你只能到这,然后重启结束,然后安装,如下截图,一定要点击始终安装,然后驱动成功了。
成功安装驱动后效果是这个样子的
二 SimpleOpenNI 1.96 版本Processing 平台搭建
1 下载windows kinect SDK1.8(1.7也可以)
2 下载SimpleOpenNI 1.96
3 (可以在卸载SimpleOpenNI驱动后)直接安装windows kinect SDK1.8
5 为什么这么简单?因为第三部以后我帮你打理了
Notice: SimpleOpenNI 1.96和SimpleOpenNI 0.27 有一些API接口不太一样,主要是升级之后有改变的缘故吧,但是都是很简单的,按照Example>>OpenNI>>User 修改就可以正常使用了。具体修改方法:相互比较两者的不同点,不难发现0.27版本SimpleOpenNI例程较1.96版本多了这样一句初始化:
context.enableUser(SimpleOpenNI.SKEL_PROFILE_ALL);
这句话enableUser方法确定的是被检测者是生么形式的进入Kinect视野,有SKEL_PROFILE_ALL, SKEL_PROFILE_UPPER,SKEL_PROFILE_LOWER,这三种模式ALL的模式为显示使用者的全身体感信息,UPPER为显示使用者上半生体感信息,LOWER则是只显示使用者下半身的体感信息。这样的话可以方便的分析出单独身体部分的运动状态,排除其他身体部分带来的视觉干扰,便于做前后期测试能极大的提高工作效率。
而在升级版本1.96中取消了这个模式,不再有分离的说法,这个很让我感到奇怪,不知道开发者是怎么想的,或许是存在,我不知道而已。
0.27的测试平台下的工程如果想移植到新的1.96平台的话,就要注意修改这句函数了,修改方法很简单,只要删除就可以。
解决报错001后,还有报错002,相较与0.27SimpleOpenNI新版本的1.96更简洁的说明了一个道理,自然语言与计算机语言交互要自然。
context.requestCalibrationSkeleton(userId,true)其实这句话的报错不像报错001一样,是由于初始化的不同导致的不兼容,这句话的方法没有变化,只是函数void onNewUser(int userId)的变量由int userId变成SimpleOpenNI curContext和 int userId。也就是被检测对象的个数没有太大变换,可以支持多人,但是对象的代词发生了改变, curContext当前对象的称呼,个人感觉改变这句函数的很大原因可能是对全局的对象申请更为方便吧。
解决办法:将SimpleOpenNI1.96版本User例程里面的onNewUser函数完全取代SimpleOpenNI0.27版本的onNewUser函数。
接连的报错也是由于类似报错002的原因,当然解决办法也是用SimpleOpenNI1.96版本的函数替换掉原来SimpleOpenNI0.27版本的函数,换成新的函数,这样就会兼容。
实例测试
(在Processing下File>Example)
在Processing下File>Example>Library>OpenNI>SceneDepth
就是这个结果喽,很简单的。
学习新的东西过程不是很爽,为什么因为人类都有个共性,那就是对未知事物都有恐惧之心,山高人为峰,心之所向金石为开,要时刻充满斗志和激情,才不枉青春过!
这个网站是对我帮助最大的,它不但有例程还有详细的讲解,但是都是E文。
关于SimpleOpenNI开发平台搭建小编就给大家介绍到这了,后续小编还会继续为大家讲解用kinect绘制深度图与绘制人体躯干实例具体操作过程,喜欢的小伙伴们敬请期待吧!
相关文章:基于Kinect的实例教程及硬件介绍(一)
基于Kinect 体感操作的多自由度并联机械手