Как стать автором
Обновить
68.76
red_mad_robot
№1 в разработке цифровых решений для бизнеса

Kinect ради дистанционного управления

Время на прочтение 2 мин
Количество просмотров 10K
Мы в компании Redmadrobot в перерывах между игрой в Xbox с интересом наблюдаем за тем, что уже делается и что ещё можно сделать с помощью Microsoft Kinect. Ну и свои эксперименты, разумеется, тоже проводим — об одном таком я и расскажу.

Проблема с взаимодействием

С развитием бескнопочных, беспроводных, а впоследствии и вообще бесконтактных способов взаимодействия с устройствами, интерфейсы предоставляют пользователю все меньше и меньше обратной связи: сначала его лишили прагматической уверенности в переключении переключателей, затем отобрали и без того маленький фидбэк от нажатия на кнопку, а теперь даже тактильные ощущения оходят на второй план.
Интернет постепенно начинает наполняться решениями, распознающими жесты с помощью Kinect, но почти все они не предоставляют вообще никакой информации в процессе выполнения жеста, и лишь когда действие уже завершено, отражают какую-бы то ни было реакцию на него. Именно это мы хотели исправить, и вот что получилось:




Требования


Итак, передо мной стояла задача сделать так, чтобы прямо в процессе выполнения жеста руками пользователь видел, что творит.
В выборе жестов я руководствовался теми, которые каждый из нас наблюдает в большинстве мобильных телефонов с тач-скрином: пролистывания в четырех направлениях, клик (причем все это раздельно для каждой руки), pinch-zoom. Также, конечно, есть режим курсора, когда активные элементы выбираются наведением и удержанием.

Про процесс


Вариант распознавать жест постфактум, то есть реагировать тогда, когда пользователь уже «накрутил в воздухе кружок», нам не подходит. Чтобы сделать по-другому, нужно как-то определиться с выбором момента, когда пользователь начинает выполнять жест.
Для таких целей можно использовать определенную «стартовую» позу (про детектор позы и его реализацию можно почитать), можно предварять любой жест «контрольным» (только после которого будет отслеживаться жест рукой и его прогресс), а можно выделить «активную зону» и в ней мониторить действия пользователя.
Я пошёл последним путем, и вот как эта зона схематически выглядит:



Оговорюсь, что с этим ещё можно поэкспериментировать: например, сделать сектором диска, или для каждой руки придумать свою собственную зону, а не одну общую. Главное, что эта зона «привязана» к пользователю и перемещается вместе с ним.

Мы снизили размерность и теперь, фактически, имеем дело с движением точек на плоскости. Получаем начальные координаты точки и, динамически, траекторию её движения:



Первым делом нивелируем дрожание руки и погрешность обнаружения координат сенсором — если движение происходит внутри «порога дрожания», то никак на это не реагируем, считаем, что рука не движется. При выходе точки из этой зоны определяем тип жеста по тому, в каком направлении рука смещена от центра.
Можно начинать анимацию интерфейса — мы уже знаем, что пользователь делает, и просто отслеживаем прогресс. Для pinch-жестов измеряем расстояние между руками и динамику его изменения.

Что ещё?


Мы сразу ограничили рассматриваемую область требованием определить прогресс жеста в процессе его выполнения. Но если так по этому поводу не заморачиваться, можно прикрутить и скрытые марковские модели, и засекание виртуальных сфер в пространстве, и много чего другого интересного.
Если заинтересовались, смотрите топик с инструкциями, внимайте и участвуйте в конкурсе Microsoft Research по разработке приложений для Kinect.

P.S. Вопросы, в том числе по работе с сенсором, — приветствуются
Теги:
Хабы:
+14
Комментарии 11
Комментарии Комментарии 11

Публикации

Информация

Сайт
redmadrobot.ru
Дата регистрации
Дата основания
Численность
1 001–5 000 человек
Местоположение
Россия