转自:http://kheresy.wordpress.com/2012/03/15/2012_openni_env_kinect_setup/
一年多前,Heresy有写了一篇《在WIndows上安装Kinect(含MMD使用Kinect简易教学)》,算是在当时针对第一个版本的OpenNI、NITE,以及Microsoft Kinect的安装做教学。
不过到现在,OpenNI的版本已经从1.0.x进版到1.5.x了,在模组、路径上,其实都有相当程度的变更。虽然后来也有更新过一次(参考),不过可能还是不够新,所以现在再来针对现在的最新版本,来写一个比较完整的吧。
首先,先针对一般在Windows上,只需要到OpenNI官方网站(连结),在网站的上方有「Downloads」的字样,把滑鼠游标移过去会出现选单(下图红色的圈),点选选单里的「OpenNI Modules」、就可以进入下载页面了(页面)。
在下载页面里,「Select downloads option」(选取下载选项)下面有三个下拉选单,需要依序选取(右图)。
在这边的前两个栏位、依序选取「OpenNI Package」、「Stable」,这样第三个栏位就会有给Windows的安装套件可以选了。
一般使用者对于只是想跑有用到OpenNI程式(例如MMD)、但是没有要进行程式开发的人来说,如果是32位元的Windows作业系统的话,就请选取「PrimeSense Package Stable Build for Windows x86 (32-bit )v20.4.2.20 Redist Edition」(版本编号可能会因为时间而有所变化);选好之后,按下方的「Download」按钮,就可以进行下载了。下载之后,请执行这个安装档,并一直按「Next」,这样就会把OpenNI和NITE必要的档案都安装完成了。
而如果是使用64 位元的WIndows 的话,则建议请下载「PrimeSense Package Stable Build for Windows x64 (64-bit) v20.4.2.20 Redist Edition」这个版本;他会同时安装32 位元和64 位元的版本,这样遇到32 位元或64 位元的程式,都可以使用。
而如果是要进行OpenNI程式开发的话,则不能使用「Redist Edition」,要使用「DevelopmentEdition」。「Development edition」和「Redist edition」的不同,在于「Redist edition」是给一般用户用的,只包含了执行OpenNI时必要性的档案;而「Development edition」则是给开发人员用的,档案比较大,除了必要的内部元件外,还包含了开发程式需要的档案、文件、以及范例等等东西。而由于「Development edition」包含了「Redist edition」的所有档案,所以如果有安装「Development edition」的话,就不用额外安装「Redist edition」了。
而和Redist Edition版本一样,如果是使用32位元的作业系统的话,就请选择32位元的「PrimeSense Package Stable Build for Windows x86 (32-bit)v20.4.2.20 Development Edition」;而如果是使用64位元Windows作业系统的话,则建议请选择64位元用的「PrimeSense Package Stable Build for Windows x64 (64-bit)v20.4.2.20 DevelopmentEdition」、同时安装32位元和64位元的版本。
如果是使用ASUS Xtion Pro系列的产品的话,由于他是OpenNI官方相容的硬体,所以理论上直接把Xtion Pro接到USB上,就可以抓到驱动程式并且使用了!在安装完驱动程式后,在装置管理员里面,应该可以看到「PrimeSense」的类别下,有一个「PrimeSense PS1080」(如右图),这就代表有这却抓到硬体了!
而如果系统没有自动抓到驱动程式、而需要手动指定驱动程式所在位置的话,OpenNI所提供的驱动程式预设是会在「C:\Program Files\OpenNI\Driver」,理论上应该只要指定这个资料夹,Windows就可以找到对应的驱动程式了。
不过如果是使用Microsoft Kinect for Xbox 360的话,官方的驱动程式并不能直接支援,还需要另外去安装修改过的驱动程式!目前一般都是使用avin2这位网友所修改出来的「SensorKinect」模组,他的网页是:
https://github.com/avin2/SensorKinect
在这个页面里面,点选「Bin」后,就可以看到已经编译、封包完成的SensorKinect硬体模组的安装档(页面);而如果是一般使用的32位元的话,就是点选「SensorKinect091 -Bin-Win32-v 5.1.0.25 .msi」进入页面下载,64为原则就是点选「SensorKinect091 -Bin-Win64-v 5.1.0.25 .msi」(一样,版本编号可能会变化)来下载。
不过不熟系github的人可能点进去了也不知道要怎么下载,所以这边再补充一下,在github进入单一档案的页面后,在右下方会有「RAW」和「History」两个按钮,这时候只要按下「RAW」就可以下载档案了!(下图红色圈的部分)
而下载后,执行下载完成的安装档,就可以安装Kinect 专用的OpenNI 硬体模组以及驱动程式了。不过要注意的是,由于硬体模组需要有OpenNI 的平台才能安装,所以请先安装好OpenNI 的环境再来安装SensorKinect,这样才不会出问题。
都装好后,接上Kinect 后,理论上就会抓到三个硬体;在装置管理员里,在「PrimeSense」的类别下,会有三个装置:「Kinect Audio」、「Kinect Camera」、 「Kinect Motor」。如果都有抓到的话,就代表硬体都安装成功了。
而如果没有自动找到驱动程式的话,可以手动去指定驱动程式所在的路径,预设是会在:「C:\Program Files\PrimeSense\SensorKinect\Driver」。
不过另外要注意的是,目前SensorKinect应该无法使用在新的Kinect for Windows硬体上的,可能要等新版的驱动程式会不会对此做修改了。
理论上,OpenNI 环境装好、硬体也抓到了,要使用OpenNI 感应器的环境应该就已经就绪了~而接下来,就是要执行OpenNI 的程式、来做测试了!如果是安装「Development edition」的话,在程式集里面应该可以找到一个「NiViewer」的官方范例,可以用来做测试之用。
他执行起来应该会是全萤幕、像下面这样子:
左上方黄色的部分就是深度影像、右上方就是彩色影像了。基本的操作,包括了:按「Esc」可以离开程式、「f」可以在全萤幕和视窗模式间做切换,滑鼠右键可以叫出进一步控制的选单。
如果是安装「Redist edition」的话,则没有这个官方范例可以做测试,所以就只能看要用什么程式,直接拿它来做测试了。
如果无法正常使用的话,可能要注意的有几点:
OpenNI 程式的架构应该会呼叫一个XnSensorServer 的程序,并且透过电脑内部的连线来取得装置的资料;所以如果有安装软体防火墙的话,可能要注意一下相关的设定,以避免因为内部的连线被防火墙挡掉,而无法正常使用。
Microsoft Kinect for Xbox 360 基本上比较挑USB port,所以有可能会差上去没反应、或无法正常使用;如果遇到不明问题,建议先换接到别的USB Port 上试试看。同时,也建议不要透过USB Hub、而是直接接到主机板的USB port 上。
官方的硬体模组/驱动程式可以和avin2 的SensorKinect 同时安装不会有问题,但是ASUS Xtion Pro 和Kinect for Xbox 360 无法同时使用,驱动程式会冲突,后面接上去的装置会错误。
NiViewer 等官方范例基本上都是用OpenGL 来做显示的,如果显示卡驱动程式没有正确安装的话,可能会无法正确显示;如果遇到城市可以执行,但是没有正确的画面的话,建议检查一下显示卡驱动程式是否有正确安装。
如果是Direct 3D的程式、遇到缺少d3d9_24 dll这类的档案的话,请至微软网站下载Direct X线上安装程式进行更新。
前面基本上是先根据下载、安装的部分,直接做说明;接下来,来讲一些细节的部分。
首先,OpenNI的环境主要包括三个部分:OpenNI本身的框架、分析演算法的Middleware、以及硬体模组;基本上,应该是这三种东西都安装好了,才算把整个OpenNI环境建立完成。下方就是这三者的简易说明:
OpenNI 本身的框架由OpenNI.org提供的OpenSource软体,可以在github上找到他的原始码(连结);不过对一般人来说,应该都是下载OpenNI.org提供、已经编译好的binary就可以了。他基本上是OpenNI的平台,所有程式都是透过这个框架、来对装置、middleware做存取、控制的。
要注意的是,安装的时候,OpenNI一定是要最先安装、最晚移除的,这样才能新增、移除其他的middleware和硬体模组。另外实际上,安装OpenNI的同时应该就已经安装了公版的驱动程式了。
OpenNI 的框架本身算是空的,像是人体骨架分析、手势辨识等这些功能都只有设计一个介面在那、并没有实作;而要真的能用这些分析功能,就必须要额外安装这些演算法的Middleware。
目前基本上都是安装PrimeSense所提供的NITE,他里面包含了目前所需要的各种分析的演算法,不过他不是OpenSource的,所以没有原始码可以看、只能下载编译好的binary。如果之后有其他的Middleware的话,也可以安装其他Middleware来使用。
对应不同的OpenNI 相容硬体所需要的模组,要有安装这个模组,OpenNI 才能对对应的硬体进行控制。
目前的硬体不管是Microsoft Kinect还是Asus的Xtion Pro系列,都是使用PrimeSense的感应器;而PrimeSense官方有针对由自家的感应器放出公版的驱动程式及OpenNI硬体模组的原始码(连结)。
和OpenNI一样,一般人应该都不需要去使用原始码,而可以直接使用官方提供、编译好的binary就可以了。不过要注意的是,公版驱动程式和感应器模组并不适用于Microsoft Kinect!如果要使用Microsoft Kinect的话,是需要使用修改过的版本的。
而在前面「Windows环境安装OpenNI」的部分所使用的「OpenNI Package」的安装档,实际上是把这三样东西都包在一起,方便使用者安装而已~在早期,其实都是要分别下载安装的。实际上,目前官方下载页面里,也都还有提供原始码下载(页面)、以及上述三者的档案各自下载的功能。
在下载页面里,「Select downloads option」下面有三个下拉选单,第一层选单就是用来选要下载哪类的东西的,它包含了五种选项:
前面在这边所选的,就是整个包装好的「OpenNI Package」;而要独立下载的话,则就是前面三项了!至于最后一项「ONI files」,则是提供了官方录好的深度、彩色资料,算是用来做测试资料用的,基本上一般都用不到。
而在这边选取前四项的话,第二层的选单都会出现「stable」和「unstable」的选项。 Stable是稳定版、通常版本比较旧、但是经过比较多的测试、会比较稳;unstable是不稳定的版本,但是会比较新、功能可能比较多。某方面来说,可以把stable版看成正式版、把unstable版看成测试(Beta)版,这样应该比较容易理解。至于要用stable版还是unstable版?就看需求了。以开发来说,Heresy会建议用最新的unstable版就是了。(不过像在这个时间点,其实两者的版本是相同的)
接下来,最后一层会列出来不同平台、不同版本的档案,这时候就是要针对自己的平台和需求做选取了。在这边,他主要会有不同作业系统,包含是哪种作业系统、32 / 64位元的版本。一般使用者基本上都是使用「for Windows」、「32-bit」的版本,应该就都可以了~
不过这边要注意的是,个别下载安装档的话, 64位元的版本并不会像Packages的版本一样、直接包含32位元的版本,所以如果是要同时安装32位元和64位元的版本,是需要两者个别安装的。
而「Development Edition」和「Redist Edition」之间的选择,前者就是「程式开发版」,后者则是「可转发套件版」(Redistributable),则是如同在「Windows环境安装OpenNI」所说的,是要开发程式的人再选择「Development Edition」应该就可以了。不过要注意的是,「Redist Edition」里面不包含任何OpenNI的程式,所以也没有办法使用官方范例(NiViewer)来进行测试。