2012-05-26 49 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