Стратегии распознавания жестов

12

Работая с Wii, я часто нахожу необходимым распознавать простые жесты, но до сих пор мне удавалось смотреть в основном на величину ускорения, чтобы распознавать жесты, на которые ссылаются наши документы по дизайну игр, но я хотел бы создать более надежная система, которая позволяет «записывать» примеры жестов и распознавать сложные жесты.

Какие стратегии вы использовали в прошлом? Почему они работали? Почему они не работают? Что бы вы сделали по-другому?

jessecurry
источник

Ответы:

5

Править Аффинная инвариантность, по-видимому, требует этой версии кривизны.
http://en.wikipedia.org/wiki/Affine_curvature#Affine_curvature
Предположим, это то, что я имею в виду. (Хотя нормальная кривизна, я думаю, инвариантна к поворотам, которые могут быть достаточно хорошими).
Редактировать версию кривизны в инвариантном масштабе смотрите здесь
/math/1329/what-is-the-form-of-curvature-that-is-invariant-under-rotations-and-uniform- Скали

Проблемы распознавания жестов являются подклассом проблем распознавания, а проблемы распознавания - это, в основном, проблемы сравнения моделей.

Вы пытаетесь приспособить свой жест к некоторой коллекции жестов, лучший жест побеждает.

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

Это модель жеста. Допустим, у вас есть несколько.

Чтобы сравнить их, начните с подгонки ваших входных данных, а затем оцените кривизну x количество раз, где x дает хороший компромисс между точностью и производительностью.

Теперь выполните итерацию по моделям и вычтите значения кривизны (оцениваемые в одной и той же точке вдоль соответствующих кривых с точки зрения длины дуги) и возведите в квадрат разницу. Полученное значение называется остаточным. Суммируйте все остатки. Модель с наименьшими остатками подходит лучше всего и является вашим наиболее вероятным жестом.

Сравните мой ответ с @ Olie's. Они в основном одинаковы, хотя мы выбираем разные модели для жеста (построение таблицы кривизны со знаком и запись изменения угла касательной практически одинаковы, я предполагаю, что данные генерируются сглаженным кривая с шумом, хотя), главное отличие в том, что @Olie включает скорость.

Выбор параметров для включения в модель зависит от ситуации и требований к производительности. Имейте в виду, что добавление параметров в вашу модель увеличивает размерность.

Джонатан Фишофф
источник
4

В очень общих терминах вы, вероятно, хотите определить жест как направление, за которым следует [возможно, очень короткая] задержка, за которой следует другое направление (и относительные углы между направлениями и т. Д. До конца).

Например, сделать букву «Т» с вашей палочкой (и не забывайте, что некоторые люди левши, поэтому ваши определения не должны зависеть от руки!) - это вертикальное свист, короткая задержка, изгибание разворота, короткая задержка, разворот движется в горизонтальном направлении, внезапная остановка.

Когда вы читаете жест, вы хотите увидеть, насколько близко прочитанный шаблон соответствует описанию шаблона.

В общих чертах, вы можете сначала отбросить словарь определений, устранив очевидные несоответствия (те, которые даже не начинаются правильно, или которые слишком длинные или слишком короткие), а затем «забить» жест по оставшимся определениям. Оцените жест, оценивая каждую часть относительно того, насколько хорошо он соответствует определению (0-100%) и среднеквадратическому значению (возьмите ошибки, возведите в квадрат, суммируйте их, затем возьмите квадратный корень из этой суммы.)

Использование RMS подчеркивает большие различия (что приводит к более низкому баллу), но при этом стремится скрыть небольшие различия (что приводит к лучшему соответствию).

На этом материале есть масса материала - распознавание жестов Google. Не волнуйтесь, если это для стилуса или другой вещи не Wii, принципы адаптируются хорошо.

Olie
источник
0

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

Iain
источник
0

Меня научил Game AI один из ведущих разработчиков AiLive (он есть в некоторых видео), и короткий ответ заключается в том, что пытаться распознавать жесты слишком больно, чтобы тратить на это свою жизнь. Я бы предложил пойти по пути промежуточного ПО и получить пакет LiveMove от AiLive.

cflewis
источник