Estratégias de reconhecimento de gestos

12

Trabalhando com o Wii, muitas vezes considero necessário reconhecer gestos simples, até agora pude observar principalmente a magnitude da aceleração para reconhecer os gestos solicitados em nossos documentos de design de jogos, mas gostaria de criar um sistema mais robusto que permite "gravar" exemplos de gestos e reconhecer gestos complexos.

Quais estratégias você usou no passado? Por que eles trabalharam? Por que eles não trabalharam? O que você faria de diferente?

jessecurry
fonte

Respostas:

5

Editar A invariância afim requer esta versão da curvatura aparentemente.
http://en.wikipedia.org/wiki/Affine_curvature#Affine_curvature
Suponha que é a isso que estou me referindo. (Embora a curvatura normal seja invariável a rotações que podem ser boas o suficiente).
Edite para obter uma versão invariável de escala da curvatura, veja aqui
/math/1329/what-is-the-form-of-curvature-that-is-invariant-under-rotations-and-uniform- scali

Os problemas de reconhecimento de gestos são uma subclasse de problemas de reconhecimento, e os problemas de reconhecimento são basicamente problemas de comparação de modelos.

Você está tentando encaixar o seu gesto em alguma coleção de gestos, o melhor gesto vence.

Eu gravava seu gesto várias vezes e tentava ajustar seus dados de treinamento com algo como um b-spline (uma curva). Você provavelmente deseja que seus gestos sejam invariantes a transformações afins (rotações, redimensionamento, translação), então armazene a curva como uma tabela de valores de curvatura (é improvável que tenha uma boa forma fechada), ao contrário das coordenadas cartesianas do controle pontos.

Esse é o modelo de um gesto. Digamos que você tenha vários.

Para compará-los, comece ajustando seus dados de entrada e, em seguida, avalie a curvatura x número de vezes, em que x oferece uma boa relação entre precisão e desempenho.

Agora, percorra os modelos e subtraia os valores da curvatura (avaliados no mesmo ponto ao longo das respectivas curvas em termos de comprimento do arco) e calcule a diferença. O valor resultante é chamado de residual. Resuma todos os resíduos. O modelo com os menores resíduos é o mais adequado e é o seu gesto mais provável.

Compare minha resposta com a @ Olie's. Eles são basicamente os mesmos, apesar de estarmos escolhendo modelos diferentes para o gesto (construir uma tabela da curvatura assinada e registrar a mudança no ângulo da tangente é quase o mesmo, suponho que os dados sejam gerados por um processo suave). curva com ruído), a principal diferença é que @Olie está incluindo a velocidade.

A escolha de quais parâmetros incluir em seu modelo depende da situação e dos requisitos de desempenho. Lembre-se de que a adição de parâmetros ao seu modelo aumenta a dimensão.

Jonathan Fischoff
fonte
4

Em termos muito amplos, você provavelmente deseja definir um gesto como uma direção, seguido de um atraso [possivelmente muito curto], seguido de outra direção (e os ângulos relativos entre as direções etc.) até o fim.

Por exemplo, fazer um "t" com sua varinha (e não se esqueça que algumas pessoas são canhotos, portanto suas definições não devem depender da mão!) É um swoosh vertical, pequeno atraso, curvatura reversa, curto atraso, reversão direção horizontal, parada abrupta [próxima].

Ao ler o gesto, você deseja ver a proximidade entre a leitura do padrão e a descrição do padrão.

Em termos gerais, você pode primeiro selecionar o dicionário de definição eliminando combinações óbvias (que nem sequer começam corretamente, ou que são muito longas ou muito curtas), depois "pontua" o gesto nas definições restantes. Classifique o gesto classificando cada parte quanto à qualidade da definição (0-100%) e ao RMS (que aceita os erros, ao quadrado, soma-os e, em seguida, obtém a raiz quadrada dessa soma).

O uso do RMS acentua grandes diferenças (resultando em uma pontuação mais baixa), enquanto tende a encobrir pequenas diferenças (resultando em uma melhor correspondência).

Há muito material nesse material - reconhecimento de gestos do Google. Não se preocupe, se for para uma caneta ou outra coisa que não seja do Wii, os princípios se adaptam bem.

Olie
fonte
0

Eu fiz isso apenas com o mouse, mas minha solução funcionou muito bem. Criei uma junção do padrão de pontos para representar o gesto - esta é a forma a desenhar. Então eu armazenei o caminho do cursor enquanto ele se movia. Em seguida, dimensionei esse caminho do mouse para que ele tenha a mesma largura e altura do padrão de destino. A cada atualização, percorria todos os pontos do caminho do cursor, certificando-me de que eles estavam a uma certa distância de um nó do caminho do gesto, olhando cada ponto do caminho do gesto em ordem.

Iain
fonte
0

Fui ensinado Game AI por um dos principais desenvolvedores do AiLive (ele está em alguns dos vídeos), e a resposta curta é que tentar fazer esses reconhecimentos de gestos é muito doloroso para passar a vida. Sugiro seguir a rota do middleware e obter o pacote LiveMove do AiLive.

cflewis
fonte