jueves, 29 de octubre de 2015

Desarrollo del reto 2

Detección de posturas con ángulos:

Nuestra primera idea para detectar la postura de Karate Kid (mostrada en la Figura 2) fue utilizar álgebra vectorial básica, calculamos los vectores correspondientes a las partes del cuerpo cuyos ángulos queremos comparar, en este caso probamos a generar los vectores del muslo y la pantorrilla. La postura sería correcta cuando el ángulo de nuestra pierna estuviese entre un rango razonable de valores como 70 grados y 100.

Para calcular el vector utilizamos:

V = (Pbx - Pax, Pby - Pax) Siendo Pa y Pb puntos del espacio con sus coordenadas (x,y) correspondientes.

Usando los puntos del tobillo, rodilla y cadera obtenemos los vectores de la pantorrilla y el muslo, necesarios para saber el ángulo de la pierna  y utilizando trigonometría calculamos el ángulo que forma la pierna y después de calcularlo aplicar un margen de error para darle mayor tolerancia. El cálculo del ángulo es el siguiente:

Figura 2.
Una vez tenemos el ángulo lo único que necesitamos hacer es ponerle un umbral para que la postura no fuese exacta, que admitiese cierta tolerancia y para ello pusimos un intervalo razonable de entre [70º-100º]

Tuvimos problemas con la detección de las posturas con este método pues no detectaba los ángulos correctamente, la solución fue darle otro enfoque.
Detección de posturas con alturas de los joints:

La solución que finalmente adoptamos fué  mirar a qué altura se encuentran dos joints en cuestión, en nuestro caso nos fijaremos en el joint central de la cadera (SpineBase) y el joint de la rodilla de la pierna en cuestión.

Para ello creamos una función que detectase que la cadera y la rodilla se encontrasen alineados y devolviese true cuando este hecho se produjera con cierto grado de error introduciendo las variables max y min, de nuevo para ofrecer mayor flexibilidad a la hora de detectar que ambos joints esten a la misma altura.

Esta función recibe dos BodyPartCoords, struct que hemos creado para obtener las coordenadas (x,y) de los joints y utilizarlos más cómodamente.

Esta idea de comprobar la postura utilizando alturas de los joints la hemos sacado de un tutorial de Kinect 1 que nos guió en la implementación.  Tutorial skeletal traking.
Para finalizar este apartado cabe mencionar que la detección de alturas es la herramienta que hemos utilizado para hacer las funciones de las posturas (Pose Karate Kid con pierna izquierda primero y despues pierna derecha).

No hay comentarios:

Publicar un comentario