Не удивительно что контроллер стал объектом пристального внимания энтузиастов, решивших использовать сенсор не по инструкциям в руководстве пользователя. Это привело к появлению большого числа различных «хаков», использующих возможности устройства на других платформах при помощи одного из наборов open-source драйверов. Оценив работу энтузиастов и перспективность этого направления, Microsoft решает добавить официальную поддержку работы Kinect с Windows 7 и 16 июня 2011 года выпускает бета-версию SDK, позволяющего .NET разработчикам использовать устройство в своих некоммерческих приложениях на С++/CLI, C# или Visual Basic .NET.
Написано множество обзоров самого контроллера, я постараюсь кратко рассказать о самом интересном. Итак, Kinect это чрезмерно глянцевый (спасибо дизайнерам Xbox) сенсор, объединяющий (слева направо) инфракрасный лазерный проектор, RGB камеру и монохромный CMOS-сенсор. Кроме того, в устройство встроен массив из четырёх микрофонов, а также сервопривод, позволяющий программно (не пытайтесь повернуть руками!) управлять наклоном сенсора по вертикали в пределах от -27 до 27 градусов относительно горизонтально расположенного основания (при этом если поставить сам контроллер под наклоном, значению 0 всё равно будет соответствовать горизонтальное положение сенсора — в Kinect встроен акселерометр). Кстати, активно пользоваться этой фичей не рекоммендуется и благодаря ifixit.com мы можем узнать почему:
Как же Kinect определяет человека и получает положение его тела? Это весело — инфракрасный лазерный проектор излучает большое количество невидимых глазу точек, которые покрывают всё что находится в зоне видимости контроллера. При съёмке камерой с режимом ночного видения это выглядит так:
Ещё более интересное видео, снятое на веб-камеру без инфракрасного фильтра:
Вторым важным элементом технологии является CMOS-сенсор (он справа), который как раз и умеет снимать эти самые точки, получая тем самым информацию о глубине кадра. Именно здесь кроется один неприятный момент, заложенный в конструкцию Kinect — «излучатель» и «приёмник» разнесены на 7.5 см друг от друга, из-за чего «приёмник» может видеть зоны, перекрытые неким объектом с позиции «излучателя». Не знаю насколько возможно было конструктивно расположить эти элементы ближе, но в зависимости от ракурса эти «мёртвые зоны» могут довольно ощутимо проявляться на снимке глубины:
При инициализации контроллера в соответствующем режиме, в снимок глубины добавляется дополнительная информация от системы отслеживания скелета, указывающей определён ли в данном пикселе один из шести возможных одновременно обрабатываемых людей. Отслеживание выполняется при помощи вычислительной мощности компьютера, управляемой используемыми драйверами устройства. В одном из «хаков», основанном на open-source драйверах, демонстрировалось распознавание рук. Как мне кажется, принцип выполняемой на этом этапе работы для простоты понимания можно сопоставить с распознаванием документов в ABBYY FineReader :)
Само строение скелета мне кажется странноватым, хотя наверное это обусловлено алгоритмом его определения.
Ну и в завершение первой статьи хочется отметить ещё несколько особенностей:
- Для корректной работы Kinect действительно требуется довольно много свободного места — 2-3 метра от устройства с возможностью помахать руками и ногами.
- Контроллер довольно требователен к размещению, экран монитора или телевизора должен быть ориентирован так же.
- Бета SDK правильно определяет скелеты людей, стоящих лицом к устройству (±35 градусов).
- При перекрытии части тела другой частью тела или каким-то предметом драйвер пытается додумать положение неопределённых джоинтов (и получается у него плохо, но это можно отлавливать).
- Несмотря на возможность некоторого сглаживания результата, крайние джоинты конечностей в моих тестах постоянно дёргались.
Продолжение:
Kinect и XNA: дополнение к обзоруKinect и XNA: установка SDK BETA
Kinect и XNA: первая кровь
Жду ваших отзывов и замечаний в комментариях и на сайте xnadev.ru
Комментариев нет:
Отправить комментарий