FTH 3 · Cuerpo completo|INEMA.CLUB-PRO

Clase 2 · 15 min

Movimiento humano como dato

Las policies de whole-body control de 2026 aprenden con horas de movimiento humano. Antes de usar esos datos, necesitas saber leerlos y saber si puedes usarlos. En esta clase abres un clip BVH, cuentas cuadros, fps y articulaciones, escribes un clip tuyo y entiendes por qué el curso no redistribuye ninguna base pública.

Comenzar la clase
Persona con traje negro de captura de movimiento y marcadores reflectantes en pose de boxeo, rodeada de cámaras en un estudio oscuro.

En esta clase vas a

  1. 1De dónde viene el movimiento humano: mocap, video y VR
  2. 2El formato BVH por dentro: esqueleto y una línea por cuadro
  3. 3AMASS, LAFAN1 y la pregunta de la licencia
  4. 4Cómo detectar un clip truncado antes de que arruine el retargeting

Objetivo: leer un clip de captura de movimiento (BVH) y decir cuadros, fps y articulaciones, sabiendo de dónde viene el dato y bajo qué licencia.

01Del movimiento de una persona a un archivo

Haz clic en cada bloque.

Haz clic en cada bloque del diagrama para ver qué hace.

El dato de movimiento es insumo de entrenamiento: la licencia y la integridad van antes que la cantidad.

02Las bases que vas a encontrar

Haz clic en cada una.

1. AMASS

Colección de muchas capturas convertidas al mismo cuerpo paramétrico (SMPL-X). Es la entrada más común de GMR y de varios trabajos de motion tracking.

Exige registro en el sitio. Los términos para un curso abierto no fueron revisados: lee antes de usar y de publicar cualquier cosa derivada.

03Descargar solo el clip de prueba de GMR y leerlo

El repositorio de GMR tiene 1,2 GB en la carpeta assets, por las mallas de los robots. El sparse-checkout descarga solo la carpeta del clip, 2,9 MB (medidos el 19/10/2026, commit bb1bbe4). El ler_clipe.py no usa ninguna biblioteca extra: lee el texto del BVH.

Terminal · clip de GMR
F=${FTH:-$HOME/fth}; cd $F
[ -d GMR ] || git clone -q --filter=blob:none --sparse https://github.com/YanjieZe/GMR
cd GMR && git sparse-checkout set assets/xsens_bvh_test
git checkout -q bb1bbe4 && git log -1 --format='GMR %h (%ad)' --date=short
cd $F/corpo-inteiro && . $F/.venv/bin/activate
python3 kit/ler_clipe.py $F/GMR/assets/xsens_bvh_test/251021_04_boxing_120Hz_cm_3DsMax.bvh; echo "saída: $?"
Fragmento del BVH (encabezado del clip de prueba de GMR)
HIERARCHY
ROOT Hips
{
 OFFSET 0.000000 0.000000 0.000000
 CHANNELS 6 Xposition Yposition Zposition Yrotation Xrotation Zrotation
 JOINT Chest
 {
  OFFSET 0.000000 10.149404 -1.127712
  CHANNELS 3 Yrotation Xrotation Zrotation
(…)
MOTION
Frames: 4249
Frame Time: 0.008333
Ejemplo del repositorio
GMR bb1bbe4 (2026-04-02)
arquivo: 251021_04_boxing_120Hz_cm_3DsMax.bvh
raiz: Hips · juntas: 23 · pontas (End Site): 5 · canais por quadro: 72
ordem de rotação: Yrotation Xrotation Zrotation · unidade provável: cm (maior OFFSET 43.3)
quadros: 4249 · fps: 120 · duração: 35.4 s
linhas de movimento conferidas: 4249/4249
saída: 0

23 articulaciones con 3 canales de rotación y la raíz con 3 de posición más: 72 números por cuadro. Frame Time de 0,008333 s = 120 cuadros por segundo.

04Un BVH tuyo, hecho desde cero

Cinco articulaciones (cadera, columna, cabeza, brazo y antebrazo derechos), 60 cuadros a 30 Hz: el brazo sube en 0,5 s y el antebrazo saluda.

Terminal · generar y leer aceno.bvh
F=${FTH:-$HOME/fth}; cd $F/corpo-inteiro && . $F/.venv/bin/activate
python3 kit/bvh_minimo.py && python3 kit/ler_clipe.py $F/movimentos/aceno.bvh; echo "saída: $?"
Ejemplo del repositorio
gravado: ~/fth/movimentos/aceno.bvh (60 quadros a 30 Hz)
arquivo: aceno.bvh
raiz: Hips · juntas: 5 · pontas (End Site): 2 · canais por quadro: 18
ordem de rotação: Zrotation Xrotation Yrotation · unidade provável: cm (maior OFFSET 30.0)
quadros: 60 · fps: 30 · duração: 2.0 s
linhas de movimento conferidas: 60/60
saída: 0

3 canales por articulación + 3 de posición de la raíz = 18. La misma lectura sirve para cualquier BVH.

05Práctica

Leer, comprobar y decidir si se puede usar.

E1 · Leer el clip de GMR

5 min

Ejecuta el bloque del clip y anota cuadros, fps y duración.

Listo cuando: python3 kit/ler_clipe.py ~/fth/GMR/assets/xsens_bvh_test/251021_04_boxing_120Hz_cm_3DsMax.bvh | tail -1 → linhas de movimento conferidas: 4249/4249.

E2 · Tu saludo más lento

5 min

Genera el saludo con 90 cuadros a 30 Hz y léelo de nuevo.

Listo cuando: python3 kit/bvh_minimo.py --quadros 90 && python3 kit/ler_clipe.py ~/fth/movimentos/aceno.bvh | grep quadros → quadros: 90 · fps: 30 · duração: 3.0 s.

E3 · Ficha de licencia

10 min

Para un clip que quieras usar (AMASS, LAFAN1 u otro), escribe en ~/fth/movimentos/licenca.md tres líneas: Fonte, Licença (con el enlace) y Pode redistribuir.

Listo cuando: grep -c -E "^(Fonte|Licença|Pode redistribuir):" ~/fth/movimentos/licenca.md → 3.

06Prueba de la clase

La explicación aparece después de tu respuesta.

Pregunta 1 de 3

El encabezado dice Frames: 4249 y Frame Time: 0.008333. ¿Cuánto dura el clip?competencia

07En tres frases

FormatoBVH = esqueleto + un cuadro por línea; cuadros, fps y canales salen del texto.
LicenciaSin términos claros, no redistribuyas: usa datos tuyos o los que vienen con licencia.
IntegridadComprueba cuadros × líneas antes de cualquier retargeting.

Para ir más allá

Clase anteriorSiguiente clase