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.
1. La fuente de poses
Sección titulada «1. La fuente de poses»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.
2. La sesión
Sección titulada «2. La sesión»MotionSession es la puerta de entrada. Por cada pose:
- Visibilidad. ¿Se ven todas las articulaciones que mide el ejercicio? El cambio se confirma tras unos fotogramas seguidos (~0,25 s) para no parpadear.
- Ubicación.
SetupCheckrevisa si el paciente está de frente o de lado, demasiado lejos o al borde de la imagen. - Motor.
RepEnginecalcula la medición principal, la suaviza, revisa las reglas de forma y decide si terminó una repetición. - Medición inicial. Si hay una en curso, actualiza su progreso.
Luego publica el resultado de dos maneras.
3. Snapshot y eventos
Sección titulada «3. Snapshot y eventos»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.
Los ejercicios son datos
Sección titulada «Los ejercicios son datos»El motor no tiene ningún ejercicio programado. Un ExerciseDefinition describe:
- qué medir (
primary, unaMeasure), - cómo contar (
kind: repeticiones o sostenido), - qué técnica exigir (
rules, una lista deFormRule), - 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.