Официальный Kinect SDK против альтернатив с открытым исходным кодом
Где они отличаются?
Каковы преимущества выбора libfreenect или OpenNI+SensorKinect, например, перед официальным SDK и наоборот?
Каковы недостатки?
3 ответа
Обратите внимание, что приведенный ниже ответ относится к дате, и некоторые факты вполне могут быть устаревшими в ближайшем будущем. Текущее состояние Официального Kinect SDK - бета-версия 1.00.12.
Первое очевидное отличие состоит в том, что официальный SDK поддерживается группой Microsoft Research, в то время как OpenKinect - это SDK с открытым исходным кодом, поддерживаемый сообществом открытого исходного кода. У обоих есть свои минусы и плюсы.
- Официальный SDK разработан Microsoft, которая также разрабатывает аппаратное обеспечение и поэтому должна знать внутреннюю информацию об устройстве, которую общество с открытым исходным кодом должно реконструировать. Очевидно, что это в интересах Microsoft.
- Microsoft вкладывает много денег в это устройство, и я уверен, что они сделают то, что они считают необходимым, чтобы поддерживать SDK на должном уровне. Экономия за этим дает много преимуществ.
- С другой стороны, никогда не стоит недооценивать силу общества с открытым исходным кодом: "Сообщество OpenKinect состоит из более чем 2000 участников, которые вкладывают свое время и код в проект. Наши участники присоединились к этому проекту с целью создания наилучшего возможного набора приложений. для Kinect. OpenKinect - это настоящее сообщество с открытым исходным кодом! - http://openkinect.org/wiki/Main_Page.
- OpenKinect был выпущен задолго до официального SDK, поскольку устройство kinect было взломано в первый или второй день его выпуска. Престижность OpenKinect!
Поддерживаемые языки программирования:
- Официальный SDK: C++, C# или Visual Basic с использованием Microsoft Visual Studio 2010.
- OpenKinect: Python, C, C++, C#, Java, Lisp и многое другое! Очевидно, не требует Visual Studio.
Поддержка операционных систем:
- Официальный SDK: устанавливается только на Windows 7.
- OpenKinect: работает в Linux, OS X и Windows
Явное преимущество OpenKinect.
Лицензия:
- Официальный SDK находится в текущей бета-версии только для тестирования. SDK был разработан специально для того, чтобы поощрять широкие исследования и эксперименты со стороны академических, исследовательских и энтузиастов. коммерческие заявления не разрешены. Обратите внимание, что это, вероятно, изменится в будущих выпусках SDK. Посетите FAQ для получения дополнительной информации
- OpenKinect может быть открыт для коммерческого использования, но онлайн-источники утверждают, что это может быть не так просто. Я бы внимательно ознакомился с условиями, прежде чем выпускать какие-либо коммерческие приложения с ним. Прочтите Kinect - Лицензирование последствий открытых аппаратных проектов для получения дополнительной информации.
Документация и поддержка:
- Официальный SDK: хорошо документирован и предоставляет форум поддержки
- OpenKinect: похоже, есть список рассылки, твиттер и irc. но нет официального форума /QA? Документация на сайте не такая богатая, как хотелось бы.
Калибровка устройства:
Различные устройства Kinect могут незначительно отличаться в зависимости от партии, в которой они были произведены. Поэтому иногда требуется калибровка устройства. Но:
- Официальный SDK не предоставляет никаких настроек калибровки, но мне до сих пор не приходилось калибровать устройство, над которым я работаю. Согласно тому, что я прочитал онлайн (ссылка потеряна) во время производства, параметры калибровки записываются на устройство kinect, поэтому при официальной калибровке SDK не требуется.
- В OpenKinect есть функция калибровки устройства: http://openkinect.org/wiki/Calibration. Поэтому я считаю, что вам следует откалибровать ваше устройство, если вы пользуетесь OpenKinect.
Если это правда, что калибровка необходима только для OpenKinect, это большое преимущество для официального SDK, так как легче распространять и устанавливать приложения без такой необходимости.
Лично, после неудачной попытки с OpenKinect SDK, я пошел с официальным SDK, который
- пришли с драйверами, которые установлены из коробки
- пришли с примерами и кодом для легкого вхождения в бизнес
- В целом: я мог начать свою собственную разработку в течение 15 минут или около того.
- Теперь, после нескольких месяцев работы с Kinect, я должен сказать, что полностью удовлетворен предоставленным API. Однако я не могу сравнить его с OpenKinect SDK, так как на самом деле он никогда не работал (но, возможно, он не дал честной попытки).
ОБНОВЛЕНИЕ: С 1 февраля 2012 года существует коммерческая лицензия для официального SDK: "Коммерческая лицензия для этого выпуска разрешает разработку и распространение коммерческих приложений. Предыдущий SDK был бета-версией, и в результате подходил только для исследований, тестирования и эксперименты, и он не был пригоден для использования с конечным коммерческим продуктом. Новая лицензия позволит разработчикам создавать и продавать свои приложения Kinect для Windows конечным пользователям, использующим оборудование Kinect для Windows на платформах Windows ". Часто задаваемые вопросы разработчика
Как объяснил Avada Kedavra в своем ответе, это несколько интересных отличий:
- поддерживаемые операционные системы: вы можете использовать Microsoft SDK только в Windows, в то время как решения с открытым исходным кодом обычно могут работать в других операционных системах;
- языки программирования: у вас есть более широкий выбор с решениями с открытым исходным кодом, в то время как Microsoft поддерживает только C++ и C# (Visual Basic больше не поддерживается с SDK 2.0);
- документация и поддержка: Microsoft предлагает хороший форум и хорошо сделанную документацию (с большим количеством примеров); но есть несколько открытых решений, хорошо документированных;
- лицензия: Microsoft является менее или более проприетарной, открытый исходный код является более или менее бесплатным. Учтите также, что идеи с открытым исходным кодом иногда покупались крупными компаниями и превращались во что-то, что больше не является открытым. Вероятно, ваш случай не будет, но имейте в виду эту дополнительную возможность.
По моему личному мнению, самое существенное различие между решениями с открытым исходным кодом и Microsoft SDK строго связано с алгоритмом отслеживания скелета.
Хотя данные глубины и RGB могут эффективно предоставляться как открытыми / свободными API, так и Microsoft SDK, реализация возможностей отслеживания скелета - это не только вопрос обратного проектирования.
Чтобы реализовать такой алгоритм, разработчики должны обладать сильными знаниями в области распознавания образов и машинного обучения, и я совершенно уверен, что такие знания доступны среди сообщества открытого исходного кода. Но реализация отслеживания скелета основана на "обученном" алгоритме, который требует много экспериментов для сбора очень большого количества данных. Эти данные затем используются для "тренировки" алгоритма, который может распознавать скелетные суставы.
Получение достаточного количества данных, а также их корректировка и правильное использование требуют много времени и денег. Исследователи и разработчики Microsoft находятся в лучших условиях, чтобы работать над этим, просто потому что это их работа.
В своем предыдущем опыте я заметил, что решения с открытым исходным кодом обеспечивают хорошие возможности отслеживания скелета, но они не находятся на том же уровне, что Microsoft предлагает в своем SDK.
Помните также, что Microsoft SDK предоставляет множество дополнительных возможностей, таких как распознавание лиц или ориентация суставов, и несколько виджетов, которые очень полезны, если вы хотите быстро создать графический интерфейс пользователя с жестами.
Поэтому я предлагаю следующее: если вы работаете над проектом, в котором вам просто необходимы данные глубины и / или RGB, или если у вас есть необходимость использовать язык программирования, который не поддерживается Microsoft SDK, вам следует выбрать open исходное решение. В противном случае Microsoft SDK был бы моим лучшим выбором.
Я настоятельно рекомендую Cinder Framework. (Libcinder.org)
Он поддерживает как OpenNI, так и Kinect, если вы используете C++. Теперь он поддерживает Kinect SDK 1.7 и OpenNI 2 через следующие блоки Cinderblock:
MS Kinect SDK 1.7 (стабильный) https://github.com/BanTheRewind/Cinder-MsKinect
OpenNI 2 / NITE 2.2 (alpha) https://github.com/wieden-kennedy/Cinder-OpenNI
Оба могут выполнять отслеживание скелета вне зоны действия, OpenNI способен отслеживать до шести скелетов одновременно. OpenNI 2 быстро завоевывает Kinect, хотя новый Kinect, вероятно, изменит это, когда выйдет в следующем месяце. Однако основные базовые принципы вряд ли изменятся.
Основной недостаток первоначального выпуска OpenNI заключался в том, что для распознавания пользователя требовалась поза активации всего тела, что являлось преградой для многих приложений - однако это, похоже, было решено в более новых версиях, и OpenNI 2 также поддерживает надежное отслеживание рук с близкого расстояния, хотя изначально для этого все еще требуется жест фокусировки. Если вы работаете на Mac или Linux, это в основном ваш единственный выбор.