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

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

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

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




    Требования


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

    Про процесс


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



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

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



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

    Что ещё?


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

    P.S. Вопросы, в том числе по работе с сенсором, — приветствуются
    Redmadrobot
    104.95
    №1 в разработке цифровых решений для бизнеса
    Share post

    Comments 11

      0
      Исходниками поделитесь?
        +1
        Давайте я всё сразу здесь и проясню)
        Пока в планах есть еще некоторые моменты, которые хочется доработать, дописать, добавить пару нужных фич. Поэтому сейчас выкладывать всё совсем в открытую не хочется.

        Но! Напишите мне в личку, расскажите, кто вы и зачем вам это нужно — если всё хорошо, код я вам вышлю, никаких проблем.)
        0
        Очень интересуюсь наработками Kinect. В идеале хотелось бы заменить телевизор панелью с Kinect и управлять полностью руками без всяких лентяек.
        1. Хотел бы в первую очередь узнать у вас — планируете ли развить и выпустить подобное приложение для широких масс?
        2. Я вижу у вас в ролике небольшой компьютер слева от телевизора, похожий на mac mini. Меня не подводит зрение?
          +2
          1. Развивать — планируем однозначно! Тут еще поле непаханое идей, и все хочется сделать)
          С управлением телевизором все не так просто на данный момент, потому что официальный SDK не позволяет трекать сидячих пользователей, а у openNI свои косяки.
          Еще нужно учитывать, что пока продавать пользовательские приложения с использованием Microsoft SDK нельзя (выставочные и демонстрационные — можно). Но это должно уже в начале следующего года измениться.

          2. Это эппловский wifi роутер. Впрочем, наша штука крутится и на mac mini, но только под windows 7
          +2
          Задолбаешься так руками махать :)
          После перехода на такой интерфейс управления все постоянно зависающие у компа люди (программисты, админы, геймеры, etc) станут качками…
            +2
            Ну это как раз-таки плюс!

            А вы еще подумайте про ситуации, когда пользователю руками нельзя компьютер трогать — ну например в тюрьме перед камерами такие штуки поставить, перед решетками))
              0
              А кто ж спорит )) Интерфейс управления просто суперский, прям как в фильме «Особое мнение», когда Том Круз жестами компом управлял.
                +8
                Я представил другую ситуацию. Офис. Работники вяло сидят за мониторами, читают новости. Тут заходит начальство и все начинают судорожно махать руками ) Вот потеха будет )
              +1
              Я увидел только грудь. А куда надо было смотреть?
                0
                Да, подборка картинок замечательная (=
                  0
                  На то, каким образом с ней обращаются!

                Only users with full accounts can post comments. Log in, please.