Como funciona
Cada quadro da câmera passa pela mesma cadeia. Nenhuma peça sabe das outras mais do que precisa, por isso cada uma pode ser testada e substituída separadamente.
1. A fonte de poses
Seção intitulada “1. A fonte de poses”Um PoseProvider entrega um AsyncStream<Pose>. Pode ser a câmera (VisionPoseProvider), uma gravação (RecordedPoseProvider) ou o que você implementar. Cada Pose são os pontos do corpo de um quadro, em pixels e com os lados já corrigidos.
2. A sessão
Seção intitulada “2. A sessão”MotionSession é a porta de entrada. Para cada pose:
- Visibilidade. Todas as articulações que o exercício mede estão visíveis? A mudança é confirmada após alguns quadros seguidos (~0,25 s) para não piscar.
- Posicionamento.
SetupCheckverifica se o paciente está de frente ou de lado, longe demais ou na borda da imagem. - Motor.
RepEnginecalcula a medição principal, suaviza, verifica as regras de forma e decide se uma repetição terminou. - Medição inicial. Se houver uma em andamento, atualiza o progresso.
Depois publica o resultado de duas formas.
3. Snapshot e eventos
Seção intitulada “3. Snapshot e eventos”MotionSnapshot |
MotionEvent |
|
|---|---|---|
| O que é | O estado completo, em um valor | Algo que aconteceu neste quadro |
| Como ler | session.snapshot (observável) |
for await event in session.events() |
| Para quê | Desenhar: ângulo, contador, anel de progresso | Reagir uma vez: dizer «muito bem!», vibrar, salvar |
Mais detalhes em Eventos e snapshot.
Os exercícios são dados
Seção intitulada “Os exercícios são dados”O motor não tem nenhum exercício programado. Um ExerciseDefinition descreve:
- o que medir (
primary, umaMeasure), - como contar (
kind: repetições ou sustentação), - que técnica exigir (
rules, uma lista deFormRule), - de onde olhar (
view: de lado ou de frente).
Como tudo é Codable, um exercício novo pode chegar em JSON do seu servidor. Veja Exercícios personalizados.