Как сделать распознавание жестов с помощью акселерометров - PullRequest
19 голосов
/ 14 октября 2008

Моя цель - распознавать простые жесты от акселерометров, установленных на солнечном месте. Жест может быть таким же простым, как вращение устройства или перемещение устройства несколькими различными движениями. Устройство в настоящее время имеет только акселерометры, но мы рассматриваем возможность добавления гироскопов, если это сделает его более простым и точным.

У кого-нибудь есть рекомендации как это сделать? Любые доступные библиотеки на Java? Примеры проектов, которые вы рекомендуете проверить? Документы, которые вы рекомендуете?

Sun spot - это платформа Java, которая поможет вам быстро создавать прототипы систем. Он запрограммирован с использованием Java и может передавать команды обратно на базовую станцию, подключенную к компьютеру. Если мне нужно объяснить, как работает оборудование, оставьте комментарий.

Ответы [ 4 ]

22 голосов
/ 14 октября 2008

Акселерометры будут регистрировать постоянное ускорение под действием силы тяжести, плюс любое ускорение, которому устройство подвергается, плюс шум.

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

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

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

Если у вас есть два трехосных акселерометра на некотором расстоянии друг от друга или один и несколько гироскопов, вы также можете обнаружить вращение устройства (сравнивая векторы ускорения или непосредственно от гироскопов); Интегрирование углового момента за пару секунд даст вам оценку текущего рыскания относительно того, когда вы начали интегрировать, но опять-таки это быстро сместится из истинного значения.

7 голосов
/ 02 ноября 2014

Поскольку никто, по-видимому, не упомянул о существующих библиотеках, как того требует OP, то здесь:

http://www.wiigee.org/

Предназначенный для использования с Wiimote, wiigee является реализацией на основе Java с открытым исходным кодом для сопоставления с образцом на основе показаний акселерометра. Это достигается с помощью скрытых марковских моделей [1].

По всей видимости, компания Thorn Technologies с большим эффектом использовала их, и они упомянули здесь свой опыт: http://www.thorntech.com/2013/07/mobile-device-3d-accelerometer-based-gesture-recognition/

В качестве альтернативы вы могли бы рассмотреть FastDTW (https://code.google.com/p/fastdtw/). Это менее точно, чем обычное DTW [2], но также и в вычислительном отношении дешевле, что является большой проблемой, когда речь идет встроенные системы или мобильные устройства.

[1] https://en.wikipedia.org/wiki/Hidden_Markov_model
[2] https://en.wikipedia.org/wiki/Dynamic_time_warping

РЕДАКТИРОВАТЬ: ОП упомянул в одном из комментариев, что он завершил свой проект с точностью до 90% в полевых условиях и временем вычисления менее миллисекунды, используя вариант $ 1 Recognizer . Он также упоминает, что ротация не была критерием в его проекте.

5 голосов
/ 02 июля 2009

Что еще не было упомянуто, так это фактическое распознавание жестов. Это сложная часть. После того, как вы очистите свои данные (отфильтрованные нижние частоты, нормализованы и т. Д.), Вам еще предстоит проделать большую часть работы.

Посмотрите на скрытые марковские модели. Это, кажется, самый популярный подход, но их использование не тривиально. Обычно существует этап предварительной обработки. Сначала выполните STFT и кластеризуйте результирующий вектор в словарь, а затем вставьте его в HMM. Взгляните на jahmm в google-коде для java-библиотеки.

1 голос
/ 22 октября 2008

Добавление к точке лунной тени необходимости сбрасывать базовую линию для гравитации и вращения ...

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

...