我正在研究一个合适的(或至少是直接的堆栈),最终通过OSX平台上的python api从kinect获取骨架信息。我发现的大部分信息都非常分散和断开。
虽然看起来非常明显的是基于Windows的堆栈在他们的kinect SDK之上是微软自己的pykinect,但我似乎无法弄清楚在OSX环境中哪些方法有效。
以下是我目前编制的信息:
我得出结论,这是迄今为止最推荐的堆栈。我想要实现的是简单的骨架数据,类似于windows SDK python包装器为您提供的开箱即用。最后,我将在基于PyQt的应用程序中使用它来绘制显示,然后在Maya中应用数据。
我的问题分为两部分,如果最合适,我会接受任何一个方向的答案......
为PyOpenNI构建问题
到目前为止,我无法在OSX Snow Leopard(10.6.8)或Lion(10.7.4)上成功构建PyOpenNI。两个系统都更新了xcode。我注意到源文件是硬编码的,期望python2.7,所以在雪豹上我必须确保它已经安装并且是默认版本(也试过了virtualenv)。
在Snow Leopard上,我看到cmake进程找到了不同的libs,header,bin for python,最终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
是否有任何特定的步骤在我缺少的OSX上构建它,比如环境变量以确保它指向正确的python2.7库?有没有人有这个平台的成功构建过程?
替代问题
这仍然是OSX最推荐的堆栈吗?
跟进
我已经接受了我自己的答案作为临时工作解决方案。如果有人可以提供更好的,我会很乐意接受它!
答案 0 :(得分:3)
更新
在我提交的补丁(information here)之后,此过程的一部分是不必要的。从那时起,我还写了一篇关于在OSX上安装整个堆栈的更详细的博文:Getting Started With Xbox360 Kinect On OSX
在对此进行了一些攻击后,我发现了一个有效的修复方法(虽然它没有解决构建级别的问题)。 cmake存在一个问题,除了系统框架之外它没有正确检测其他python框架(导致python二进制文件和libs之间的不匹配)。
我首先通过自制软件重新安装了我的python2.7安装,添加了--framework标志
在构建模块之后,我注意到通过otool它仍然链接到我的系统python,并且Lion上的系统python是胖i386和x86_64。我还注意到链接到openni.so的libboost(通过自制软件安装的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而不会出现任何错误。
以下是变通方法的摘要:
export CPPFLAGS="-arch x86_64"
理想情况下,有人会发布一个更好的答案,而不是显示如何在构建阶段使用环境变量修复此问题,而不必在结束时进行重新链接修复。