сборка PyOpenNI на OSX

Я изучаю подходящий (или, по крайней мере, простой стек) для получения информации о скелете от kinect через API-интерфейс python на платформе OSX. Большая часть информации, которую я нахожу, довольно разбросана и разрознена.

Хотя кажется совершенно очевидным, что стек на основе Windows будет собственным pykinect от Microsoft поверх их kinect SDK, я не могу понять, что хорошо работает в среде OSX.

Вот информация, которую я собрал до сих пор:

  • libfreenect — очевидный источник низкоуровневых драйверов (эта часть работает нормально)
  • OpenNI предлагает платформу + промежуточное ПО NITE для обеспечения распознавания. (не питон)
  • PyOpenNI — привязки python для OpenNI с поддержкой скелета и другими расширенными функциями.

Я пришел к выводу, что это наиболее рекомендуемый стек на сегодняшний день. Чего я хотел бы добиться, так это простых данных скелета, подобных тому, что предоставляет вам оболочка Windows SDK python из коробки. В конечном итоге я буду использовать это в приложении на основе PyQt для рисования дисплея, а затем в Maya для применения данных.

Мой вопрос состоит из двух частей, и я бы принял ответ в любом направлении, если бы он был наиболее подходящим...

Проблемы сборки для PyOpenNI

До сих пор мне не удалось успешно собрать PyOpenNI ни на OSX Snow Leopard (10.6.8), ни на Lion (10.7.4). Обе системы обновили xcode. Я заметил, что исходные файлы жестко закодированы, чтобы ожидать python2.7, поэтому на снежном барсе мне пришлось убедиться, что он установлен и версия по умолчанию (также пробовал virtualenv).

В Snow Leopard я видел, как процесс cmake находил разные библиотеки, заголовки, bin для 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?

Продолжение

Я принял свой собственный ответ как временное рабочее решение. Если кто-то может предоставить лучший, я с радостью приму его!


person jdi    schedule 26.05.2012    source источник


Ответы (1)


Обновить

Часть этого процесса не требуется после того, как я отправил исправление (информация здесь). С тех пор я также написал более подробный пост в блоге об установке всего стека на OSX: Начало работы с Xbox360 Kinect на OSX


Немного поработав над этим, я нашел работающее исправление (хотя оно не решает проблему на уровне сборки). Существует проблема с cmake, из-за которой он неправильно определяет другие фреймворки python, кроме системного фреймворка (что вызывает несоответствие между бинарным файлом python и библиотеками).

Сначала я переустановил свою установку python2.7 через homebrew, добавив флаг --framework

После сборки модуля через otool я заметил, что он по-прежнему линкуется с моим системным питоном, а системный питон на Lion — жирный i386 и x86_64. Я также заметил, что libboost (буст, установленный через доморощенный), который был связан с 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 \
    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 и делайте шаги как обычно
  5. повторно связать openni.so с 64-битным python

В идеале кто-то должен опубликовать лучший ответ, чем этот, показывающий, как исправить это на этапе сборки с переменными среды, и не нужно делать исправление повторной ссылки в конце.

person jdi    schedule 27.05.2012
comment
Верны ли возвращенные данные скелета? Я не тестировал это много. - person Alba Mendez; 31.05.2012
comment
@jmendeth: Честно говоря, это было только то, что было скомпилировано. Я пришел на работу на этой неделе, чтобы начать работу, используя эту недавно обнаруженную информацию, и мой kinect теперь только мигает зеленым и показывает обнаруженный двигатель NUI. Без камеры и звука. Пытаюсь решить эту проблему уже 2 дня (на моем ящике со снежным барсом). Хотел бы я выяснить, где найти непосредственную поддержку сообщества. Я даже не смог начать пользоваться библиотекой. glview (freenect) говорит, что устройства не обнаружены. - person jdi; 31.05.2012
comment
Думал, что просто изменю эту ветку комментариев. С момента моего последнего коммита у меня действительно все заработало с PyOpenNI, и я даже добавил некоторый код. Отлично сработало для моего проекта по вождению буровой установки в Maya. - person jdi; 15.05.2013