Estrategias de reconocimiento de gestos

12

Al trabajar con la Wii, a menudo encuentro necesario reconocer los gestos simples, hasta ahora he podido observar principalmente la magnitud de la aceleración para reconocer los gestos solicitados en nuestros documentos de diseño del juego, pero me gustaría crear Un sistema más robusto que permite la "grabación" de gestos de ejemplo y el reconocimiento de gestos complejos.

¿Qué estrategias has usado en el pasado? ¿Por qué trabajaron ellos? ¿Por qué no funcionaron? ¿Qué harías diferente?

jessecurry
fuente

Respuestas:

5

Editar invariancia afina requiere aparentemente esta versión de curvatura.
http://en.wikipedia.org/wiki/Affine_curvature#Affine_curvature
Suponga que a eso me refiero. (Aunque creo que la curvatura normal es invariante para las rotaciones que podrían ser lo suficientemente buenas).
Edite para obtener una versión invariante de la curvatura de la escala, vea aquí
/math/1329/what-is-the-form-of-curvature-that-is-invariant-under-rotations-and-uniform- scali

Los problemas de reconocimiento de gestos son una subclase de problemas de reconocimiento, y los problemas de reconocimiento son básicamente problemas de comparación de modelos.

Si tratas de adaptar tu gesto a una colección de gestos, gana el mejor gesto.

Grabaría tu gesto varias veces y trataría de ajustar tus datos de entrenamiento con algo como una b-spline (una curva). Probablemente desee que sus gestos sean invariables para las transformaciones afines (rotaciones, escalado, traslación), por lo tanto, almacene la curva como una tabla de valores de curvatura (es poco probable que tenga una buena forma cerrada), a diferencia de las coordenadas cartesianas del control puntos.

Ese es un modelo de gesto. Digamos que tienes varios.

Para compararlos, comience ajustando sus datos de entrada y luego evalúe la curvatura x el número de veces, donde x ofrece un buen equilibrio entre precisión y rendimiento.

Ahora recorra los modelos y reste los valores de curvatura (evaluados en el mismo punto a lo largo de las curvas respectivas en términos de longitud de arco) y cuadre la diferencia. El valor que resulta se llama residual. Resume todos los residuos. El modelo con los residuos más pequeños es el que mejor se ajusta y es su gesto más probable.

Compara mi respuesta con la de @ Olie. Básicamente son lo mismo, aunque estamos eligiendo diferentes modelos para el gesto, (construir una tabla de la curvatura firmada y registrar el cambio en el ángulo de la tangente es casi la misma, supongo que los datos se generan por un suave curva con ruido), la principal diferencia es que @Olie incluye la velocidad.

Elegir qué parámetros incluir en su modelo depende de la situación y los requisitos de rendimiento. Tenga en cuenta que agregar parámetros a su modelo aumenta la dimensión.

Jonathan Fischoff
fuente
4

En términos muy generales, probablemente desee definir un gesto como una dirección, seguido de un retraso [posiblemente muy corto], seguido de otra dirección (y los ángulos relativos entre las direcciones, etc.) hasta el final.

Por ejemplo, hacer una "t" con su varita (¡y no olvide que algunas personas son zurdas, por lo que sus definiciones no deberían depender de la mano!) Es un swoosh vertical, retraso corto, curva hacia atrás, retraso corto, inversión cabeza horizontal, parada abrupta [cercana].

Mientras lee el gesto, desea ver qué tan cerca coincide la lectura del patrón con la descripción del patrón.

En términos generales, primero puede eliminar el diccionario de definiciones eliminando las coincidencias obvias (que ni siquiera comienzan correctamente, o que son demasiado largas o demasiado cortas) y luego "puntuar" el gesto con las definiciones restantes. Califique el gesto calificando cada porción en cuanto a qué tan bien coincidía con la definición (0-100%) y RMS-ing que (tome los errores, al cuadrado, sume, luego tome la raíz cuadrada de esa suma).

El uso de RMS acentúa las grandes diferencias (lo que resulta en una puntuación más baja), mientras tiende a pasar por alto las pequeñas diferencias (lo que resulta en una mejor coincidencia).

Hay un montón de material sobre estas cosas: reconocimiento de gestos de Google. No se preocupe si es para un lápiz óptico u otra cosa que no sea Wii, los principios se adaptan bien.

Olie
fuente
0

Solo hice esto con el mouse, pero mi solución funcionó muy bien. Creé un patrón de puntos de unión de puntos para representar el gesto; esta es la forma de dibujar. Luego almacené la ruta del cursor mientras se movía. A continuación, escalé esta ruta del mouse para que tenga el mismo ancho y alto que el patrón de destino. Cada actualización recorría todos los puntos de mi ruta del cursor asegurándome de que estuvieran a una cierta distancia de un nodo de ruta de gestos, mirando cada punto de ruta de gestos en orden.

Iain
fuente
0

Uno de los desarrolladores principales de AiLive me enseñó Game AI (está en algunos de los videos), y la respuesta corta es que tratar de hacer estos reconocimientos de gestos es demasiado doloroso como para pasar la vida. Sugeriría ir a la ruta del middleware y obtener la suite LiveMove de AiLive.

cflewis
fuente