2009-03-19 4 views
18

В среде с несколькими касаниями, как распознается распознавание жеста? Какие математические методы или алгоритмы используются для распознавания или отклонения данных для возможных жестов?Как распознается распознавание жеста?

Я создал несколько светоотражающих перчаток и инфракрасный светодиодный массив в сочетании с пультом Wii. Пульт Wii делает внутреннее обнаружение blob и отслеживает 4 точки инфракрасного света и передает эту информацию на мой компьютер через Bluetooth-ключ.

От Johnny Chung Lee's Wii Research. Моя точная настройка точно так же, как и выпускники из Нидерландов here. Я могу легко отслеживать позиции 4-х точек в 2d-пространстве, и я написал свое основное программное обеспечение для получения и визуализации этих точек.

alt text http://i40.tinypic.com/x517yg.pngalt text http://i42.tinypic.com/nao9x.pngalt text http://i43.tinypic.com/65d1zp.png

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

Как обычно распознается распознавание жестов? Помимо чего-то тривиального, как я мог написать программное обеспечение для распознавания и идентификации различных жестов: различные звуковые дорожки, круговые движения, трассировка букв и т. Д.

ответ

11

Распознавание жеста, как я его видел, в любом случае обычно осуществляется с использованием машинного обучения методы, подобные программному обеспечению распознавания изображений. Here's a cool project on codeproject about doing mouse gesture recognition in c#. Я уверен, что концепции довольно схожи, так как вы, вероятно, можете уменьшить проблему до двумерного пространства. Если у вас что-то будет с этим связано, я бы с удовольствием это увидел. Отличная идея проекта!

+0

@ascalonx, спасибо за ссылку! Я уверен, что это будет полезно. – mmcdole

+0

Распознавание распознавания мышей в ActionScript: http://www.bytearray.org/?p=91 –

8

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

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

После просмотра ваша фотография (две точки на каждую руку, а не четыре очка на одном, до!) Я бы изменить выше следующим образом:

  • ли расчет CofG на парах, с оговорками, что:
    • Если есть четыре точки видимы, пары выбираются, чтобы минимизировать продукт intrapair расстояния
    • Если имеются три точки видны, ближе всего две, одна пара, другая является другие
    • Используйте предыдущие/следующие кадры переопределить при необходимости
  • Вместо созвездия у вас есть вложенная структура пар расстояний/ориентации (т. Е. Один D/O между руками и еще один для каждой руки).
  • Передайте все уменьшенные данные распознавателям для каждого жестов и позвольте им разобраться в том, что им нужно.
  • Если вы хотите получить мило, сделать небольшой DSL распознавать шаблоны и писать такие вещи, как:

    fire when 
        in frame.final: rectangle(points) 
        and 
        over frames.final(5): points.all (p => p.jerk) 
    

    или

    fire when 
        over frames.final(3): hands.all (h => h.click) 
    
+0

@MarkusQ, спасибо за комментарии.Для справки алгоритм щелчка студентов из Нидерландов работает следующим образом: если wiimote теряет трек точки, а другая точка в его паре находится в пределах порога близости, то это «щелчок». – mmcdole

+0

Когда пальцы сойдутся вместе, wiimote увидит оба пальца как один капля, а не два. Таким образом, он теряет один из своих пунктов. Это также может случиться, когда ваши руки больше не видны, поэтому порог близости используется для предотвращения ложных срабатываний. – mmcdole

0

Я не очень хорошо сведущий в этом типе математики, но я где-то читал, что люди иногда используют Markov Chains или Hidden Markov Models, чтобы сделать распознавание жеста.

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

0

Err .. Я работаю над распознаванием жестов в течение прошедшего года или около того, но я не хочу говорить слишком много, потому что я пытаюсь запатентовать свои технологии :) Но ... мы, у вас была удача с адаптивным повышением, хотя то, что вы делаете, выглядит принципиально другим. У вас всего 4 точки данных для обработки, поэтому я не думаю, что вам действительно нужно «уменьшить» что угодно.

Что я буду исследовать, так это то, как программы, подобные Flash, превращают рисованный круг в реальный круг. Кажется, вы могли отслеживать точки в течение примерно секунды, а затем «плавно» прокладывать путь каким-то образом, а затем вы могли бы, возможно, уйти с жесткой кодировкой своих жестов (если вы сделаете их достаточно простыми). В противном случае, да, вы захотите использовать алгоритм обучения. Нейронные сети могут работать ... Я не знаю. Просто выкидывать идеи :) Возможно, посмотрите, как OCR сделано тоже ... или даже Hough transforms. Мне кажется, что это проблема распознавания фигур больше, чем распознавание жестов.

+0

Ну, в принципе, рисование круга, x или прокручивание всех 4 точек в разных направлениях ~ - это жесты. В моем 2-м мире мои жесты - это формы. Тем не менее, мне нужно будет изучить алгоритмы обучения. – mmcdole

+0

Ну, да, они * - жесты, я просто имею в виду, что, если вы можете понять, какую форму он делает, вы также можете выяснить, какой жест был. т. е. я считаю, что распознавание жеста сводится к распознаванию формы (что может быть проще решить - менее вероятностным). – mpen

0

Самые простые инструменты жест распознавания Я посмотрел на использование вектора на основе шаблона, чтобы признать их. Например, вы можете определить правильную прокрутку как «0», галочку «-45», 45, 45 », по часовой стрелке -« 0 »,« 45 »,« -90 »,« 135 »,« 180 »,« 135 »,« 90 », 0 "и т. Д.

Смежные вопросы