Подтвердить что ты не робот

Как распознать жест, используя акселерометры

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Поскольку никто, кажется, не упомянул существующие библиотеки, по просьбе 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 Recognizer. Он также упоминает, что ротация не была критерием в его проекте.

Ответ 3

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

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

Ответ 4

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

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