2009-03-19 10 views
18

En un entorno multitáctil, ¿cómo funciona el reconocimiento de gestos? ¿Qué métodos matemáticos o algoritmos se utilizan para reconocer o rechazar datos para posibles gestos?¿Cómo funciona el reconocimiento de gestos?

He creado unos guantes de retro-reflectantes y una gran variedad IR LED, junto con un control remoto Wii. El control remoto Wii realiza detección interna de blobs y rastrea 4 puntos de luz IR y transmite esta información a mi computadora a través de un dongle bluetooth.

Esto se basa apagado Johnny Chung Lee's Wii Research. Mi configuración exacta es exactamente igual a la de los estudiantes de posgrado de los Países Bajos que muestran here. Puedo rastrear fácilmente las posiciones de 4 puntos en el espacio 2d y escribí mi software básico para recibir y visualizar estos puntos.

alt text http://i40.tinypic.com/x517yg.pngalt text http://i42.tinypic.com/nao9x.pngalt text http://i43.tinypic.com/65d1zp.png

Los estudiantes Países Bajos han recibido una gran cantidad de funcionalidades de su reconocimiento básico pizca clic. Me gustaría dar un paso más si pudiera, e implementar algunos otros gestos.

¿Cómo se suele implementar el reconocimiento de gestos? Más allá de lo trivial, ¿cómo podría escribir software para reconocer e identificar una variedad de gestos: varios golpes, movimientos circulares, carta de trazado, etc.

Respuesta

11

reconocimiento de gestos, ya que he visto de todos modos, por lo general se implementa usando la máquina de aprendizaje técnicas similares al software de reconocimiento de imágenes. Here's a cool project on codeproject about doing mouse gesture recognition in c#. Estoy seguro de que los conceptos son bastante similares ya que es probable que puedas reducir el problema al espacio 2D. Si obtienes algo que funcione con esto, me encantaría verlo. ¡Gran idea de proyecto!

+0

@ascalonx, gracias por el link! Estoy seguro de que será útil. – mmcdole

+0

Mouse Gesture Recognition en ActionScript: http://www.bytearray.org/?p=91 –

8

Una forma de verlo es como un problema de compresión/reconocimiento. Básicamente, desea tomar un montón de datos, desechar la mayor parte y categorizar el resto. Si yo estuviera haciendo esto (desde cero) Me gustaría probablemente proceda del siguiente modo:

  • trabajo con una ventana de historial de rodadura
  • toman el centro de gravedad de los cuatro puntos de la trama de inicio, guardarlo, y restarlo de todas las posiciones en todos los marcos.
  • factoriza cada cuadro en dos componentes: la forma de la constelación y el movimiento de su CofG en relación con el último cuadro.
  • guardar el CofG absoluta para el último cuadro demasiado
  • la serie de cambios que da CofG desliza, olas, etc.
  • la serie de morphing constelación que da pellizcos, etc.

Después de ver su foto (dos puntos en cada mano, no cuatro puntos en uno, doh!) Me modificar el anterior como sigue:

  • hacer el cálculo CofG en parejas, con las salvedades de que:
    • Si hay cuatro puntos visibles, los pares se eligen para minimizar el producto de la intrapair
    • distancias
    • Si hay tres puntos visibles, los dos son un par más cercano, el otro es el otro
    • utilizar marcos anteriores/siguientes para anular cuando sea necesario
  • En lugar de una constelación, tiene una estructura anidada de pares de distancia/orientación (es decir, una D/O entre las manos y una más para cada mano).
  • Pase los datos completos reducidos a los reconocedores para cada gesto, y permita que resuelvan lo que les importa.
  • Si desea obtener lindo, hacer un poco de DSL para reconocer los patrones, y escribir cosas como:

    fire when 
        in frame.final: rectangle(points) 
        and 
        over frames.final(5): points.all (p => p.jerk) 
    

    o

    fire when 
        over frames.final(3): hands.all (h => h.click) 
    
+0

@MarkusQ, gracias por los comentarios.Solo como referencia, el algoritmo de clic de los estudiantes de Holanda funciona de la siguiente manera: si el wiimote pierde la pista de un punto y el otro punto de su par estaba dentro de un umbral de cercanía, entonces es un "clic". – mmcdole

+0

A medida que los dedos se unen, el wiimote verá los dos dedos como una burbuja y no dos más. Entonces pierde uno de sus puntos. Esto también puede suceder cuando sus manos ya no son visibles, por lo que el umbral de cercanía se usa para evitar falsos positivos. – mmcdole

0

no soy muy versado en este tipo de matemáticas, pero he leído en algún lugar que las personas a veces usan Markov Chains o Hidden Markov Models para hacer un Reconocimiento de gestos.

Quizás alguien con un poco más de experiencia en este lado de la informática pueda iluminarlo aún más y proporcionar más detalles.

0

Err .. He estado trabajando en el reconocimiento de gestos durante el último año más o menos ahora, pero no quiero decir demasiado porque estoy intentando patentar mi tecnología :) Pero ... nos ' he tenido algo de suerte con el refuerzo adaptativo, aunque lo que estás haciendo tiene un aspecto fundamentalmente diferente. Solo tienes 4 puntos de datos para procesar, así que no creo que realmente necesites "reducir" nada.

Lo que investigaría es cómo los programas como Flash convierten un círculo dibujado a mano alzada en un círculo real. Parece que puedes rastrear los puntos por una duración de alrededor de un segundo, y luego "suavizar" el camino de alguna manera, y entonces probablemente puedas salirte con la suya al codificar tus gestos (si los haces lo suficientemente simples). De lo contrario, sí, vas a querer utilizar un algoritmo de aprendizaje. Las redes neuronales podrían funcionar ... No sé. Simplemente lanzando ideas :) Tal vez mire cómo se hace OCR también ... o incluso Hough transforms. Me parece que esto es un problema de reconocer formas más que de reconocer gestos.

+0

Bueno, fundamentalmente, dibujar un círculo, una x, o deslizar los 4 puntos en diferentes direcciones ~ son ~ gestos. En mi mundo 2d mis gestos son formas. Sin embargo, tendré que profundizar en los algoritmos de aprendizaje. – mmcdole

+0

Bueno, sí, son * gestos *, solo quiero decir que si puedes descubrir qué forma tiene, también puedes descubrir qué gesto fue. es decir, creo que el reconocimiento de gestos es reducible al reconocimiento de formas (que puede ser un problema más fácil de resolver, menos probabilístico). – mpen

0

más simples herramientas de reconocimiento de gestos He mirado en el uso de una plantilla basada en vectores para reconocerlos. Por ejemplo, puede definir el deslizamiento hacia la derecha como "0", una marca de verificación como "-45, 45, 45", un círculo en el sentido de las agujas del reloj como "0, -45, -90, -135, 180, 135, 90, 45, 0 ", y así sucesivamente.

Cuestiones relacionadas