Jak zrobić rozpoznawanie gestów za pomocą akcelerometrów

Moim celem jest rozpoznawanie prostych gestów z akcelerometrów zamontowanych na plamce słonecznej. Gest może być tak prosty, jak obracanie urządzenia lub przesuwanie urządzenia w kilku różnych ruchach. Urządzenie ma obecnie tylko akcelerometry, ale rozważamy dodanie żyroskopów, jeśli to ułatwi / poprawi dokładność.

Czy ktoś ma zalecenia jak to zrobić? Jakieś dostępne biblioteki w Javie? Przykładowe projekty, które polecasz, sprawdzam? Papers you polecam?

The sun spot jest platformą Java, która pomaga w tworzeniu szybkich prototypów systemów. Jest programowany za pomocą Javy i może przekazywać polecenia z powrotem do stacji bazowej podłączonej do komputera. Jeśli muszę wyjaśnić, jak działa sprzęt, zostaw komentarz.

Author: smaclell, 2008-10-14

4 answers

Akcelerometry będą rejestrować stałe przyspieszenie spowodowane grawitacją, plus każde przyspieszenie, któremu urządzenie jest poddawane przez użytkownika, plus hałas.

Będziesz musiał filtrować próbki dolnoprzepustowe, aby pozbyć się jak największej ilości nieistotnych szumów. Najgorsze z szumów będzie na ogół wyższa częstotliwość niż jakiekolwiek możliwe przyspieszenie wywołane przez człowieka.

Uświadomić sobie, że gdy urządzenie nie jest przyspieszane przez użytkownika, jedyną siłą jest grawitacja, a zatem możesz wydedukować jego postawę w przestrzeni. Co więcej, gdy całkowite przyspieszenie waha się znacznie od 1g, musi to być spowodowane przez użytkownika przyspieszającego urządzenie; odejmując ostatnie znane oszacowanie grawitacji, możesz z grubsza oszacować, w jakim kierunku i o ile użytkownik przyspiesza urządzenie, a więc uzyskać dane, które możesz zacząć dopasowywać do listy znanych gestów.

Za pomocą jednego akcelerometru trójosiowego można wykryć aktualny skok i obrót, a także przyspieszenie urządzenia w linii prostej. Integracja przyspieszenia minus grawitacja da Ci oszacowanie aktualnej prędkości, ale oszacowanie szybko odejdzie od rzeczywistości z powodu hałasu; będziesz musiał dokonać założeń dotyczących zachowania użytkownika przed / między / podczas gestów i poprowadzić je przez interfejs użytkownika, aby zapewnić punkty, w których urządzenie nie jest przyspieszane i możesz zresetować swoje szacunki i niezawodnie oszacować kierunek grawitacji. Integracja ponownie znaleźć pozycję jest mało prawdopodobne, aby zapewnić użyteczne wyniki przez jakikolwiek użyteczny czas w ogóle.

Jeśli masz dwa trzyosiowe akcelerometry w pewnej odległości od siebie lub jeden i kilka żyroskopów, możesz również wykryć obrót urządzenia( porównując wektory przyspieszenia lub bezpośrednio z żyroskopów); całkowanie momentu pędu przez kilka sekund da Ci oszacowanie aktualnego odchylenia względem tego, kiedy zaczynałeś integrować, ale znowu to szybko zniknie.

 22
Author: moonshadow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-13 23:06:54

Ponieważ wydaje się, że nikt nie wspomniał o istniejących bibliotekach, zgodnie z życzeniem OP, oto idzie:

http://www.wiigee.org/

Wiigee jest otwartoźródłową implementacją opartą na Javie, przeznaczoną do dopasowywania wzorców na podstawie odczytów akcelerometru. Osiąga to za pomocą ukrytych modeli Markowa [1].

Najwyraźniej została użyta z wielkim skutkiem przez firmę Thorn Technologies, a oni wspomniali o swoich doświadczeniach tutaj : http://www.thorntech.com/2013/07/mobile-device-3d-accelerometer-based-gesture-recognition /

Alternatywnie możesz rozważyć FastDTW (https://code.google.com/p/fastdtw / ). jest mniej dokładny niż zwykły DTW[2], ale także obliczeniowo tańszy, co jest dużą sprawą, jeśli chodzi o systemy wbudowane lub urządzenia mobilne.

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

EDIT: OP wspomniał w jednym z komentarzy, że ukończył swój projekt, z 90% dokładnością w terenie i submilisekundowym czasem obliczeniowym, używając wariantu $10 . Wspomina również, że rotacja nie była kryterium w jego projekcie.

 7
Author: Abraham Philip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-05 10:08:22

To, o czym jeszcze nie wspomniano, to rzeczywiste rozpoznawanie gestów. To najtrudniejsza część. Po wyczyszczeniu danych (filtrowane, znormalizowane itp.) nadal masz większość pracy do wykonania.

Spójrz na Ukryte modele Markowa. To wydaje się być najbardziej popularne podejście, ale korzystanie z nich nie jest banalne. Zwykle jest etap wstępnego przetwarzania. Najpierw robię STFT i klastruję wynikowy wektor w słowniku, a potem przekazuję go do HMM. Zajrzyj do jahmm w google code for a java lib.

 5
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-03 18:22:04

Dodanie do punktu moonshadow o konieczności zresetowania linii bazowej dla grawitacji i obrotu...

O ile nie przewiduje się, że urządzenie będzie miało stabilne momenty odpoczynku (gdzie jedyną działającą na nie siłą jest grawitacja), aby zresetować swoją wartość początkową pomiaru, Twój system ostatecznie wytworzy odpowiednik zawrotów głowy.

 1
Author: Toybuilder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-21 22:46:25