Strategie rozpoznawania gestów

12

Pracując z Wii często uważam, że konieczne jest rozpoznawanie prostych gestów, do tej pory mogłem głównie spojrzeć na wielkość przyspieszenia, aby rozpoznać gesty wymagane w naszych dokumentach projektowych gry, ale chciałbym stworzyć bardziej niezawodny system, który pozwala „nagrywać” przykładowe gesty i rozpoznawać złożone gesty.

Jakie strategie stosowałeś w przeszłości? Dlaczego oni pracowali? Dlaczego nie działały? Co zrobiłbyś inaczej?

jessecurry
źródło

Odpowiedzi:

5

Edycja niezmienniczości afinicznej najwyraźniej wymaga tej wersji krzywizny.
http://en.wikipedia.org/wiki/Affine_curvature#Affine_curvature
Załóżmy, że o to mi chodzi. (Chociaż normalna krzywizna, jak sądzę, jest niezmienna dla rotacji, które mogłyby być wystarczająco dobre).
Edycja dla niezmiennej w skali wersji krzywizny spójrz tutaj
/math/1329/what-is-the-form-of-curvature-that-is-invariant-under-rotations-and-uniform- Scali

Problemy z rozpoznawaniem gestów są podklasą problemów z rozpoznawaniem, a problemy z rozpoznawaniem są zasadniczo problemami z porównywaniem modeli.

Próbując dopasować swój gest do zbioru gestów, wygrywa najlepszy gest.

Nagrywam twój gest kilka razy i próbuję dopasować twoje dane treningowe do czegoś w rodzaju b-splajnu (krzywej). Prawdopodobnie chcesz, aby twoje gesty były niezmienne w celu przekształcenia afinicznego (obroty, skalowanie, translacja), więc przechowuj krzywą jako tabelę wartości krzywizny (jest mało prawdopodobne, aby miała ładnie zamkniętą formę), w przeciwieństwie do kartezjańskich współrzędnych kontroli zwrotnica.

To model gestu. Powiedzmy, że masz kilka.

Aby je porównać, zacznij od dopasowania danych wejściowych, a następnie oceń krzywiznę x liczbę razy, gdzie x daje dobry kompromis między dokładnością a wydajnością.

Teraz iteruj modele i odejmij wartości krzywizny (oceniane w tym samym punkcie wzdłuż odpowiednich krzywych pod względem długości łuku) i wyrównaj różnicę. Wynikowa wartość nazywana jest wartością resztkową. Zsumuj wszystkie resztki. Model z najmniejszymi resztkami jest najlepiej dopasowany i jest najbardziej prawdopodobnym gestem.

Porównaj moją odpowiedź z @ Olie's. Są w zasadzie takie same, chociaż wybieramy różne modele dla gestu (budowanie tabeli z podpisaną krzywizną i rejestrowanie zmiany kąta stycznej są prawie takie same, zakładam, że dane są generowane przez gładkie krzywa z szumem), główna różnica polega na tym, że @Olie obejmuje prędkość.

Wybór parametrów do uwzględnienia w modelu zależy od sytuacji i wymagań dotyczących wydajności. Pamiętaj, że dodanie parametrów do modelu zwiększa wymiar.

Jonathan Fischoff
źródło
4

W bardzo szerokim ujęciu, prawdopodobnie chcesz zdefiniować gest jako kierunek, po którym następuje [możliwie bardzo krótkie] opóźnienie, a następnie inny kierunek (i względne kąty między kierunkami itp.) Do końca.

Na przykład wykonanie litery „t” za pomocą różdżki (i nie zapominaj, że niektórzy ludzie są lewicowcami, więc twoje definicje nie powinny być zależne od ręki!) Jest pionowym szumem, krótkim opóźnieniem, zakrzywieniem odwrócenia, krótkim opóźnieniem, odwróceniem kieruje się poziomo, gwałtownie [blisko] przystanek.

Czytając gest, chcesz zobaczyć, jak ściśle odczytany wzór pasuje do opisu wzoru.

Ogólnie rzecz biorąc, możesz najpierw wyeliminować słownik definicji, eliminując oczywiste niedopasowania (te, które nawet nie zaczynają się poprawnie, lub które są zbyt długie lub zbyt krótkie), a następnie „oceniaj” gest w stosunku do pozostałych definicji. Oceń gest, oceniając każdą część pod względem tego, jak dobrze pasuje do definicji (0-100%) i RMS-ing, który (weź błędy, wyrównaj, zsumuj je, a następnie oblicz pierwiastek kwadratowy z tej sumy).

Korzystanie z RMS akcentuje duże różnice (skutkując niższym wynikiem), podczas gdy ma tendencję do połysku nad małymi różnicami (co skutkuje lepszym dopasowaniem).

Jest w tym mnóstwo materiałów - rozpoznawanie gestów Google. Nie martw się, jeśli dotyczy rysika lub innej rzeczy innej niż Wii, zasady dobrze się dostosowują.

Olie
źródło
0

Zrobiłem to tylko za pomocą myszy, ale moje rozwiązanie działało naprawdę dobrze. Stworzyłem wzór punktów łączący kropki, który reprezentuje gest - jest to kształt do narysowania. Następnie zapisałem ścieżkę kursora podczas jej przemieszczania się. Następnie przeskalowałem tę ścieżkę myszy, aby miała tę samą szerokość i wysokość co wzorzec docelowy. Przy każdej aktualizacji przechodziłem przez wszystkie punkty ścieżki kursora, upewniając się, że każdy z nich znajduje się w pewnej odległości od węzła ścieżki gestu, patrząc w kolejności na każdy punkt ścieżki gestu.

Iain
źródło
0

Nauczono mnie AI gry przez jednego z głównych programistów AiLive (jest w niektórych filmach), a krótka odpowiedź jest taka, że ​​próba rozpoznania gestów jest zbyt bolesna, aby spędzić z nią życie. Sugeruję pójście drogą oprogramowania pośredniego i zdobycie pakietu LiveMove AiLive.

cflewis
źródło