Ir al contenido

Cómo funciona

Cada fotograma de la cámara pasa por la misma cadena. Ninguna pieza sabe de las otras más de lo necesario, por eso cada una se puede probar y reemplazar por separado.

PoseProvidercámara · grabaciónPoseMotionSessionVisibilidad+ SetupCheckRepEngineMeasure + FormRuleMotionSnapshotestado → la pantallaMotionEventmomentos → voz, háptica

Un PoseProvider entrega un AsyncStream<Pose>. Puede ser la cámara (VisionPoseProvider), una grabación (RecordedPoseProvider) o lo que tú implementes. Cada Pose son los puntos del cuerpo de un fotograma, en píxeles y con los lados ya corregidos.

MotionSession es la puerta de entrada. Por cada pose:

  1. Visibilidad. ¿Se ven todas las articulaciones que mide el ejercicio? El cambio se confirma tras unos fotogramas seguidos (~0,25 s) para no parpadear.
  2. Ubicación. SetupCheck revisa si el paciente está de frente o de lado, demasiado lejos o al borde de la imagen.
  3. Motor. RepEngine calcula la medición principal, la suaviza, revisa las reglas de forma y decide si terminó una repetición.
  4. Medición inicial. Si hay una en curso, actualiza su progreso.

Luego publica el resultado de dos maneras.

MotionSnapshot MotionEvent
Qué es El estado completo, en un valor Algo que pasó en este fotograma
Cómo se lee session.snapshot (observable) for await event in session.events()
Para qué Dibujar: ángulo, contador, anillo de progreso Reaccionar una vez: decir «¡bien!», vibrar, guardar

Más detalle en Eventos y snapshot.

El motor no tiene ningún ejercicio programado. Un ExerciseDefinition describe:

  • qué medir (primary, una Measure),
  • cómo contar (kind: repeticiones o sostenido),
  • qué técnica exigir (rules, una lista de FormRule),
  • desde dónde mirar (view: de lado o de frente).

Como todo es Codable, un ejercicio nuevo puede llegar en un JSON desde tu servidor. Ver Ejercicios personalizados.