2012-05-26 45 views
2

我正在研究一个合适的(或者至少是直接的堆栈),以便通过OSX平台上的python api最终从kinect获取骨架信息。我发现的大部分信息都是相当分散的。在OSX上构建PyOpenNI

虽然看起来非常明显,基于Windows的堆栈将是微软自己的kinect SDK之上的pykinect,但我似乎无法弄清楚OSX环境中的工作原理。

这里是我目前所收集的信息:

  • libfreenect是低级别的驱动程序的明显的来源(这部分工作得很好)
  • OpenNI提供框架+ NITE中间件提供认可。 (不是Python)
  • PyOpenNI - 支持骨架和其他高级功能的OpenNI的python绑定。

我得出结论,这是迄今为止最推荐的堆栈。我想实现的是简单的框架数据,类似于Windows SDK python包装器为您提供的框。最终,我将在一个基于PyQt的应用程序中使用它来绘制显示,然后将其应用到Maya中以应用数据。

我的问题是两个部分,如果它是最合适的我会接受一个答案在任一方向......

建设问题的PyOpenNI

到目前为止,我已经无法在OSX Snow Leopard(10.6.8)或Lion(10.7.4)上成功构建PyOpenNI。两个系统都更新了xcode。我已经注意到,源文件被硬编码为期望python2.7,所以在雪豹我不得不确保它被安装并且默认版本(也尝试过virtualenv)。

在Snow Leopard上,我看到cmake进程为Python找到了不同的库,头文件,bin,最终make产生了一个.so,与'不匹配的解释器'崩溃。

在Lion上,我也遇到了不匹配的解释器崩溃。但经过我通过自制安装python2.7,它产生了新的错误:

ImportError: dlopen(./openni.so, 2): Symbol not found: _environ 
    Referenced from: /usr/local/lib/libpython2.7.dylib 
    Expected in: dynamic lookup 

在那里建造这个对我的思念,如环境变量以确保其指向正确的python2 OSX的任何具体步骤.7 libs?有没有人有这个平台的成功构建过程?

替代问题

这仍是OSX最值得推荐的堆栈?

跟进

我已经接受了我自己的答案是临时工作方案。如果有人能提供更好的,我会很乐意接受它!

回答

3

更新

这个过程的一部分补丁我提交(information here)后是没有必要的。从那时起,我也写了一个更详细的博客文章在OSX安装整个堆栈:Getting Started With Xbox360 Kinect On OSX


上这个有点绕黑客后,我已经找到了工作的修复(尽管它并没有解决问题在构建层面)。 cmake存在一个问题,除了系统框架(它导致python二进制文件和lib文件之间的不匹配)之外,它没有正确地检测到其他python框架。

我第一次重新安装了python2.7通过自制软件安装,在添加--framework标志

构建模块后,我通过otool注意到,它仍然链接到我的系统蟒蛇,和狮子系统蟒蛇是胖i386和x86_64。我还注意到,链接到openni.so的libboost(通过自制程序安装的boost)也链接到系统python而不是自制程序。所以我用以下来重新连接它们:

install_name_tool -change \ 
    /System/Library/Frameworks/Python.framework/Versions/2.7/Python \ 
    /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Python \ 
    openni.so 

install_name_tool -change \ 
    /System/Library/Frameworks/Python.framework/Versions/2.7/Python \ 
    /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Python \ 
    /usr/local/Cellar/boost/1.49.0/lib/libboost_python-mt.dylib 

这样做后,我能够导入openni没有任何错误。

下面是解决方法的总结:

  1. python2.7为骨架,x86_64的(不胖)
  2. libboost链接到正确的64位蟒蛇
  3. export CPPFLAGS="-arch x86_64"
  4. cmake并作出步骤like normal
  5. relink openni.so to the 64bit python

理想情况下,有人会发布比本文更好的答案,说明如何在构建阶段使用环境变量解决此问题,而不必在最后进行重新链接修复。

+0

返回的骨架数据是否正确?我没有测试过这么多。 –

+0

@jmendeth:说实话,这只是得到它编译。本周我开始工作,开始使用这个新发现的信息,现在我的kinect只闪烁绿色,并显示检测到NUI电机。没有相机或音频。一直试图解决这个问题已经有两天了(在我的雪豹盒子里)。希望我能弄清楚从哪里可以找到来自社区的直接支持。我甚至无法开始使用该库。 glview(freenect)表示没有检测到设备。 – jdi

+0

这对我有用 – Daryl