Python 在OSX上构建PyOpenNI

Python 在OSX上构建PyOpenNI,python,macos,kinect,openni,Python,Macos,Kinect,Openni,我正在研究一个合适的(或者至少是简单的)堆栈,以便最终通过OSX平台上的python api从kinect获取骨架信息。我发现的大部分信息都是分散的、不连贯的 虽然基于windows的堆栈将是微软在kinect SDK之上的自己的pykinect,这似乎是非常明显的,但我似乎不知道什么在OSX环境中工作得很好 以下是我到目前为止收集的信息: 是低级别驱动程序的明显来源(此部分工作正常) 提供框架+NITE中间件以提供识别。(不是python) -支持骨架和其他高级功能的OpenNI pytho

我正在研究一个合适的(或者至少是简单的)堆栈,以便最终通过OSX平台上的python api从kinect获取骨架信息。我发现的大部分信息都是分散的、不连贯的

虽然基于windows的堆栈将是微软在kinect SDK之上的自己的pykinect,这似乎是非常明显的,但我似乎不知道什么在OSX环境中工作得很好

以下是我到目前为止收集的信息:

  • 是低级别驱动程序的明显来源(此部分工作正常)
  • 提供框架+NITE中间件以提供识别。(不是python)
  • -支持骨架和其他高级功能的OpenNI python绑定
我的结论是,这是迄今为止最推荐的堆栈。我想要实现的是简单的框架数据,类似于WindowsSDK python包装器提供的现成数据。最终,我将在基于PyQt的应用程序中使用它来绘制显示,然后在Maya中应用数据

我的问题分为两部分,如果最合适的话,我会接受任何一个方向的答案

PyOpenNI的构建问题

到目前为止,我无法在OSX雪豹(10.6.8)或Lion(10.7.4)上成功构建PyOpenNI。两个系统都更新了xcode。我注意到源文件是硬编码的,以期望python2.7,因此在snow leopard上,我必须确保它已安装并且是默认版本(还尝试了virtualenv)

在SnowLeopard上,我看到cmake进程为python找到了不同的lib、header和bin,最终make生成了一个。因此,它与“不匹配的解释器”一起崩溃

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

ImportError: dlopen(./openni.so, 2): Symbol not found: _environ
  Referenced from: /usr/local/lib/libpython2.7.dylib
  Expected in: dynamic lookup
在OSX上构建它是否有我所缺少的具体步骤,比如环境变量,以确保它指向正确的python2.7libs?是否有人拥有此平台的成功构建过程

备选问题

这仍然是OSX最推荐的堆栈吗

跟进

我已经接受了我自己的回答,认为这是一个暂时的解决办法。如果有人能提供更好的,我会欣然接受

更新

在我提交了补丁()之后,此过程的一部分是不必要的。从那以后,我还写了一篇关于在OSX上安装整个堆栈的更详细的博文:


在对这个问题进行了一点研究之后,我找到了一个可行的解决方案(尽管它没有在构建级别解决这个问题)。cmake存在一个问题,除了系统框架之外,它没有正确地检测其他python框架(这导致python二进制文件和libs之间不匹配)

我首先通过自制重新安装了python2.7,添加了--framework标志

构建模块后,我通过otool注意到它仍然链接到我的系统python,Lion上的系统python是FatI386和x86_64。我还注意到,链接到openni.so的libboost(通过homebrew安装的boost)也与系统python相链接,而不是与homebrew相链接。因此,我使用以下方法重新链接它们:

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而没有任何错误

以下是解决方法的摘要:

  • python2.7作为框架,x86_64(非fat)
  • libboost链接到正确的64位python
  • export CPPFLAGS=“-arch x86_64”
  • 像平常一样做和做步骤
  • 将openni.so重新链接到64位python

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

    返回的骨架数据正确吗?我还没有测试过这么多。@jmendeth:老实说,这只是到编译它为止。我这周来工作是为了开始,使用这个新发现的信息,我的kinect现在只会闪烁绿色,并显示检测到的NUI电机。没有摄像头或音频。已经尝试解决这个问题两天了(在我的雪豹盒子上)。希望我能找到社区对它的直接支持。我甚至还不能开始使用图书馆。glview(freenect)表示没有检测到任何设备。自上次提交以来,我本以为我会修改这个评论线程,但实际上我已经用PyOpenNI完成了所有工作,甚至提供了一些代码。我在Maya中驾驶钻机的项目进展顺利