Descripción del Formato BVH

8 04 2010

En un post anterior ya hablé de los formatos de archivo para la captura de movimientos corporales.

En este quiero explicar uno en contrato el formato BVH (Biovision Hierarchical Data) de paso añado algo de documentación sobre él en la red ya que se usa mucho pero parece que a nadie le ha dado por documentarlo, supongo también que esto se debe a que existen multitud de editores de movimientos que dan como resultados este tipo de archivos pero realmente no tienes porqué enfrentare al código.

Bueno lo dicho, aquí expongo a modo de documentación lo que he descubierto sobre el formato BVH.



Esto es lo que contiene un archivo BVH:

HIERARCHY
ROOT hip
{
	OFFSET	0.00  0.00  0.00
	CHANNELS 6 Xposition Yposition Zposition Xrotation Zrotation Yrotation
	JOINT abdomen
	{
		OFFSET	0.000000 3.422050 0.000000
		CHANNELS 3 Xrotation Zrotation Yrotation
		JOINT chest
		{
			OFFSET	0.000000 8.486693 -0.684411
			CHANNELS 3 Xrotation Zrotation Yrotation
			JOINT neck
			{
				OFFSET	0.000000 10.266162 -0.273764
				CHANNELS 3 Xrotation Zrotation Yrotation
				JOINT head
				{
					OFFSET	0.000000 3.148285 0.000000
					CHANNELS 3 Xrotation Zrotation Yrotation
					End Site
					{
						OFFSET 0.000000 3.148289 0.000000
					}
				}
			}
			JOINT lCollar
			{
				OFFSET	3.422053 6.707223 -0.821293
				CHANNELS 3 Yrotation Zrotation Xrotation
				JOINT lShldr
				{
					OFFSET	3.285171 0.000000 0.000000
					CHANNELS 3 Zrotation Yrotation Xrotation
					JOINT lForeArm
					{
						OFFSET	10.129278 0.000000 0.000000
						CHANNELS 3 Yrotation Zrotation Xrotation
						JOINT lHand
						{
							OFFSET	8.486692 0.000000 0.000000
							CHANNELS 3 Zrotation Yrotation Xrotation
							End Site
							{
								OFFSET 4.106464 0.000000 0.000000
							}
						}
					}
				}
			}
			JOINT rCollar
			{
				OFFSET	-3.558935 6.707223 -0.821293
				CHANNELS 3 Yrotation Zrotation Xrotation
				JOINT rShldr
				{
					OFFSET	-3.148289 0.000000 0.000000
					CHANNELS 3 Zrotation Yrotation Xrotation
					JOINT rForeArm
					{
						OFFSET	-10.266159 0.000000 0.000000
						CHANNELS 3 Yrotation Zrotation Xrotation
						JOINT rHand
						{
							OFFSET	-8.349810 0.000000 0.000000
							CHANNELS 3 Zrotation Yrotation Xrotation
							End Site
							{
								OFFSET -4.106464 0.000000 0.000000
							}
						}
					}
				}
			}
		}
	}
	JOINT lThigh
	{
		OFFSET	5.338403 -1.642589 1.368821
		CHANNELS 3 Xrotation Zrotation Yrotation
		JOINT lShin
		{
			OFFSET	-2.053232 -20.121670 0.000000
			CHANNELS 3 Xrotation Zrotation Yrotation
			JOINT lFoot
			{
				OFFSET	0.000000 -19.300380 -1.231939
				CHANNELS 3 Xrotation Yrotation Zrotation
				End Site
				{
					OFFSET 0.000000 -2.463878 4.653993
				}
			}
		}
	}
	JOINT rThigh
	{
		OFFSET	-5.338403 -1.642589 1.368821
		CHANNELS 3 Xrotation Zrotation Yrotation
		JOINT rShin
		{
			OFFSET	2.053232 -20.121670 0.000000
			CHANNELS 3 Xrotation Zrotation Yrotation
			JOINT rFoot
			{
				OFFSET	0.000000 -19.300380 -1.231939
				CHANNELS 3 Xrotation Yrotation Zrotation
				End Site
				{
					OFFSET 0.000000 -2.463878 4.653993
				}
			}
		}
	}
}
MOTION
Frames:     1
Frame Time: 0.033333
0.000000 43.528519 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

Se pueden distinguir dos partes bien diferenciadas, HIERARCHY y MOTION.

HIERARCHY
En la primera se representa la estructura del esqueleto describiendo los huesos o partes del cuerpo en una jerarquía, de este modo por ejemplo en este ejemplo podemos ver como la raíz de todas las partes del cuerpo es la cadera, y tiene como uniones hijas al abdomen y las 2 piernas, a su vez el abdomen tiene como hijo al pecho, y así sucesivamente hasta completar las partes del cuerpo que se quieran simular.

Cada una de estos huesos o partes del cuerpo vienen caracterizadas por unos parámetros.

OFFSET indica las coordenadas x, z e y donde comienza.

CHANNELS indica el numero y nombre de las variables que pueden cambiar la posición y rotación del hueso. (Solo se indica posición en la raíz, en los demás solo se indicará la rotación.

JOINT indica los huesos hijos a los que está unido y cuyo OFFSET será su límite Nota: el valor de las variables de rotación de un hueso siempre se consideran con respecto al hueso padre.


MOTION
En la segunda parte se representa el movimiento del esqueleto.
Para ello primero se indica el numero de frames (numero de movimientos a realizar), después indicamos la velocidad de esos movimientos(Frames Time).

A partir de ahí cada línea (hasta un retorno de carro explicito “/n” no de los que ocurren con el auto-formateado para que no se salga de la pantalla) representa uno de estos frames con una serie de cifras que se corresponden con las variables declaradas en la estructura del esqueleto en cada canal en el orden en el que se han declarado. De esta manera cuanto más complicado es nuestro esqueleto más cifras habrá en cada línea de movimiento.

Ejemplo de frame (aunque aparezca formateado en varias líneas en realidad solo tiene un retorno de carro al final):

0.000000 43.528519 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 60.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

Este frame solo tiene valores distintos de 0 para un par de variables,

El valor 43.528519 se corresponde con Yposicion del elemento hip, esto se traduce en que el esqueleto tiene una posición absoluta elevada, (suponiendo que en 0 está el suelo se habrá elevado la cadera que es el origen de todas las demás partes para que al estar de pie el modelo virtual los pies estén en posición 0).

Y el valor 60.00000 se corresponde con Xrotation del elemento neck (cuello), lo cual significa que el modelo está mirando hacia arriba.

Advertisement

Acciones

Información

6 respuestas

23 04 2010
mcarmen

Hola! Còmo va lo de los brazos? Ànimo, que està muy chulo!

23 04 2010
mcarmen

ah, creo que ya lo he visto màs abajo!

27 07 2010
Fernando

Hola, me gustaría saber qué otros tipos de formatos de captura de movimiento existen. Estoy por comenzar un proyecto y necesito esa información.

Gracias.

30 07 2010
yoalberto007

Puedes consultar otros formatos de captura de movimiento en este enlace:
http://en.wikipedia.org/wiki/List_of_motion_and_gesture_file_formats

31 07 2010
Fernando

Muchísimas gracias!

11 05 2011
jesus omar

Es interesante el estado del arte sobre ésta temática. actualmente estoy tratanto de desarrollar un sistema de captura de movimiento corporal con vision estereo.

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s




Seguir

Get every new post delivered to your Inbox.