Как сделать распознавание жестов с помощью акселерометров

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

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

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

4 ответов


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

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

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

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

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


поскольку никто, похоже, не упомянул существующие библиотеки, как это было запрошено 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

EDIT: ОП упомянул в одном из комментариев, что он завершил свой проект с точностью 90% в поле и субмиллисекундным вычислительным временем, используя вариант 1$распознаватель. Он также упоминает, что ротация не была критерием в его проекте.


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

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


добавление к точке moonshadow о необходимости сброса базовой линии для гравитации и вращения...

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