Este documento detalha a proposta de arquitetura e o fluxo de trabalho para a aplicação de acompanhamento de exercícios fisioterapêuticos.
- Profissional da Saúde: Responsável por gerenciar pacientes e seus planos de tratamento.
- Paciente: Executa os exercícios e recebe feedback sobre seu desempenho.
- O Profissional da Saúde cadastra um novo Paciente na plataforma.
- O Profissional monta um "roteiro" de exercícios para o Paciente, especificando quais movimentos, número de séries, repetições, etc.
- O Paciente acessa o aplicativo, visualiza seu roteiro e seleciona um exercício para iniciar.
- O Paciente realiza o exercício enquanto é gravado pelo aplicativo.
- A gravação é analisada pela IA.
- O Paciente e o Profissional recebem um relatório detalhado com um vídeo de feedback.
- O Paciente poderá realizar exercícios "avulsos", ou seja, que não foram recomendados diretamente por um profissional? (Ex: um catálogo geral de exercícios para prevenção).
O que o sistema deve FAZER.
- Autenticação de Usuários (RF-01): O sistema deve permitir que usuários (Paciente e Profissional) se cadastrem e façam login de forma segura.
- Gerenciamento de Pacientes (RF-02): O Profissional deve ser capaz de cadastrar, visualizar, editar e remover seus pacientes.
- Gerenciamento de Roteiros (RF-03): O Profissional deve poder criar roteiros de exercícios, selecionar movimentos de um catálogo e atribuir esses roteiros aos seus pacientes.
- Visualização de Roteiro (RF-04): O Paciente deve poder visualizar o roteiro de exercícios atualizado que foi atribuído a ele.
- Execução Guiada de Exercício (RF-05): O aplicativo deve guiar o Paciente durante a execução de um exercício, exibindo um esqueleto em tempo real para auxiliar no posicionamento.
- Gravação de Vídeo (RF-06): O aplicativo deve gravar a sessão de exercícios do Paciente.
- Upload de Gravação (RF-07): O aplicativo deve realizar o upload do vídeo gravado para o servidor em segundo plano.
- Análise de Movimento (RF-08): O backend deve processar o vídeo para analisar a execução do exercício com base em regras pré-definidas.
- Geração de Feedback (RF-09): O backend deve gerar um novo vídeo com marcações visuais (certo/errado) e um relatório de dados sobre a performance.
- Visualização de Histórico (RF-10): Pacientes e Profissionais devem poder acessar o histórico de exercícios realizados e seus respectivos relatórios de análise.
- Notificação (RF-11): O sistema deve notificar o Paciente quando a análise de um exercício for concluída.
Como o sistema deve SER.
- Desempenho (RNF-01): O feedback visual (esqueleto) no aplicativo deve rodar em tempo real (mínimo de 20 FPS). A análise no backend, por ser assíncrona, deve ser concluída em tempo hábil (ex: menos de 5 minutos para um vídeo de 1 minuto).
- Usabilidade (RNF-02): A interface do aplicativo deve ser simples e intuitiva, considerando que pacientes podem ter dificuldades motoras. O portal do profissional deve ser claro e eficiente.
- Segurança (RNF-03): Os dados dos pacientes são sensíveis (LGPD). A comunicação entre app e servidor deve ser criptografada (HTTPS/WSS). O armazenamento deve ser seguro e com acesso restrito.
- Custo (RNF-04): Para a fase de protótipo e pesquisa, a infraestrutura deve se basear em serviços que ofereçam planos gratuitos robustos (ex: Supabase).
- Escalabilidade (RNF-05): A arquitetura do backend (com fila de processamento) deve ser capaz de lidar com um aumento no número de usuários e uploads sem degradar o serviço.
- Disponibilidade (RNF-06): O sistema deve estar disponível para uso 99% do tempo.
- Precisão da Análise (RNF-07): A análise de movimento deve ser precisa e confiável, refletindo as regras definidas pelos profissionais da saúde para ser útil na pesquisa e no tratamento.
- Funcionamento Offline Parcial (RNF-08): O paciente deve ser capaz de gravar uma sessão de exercícios mesmo sem conexão com a internet. O upload deve ser enfileirado e enviado assim que a conexão for restabelecida.
A arquitetura combina o processamento no dispositivo (on-device) para uma melhor experiência do usuário com o processamento no servidor (backend) para garantir máxima precisão na análise.
O app é o ponto de contato com o usuário. Suas responsabilidades são:
-
Feedback Visual Imediato:
- Utiliza
react-native-vision-camerapara acesso à câmera. - Usa
TensorFlow.jscom o modelo MoveNet para desenhar o esqueleto do usuário em tempo real na tela. - Objetivo: Apenas guiar o posicionamento do usuário, sem análise complexa.
- Utiliza
-
Gravação de Média/Alta Qualidade:
- Enquanto exibe o esqueleto, grava um vídeo "limpo" (sem os desenhos) em boa resolução (1080p @ 30fps ou 720 @ 30fps) - analisar disponibilidade de armazenamento.
- O vídeo é salvo temporariamente no dispositivo do usuário (cache).
-
Upload em Segundo Plano:
- Após o exercício, o app faz o upload do vídeo para o backend.
- O processo ocorre de forma assíncrona, liberando o usuário para fazer outras coisas no app ou até fechá-lo.
O servidor é onde a análise científica e o processamento pesado acontecem.
-
API de Recebimento:
- Um endpoint web (criado com
FlaskouFastAPI) recebe os uploads de vídeo.
- Um endpoint web (criado com
-
Fila de Processamento (Essencial):
- Para não travar o sistema, os vídeos recebidos são colocados em uma fila de tarefas com
CeleryeRedisouRabbitMQ. - O app recebe uma resposta instantânea de "recebido, em processamento".
- Para não travar o sistema, os vídeos recebidos são colocados em uma fila de tarefas com
-
Análise Detalhada:
- Processos "workers" pegam os vídeos da fila e executam o algoritmo principal:
- Extração de Dados:
MediaPipe Poseprocessa o vídeo quadro a quadro, extraindo as coordenadas dos 33 pontos corporais com alta precisão. - Lógica Científica: O código implementa as regras definidas pelos fisioterapeutas (ângulos, velocidades, trajetórias) para validar cada movimento.
- Extração de Dados:
- Processos "workers" pegam os vídeos da fila e executam o algoritmo principal:
-
Geração de Vídeo com Feedback:
- Após a análise, o script usa
OpenCVoumoviepypara gerar um novo vídeo. - Este vídeo contém as marcações visuais: esqueleto sobreposto, membros coloridos (verde/vermelho) e textos explicativos.
- Após a análise, o script usa
-
Armazenamento Persistente (Com Foco em Serviços Gratuitos):
-
Dados da Análise e Metadados (Banco de Dados):
- Utilizaremos o Supabase, que oferece um banco de dados PostgreSQL com um excelente plano gratuito.
- Ele cuidará dos dados relacionais: perfis de usuário, roteiros de exercícios, e principalmente, os resultados das análises.
- O Supabase também já inclui autenticação, o que facilita muito a criação dos perfis de Paciente e Profissional.
- No banco, salvaremos:
ID do paciente,ID do exercício,data,link para os vídeos no storage, e oJSON com o relatório detalhado da análise.
-
Vídeos e Imagens (Armazenamento de Objetos):
- A melhor parte é que o próprio Supabase já vem com um serviço de Storage compatível com S3.
- Nosso backend Python fará o upload do vídeo original e do vídeo com feedback para um "bucket" dentro do Supabase Storage.
- Vantagem: Mantém tudo (autenticação, banco de dados e arquivos) no mesmo lugar, simplificando a gestão e o desenvolvimento.
-
Alternativas de Storage (se necessário):
- Cloudinary: Focado em mídia, tem um plano gratuito generoso baseado em créditos. Ótimo para manipulação de imagens e vídeos.
- Firebase Storage: O concorrente direto do Supabase Storage, também com um bom plano gratuito.
-
-
Notificação:
- Ao final de todo o processo, uma notificação push é enviada ao app do paciente.
É fundamental entender que não vamos treinar um modelo de IA do zero. Vamos usar o MediaPipe como uma ferramenta que nos dá os dados brutos, e nossa inteligência será o código que interpreta esses dados.
-
O que o MediaPipe faz:
- Ele olha para um vídeo e nos diz ONDE estão os ombros, joelhos, cotovelos, etc., em cada quadro (as coordenadas x, y, z).
-
O que o NOSSO ALGORITMO faz:
- Ele pega essas coordenadas e, usando o conhecimento da fisioterapia que vamos programar, decide SE o movimento está correto.
- Calcula ângulos, verifica posturas, conta repetições e identifica erros com base em regras pré-definidas.