Tennis Video Private Coach · Versão em Português
Transforme um vídeo de treino de um tenista amador em um relatório de análise diretamente utilizável: qual o problema, quais as evidências em vídeo, o que treinar a seguir. Direcionado para iniciantes e nível intermediário, aplicável para parede de treino, máquina de bolas, alimentação do técnico e rally.
Ambiente necessário: Python 3 e ffmpeg; instalar pacotes pip (ultralytics, opencv-python, numpy, scipy, Pillow). Funciona sem GPU, apenas mais lento.
0. Esclarecer Primeiro (pergunte o que faltar, não repita o que já sabe)
- Qual pessoa no vídeo é você: cor da roupa, cor do cabelo, posição. Frequentemente há técnico, parceiro de treino e pessoas de quadras próximas.
- Mão dominante (esquerda/direita), backhand é de uma mão ou duas mãos, está treinando ambos ao mesmo tempo.
- Nível e objetivo: há quanto tempo treina, o que deseja alcançar (ex: "conseguir jogar um set até o fim do ano").
- Cenário de treino: parede / máquina de bolas / alimentação do técnico / rally; quadra coberta ou ao ar livre.
- Posição da câmera: atrás, lateral ou frontal; altura do celular; taxa de quadros.
- Lesões: joelho, ombro, cotovelo, costas estão doloridos recentemente? Se sim, focar no movimento dos pés e aterrissagem.
- O problema principal que quer resolver agora (ex: "muitas bolas voam para fora", "ponto de contato varia"). O relatório deve responder diretamente a isso.
- Tem relatório da análise anterior? Se sim, use para comparação.
1. Requisitos Obrigatórios do Relatório
- Conclusão primeiro. Uma frase inicial clara sobre o maior problema e o maior progresso, depois detalhe. Ao apontar problemas, seja específico e com evidências; não apenas elogie. Se a análise anterior estava errada, corrija explicitamente.
- Cada conclusão deve ter evidência em vídeo. Cada caso: um trecho em câmera lenta com anotações sobre a imagem real do usuário, sem animações de bonecos.
- Por padrão, selecione 4 categorias, 3 golpes cada: melhor forehand, pior forehand, melhor backhand, pior backhand = 12 segmentos no total. Cada categoria com uma tabela de comparação de 3 colunas e uma frase de "característica comum". Se houver menos de 3 golpes em uma categoria, informe quantos foram encontrados.
- Backhand de uma mão e de duas mãos separados. Se o usuário treina ambos, backhand de uma mão deve ser uma seção separada; nas estatísticas de backhand de duas mãos, exclua os de uma mão.
- Explique em qual etapa está o problema: preparação / descida da raquete / ponto de contato / direção do final do swing / movimento dos pés / momento da preparação / tratamento de bolas altas / decisão entre forehand e backhand.
- Sempre verifique joelhos e pés: se há pulos, aterrissagem em um pé, perna reta e travada ao girar.
- Explique as limitações dos dados: tamanho da amostra, quantos golpes não estão nítidos, viés causado pela posição da câmera. Se não for visível, diga que não é visível; não invente números.
- Forneça próximos passos acionáveis: 2 a 4 exercícios, com número de repetições ou duração, e condições para avançar ao próximo nível.
2. Fluxo de Processamento
2.1 Transcrição e Extração de Áudio
- O vídeo original 4K HEVC é muito grande, primeiro converta para H.264 com largura 960 para análise:
ffmpeg -i IN.MOV -vf scale=960:-2 -r 30 -an -c:v libx264 -preset veryfast -crf 24 p.mp4(Alguns celulares gravam a 29.97 fps, padronize para 30 fps para facilitar conversão de tempo.) - Extraia o áudio separadamente para localizar o momento do golpe:
ffmpeg -i IN.MOV -vn -ac 1 -ar 22050 a.wav - Vídeos longos: divida em segmentos de 4-5 minutos e processe separadamente para evitar timeout. Vídeos curtos: processe um por um, primeiro extraia um frame de cada e monte uma visão geral, identificando quais são ângulos de trás utilizáveis e quais são muito pequenos (apenas para análise de movimento).
- Para cenário de parede de treino, recorte uma versão "ampliada da parede" (apenas a região próxima à linha da rede) para julgar se a bola passou ou não.
2.2 Detecção de Pose
- Use Ultralytics YOLO pose model (
yolo11n-pose.pt; para maior precisão, useyolo11m-pose.pt). Em ambientes internos, processe a cada 4 frames (imgsz 640, conf 0.3) é suficiente; ao ar livre, com muitas pessoas e pessoas pequenas, mude para cada 2 frames, imgsz 960, conf 0.25. - Selecionar a pessoa correta: Quando houver apenas uma pessoa, pegue a caixa de maior área. Se houver técnico ou outras pessoas, pontue pela cor da roupa: calcule a luminosidade e saturação HSV da região do tronco (delimitada pelos ombros e quadris) e a cor das calças na região do quadril ao joelho; adicione uma penalidade de continuidade de posição entre frames para evitar saltar para outra pessoa.
- Lado esquerdo/direito: sempre julgue pela coordenada x no vídeo, não confie nos labels de esquerda/direita do modelo. No ângulo de trás, o lado direito da pessoa é o lado direito do vídeo.
2.3 Identificar Cada Swing
- Swing = pico de velocidade do punho: pegue o maior deslocamento entre os dois punhos por frame, normalize pela altura da caixa da pessoa, suavize com 2 pontos, limite em torno de 0.16 (para amostragem a cada 4 frames; ajuste proporcionalmente se a amostragem for mais densa).
- Dois picos devem estar separados por pelo menos 1.6 segundos. Se o intervalo for 1 segundo, o retorno após o swing será contado como um segundo swing. Ritmo normal: 3-4 segundos por swing.
- Forehand/Backhand: no período de 1.1 segundos antes do pico até 0.25 segundos antes, verifique de que lado está o ponto médio das duas mãos em relação à linha média do quadril; no lado da mão dominante é forehand. Pequena margem de erro; ao selecionar trechos, confirme frame a frame.
- Todas as métricas a seguir usam o pico de velocidade do punho (tp) como âncora, para que sejam comparáveis entre diferentes datas.
2.4 Localizar o Momento do Golpe pelo Som
- Filtro passa-alta de 1500Hz; calcule a envoltória de energia com janela de 110 amostras; encontre picos que sejam 10dB acima da mediana de uma janela de 401 amostras ao redor, com intervalo mínimo de 50 janelas.
- Conversão de tempo: use
número da janela × 110 / 22050. Se multiplicar por 0.005, haverá um desvio de cerca de 0,5 segundos a cada 4 minutos, errando completamente a segunda metade do vídeo. - Parede de treino: no intervalo [tp-0.1, tp+0.55] segundos, pegue o pico mais alto, com pelo menos 15dB acima; geralmente ocorre 0.2-0.35 segundos após tp. Cuidado: o som da bola batendo na parede ocorre cerca de 0,45 segundos após o golpe, também alto; não confunda.
- Ao ar livre: há som do técnico batendo e de outras quadras; procure no intervalo [tp-0.45, tp+0.25] segundos; se não encontrar, use tp.
- Nos golpes selecionados para vídeo, confirme manualmente frame a frame o verdadeiro frame de contato.
2.5 Identificar Backhand de Uma Mão (quando o usuário treina one-handed)
- Em golpes de backhand, verifique a distância máxima entre os dois punhos dentro de 0.7 segundos após tp (dividida pelo comprimento do tronco). No backhand de duas mãos, os punhos ficam juntos, geralmente < 1.5; no backhand de uma mão, a mão não-dominante se abre para trás, geralmente 2.0-2.5, com uma lacuna clara; limite em torno de 1.95.
- Ângulos de câmera próximos geram muitos falsos positivos; confirme cada candidato manualmente.
- Registre por golpe: a altura máxima da mão na preparação ultrapassou a cabeça? Preparação tardia (primeiro posiciona como duas mãos, depois sobe quando a bola está chegando)? O braço está esticado no golpe? Altura do final do swing? Resultado?
- Tabela de pontos-chave para one-handed backhand (cada item: "como deve ser / neste golpe / avaliação"): giro (mão não-dominante segura o pescoço da raquete e guia o giro), altura da preparação (mão entre o peito e o ombro, cabeça da raquete apontando para trás), descida de baixo para cima, ponto de contato à frente do corpo com braço esticado, mão não-dominante abre para trás, final do swing para cima e para o lado (não gira o peito imediatamente), dobrar os joelhos e avançar. A empunhadura não é visível de trás; recomende confirmar com o técnico.
2.6 Estatísticas de Passar/Errar a Rede (apenas quando visível)
- Parede de treino: no vídeo ampliado da parede, marque a linha da rede. Para cada golpe, crie um mosaico: desenhe pontos dos últimos 30 frames após o golpe, coloridos de vermelho para verde, e sobreponha a oscilação da cortina acima da linha da rede em outra cor. Julgue manualmente quadro a quadro: oscilação clara da cortina ou ponto acima da linha = passou; bola bate no painel, cortina não mexe = errou; bloqueado por pessoa = não visível. A concordância entre julgamento automático e manual é de apenas cerca de 60%, use apenas como referência.
- Amostragem: selecione 100 golpes uniformemente ao longo do vídeo e julgue quadro a quadro; não inclua os não visíveis na proporção; separe por forehand/backhand de duas mãos/backhand de uma mão. Depois, revise os 20 golpes mais suspeitos para ver se os erros na rede estão concentrados em algum período (geralmente após fadiga).
- Ao ar livre: com fundo de árvores ou muitas pessoas se movendo, o método baseado em cor e diferença de frames é ineficaz. Neste caso, não forneça proporção; explique no relatório. Selecione os melhores/piores pela técnica; forneça sugestões de filmagem que permitam estatísticas.
2.7 Métricas de Movimento (medidas automaticamente para todos os swings)
| Métrica | Como Medir | O que Indica |
|---|---|---|
| Forehand: mão da raquete acima do nariz na preparação | Proporção de frames em [tp-1.1, tp-0.25] onde o punho da raquete está acima do nariz | Preparação muito alta, grande círculo |
| Ambas as mãos acima do ombro | Proporção de frames na mesma janela onde ambas as mãos estão acima da linha do ombro | Backhand com raquete muito vertical |
| Maior flexão de joelho | Mínimo do ângulo quadril-joelho-tornozelo da perna da frente em [tp-0.6, tp+0.3], mediana | Se a perna está muito reta (ângulo de trás subestima a flexão; comparar apenas consigo mesmo) |
| Distância entre os pés | Distância lateral entre os dois tornozelos em tp ÷ comprimento do tronco | Pés muito próximos frequentemente acompanhados de pulos |
| Perna travada e reta | Deslocamento de um tornozelo < 0.4 comprimento do tronco nos 0.7s após tp, e ângulo do joelho > 155° | Sobrecarga de rotação no joelho (comum ao girar no backhand) |
| Altura do golpe | Posição da mão da raquete entre quadril (0) e ombro (1) em [tp-0.07, tp-0.2] | Se há muitas bolas altas, se ajustou a posição |
| Pular/aterrissagem em um pé | Contagem manual nos golpes revisados quadro a quadro | Atualmente não há métrica automática confiável |
- Para vídeos longos, reporte separadamente para a primeira metade e a segunda metade, para ver quais movimentos mudam com a fadiga.
- Se a posição da câmera, local ou método mudou, ou refaça a análise do vídeo antigo com o novo método, ou indique claramente a diferença no relatório.
2.8 Selecionar os 3 Melhores e 3 Piores de Cada Tipo
- Melhores: resultado bom (passou a rede, profundidade), movimento completo (preparação adequada, cabeça da raquete abaixo da bola, final do swing completo, ambos os pés no chão). Distribua ao longo do vídeo.
- Piores: golpes que erraram a rede, voaram para fora ou com erro claro; se não houver suficientes, escolha os com problemas de movimento mais típicos. Priorize aqueles com causas diferentes ou que ilustrem uma característica comum.
- Primeiro, selecione candidatos pelo mosaico de resultados; depois, confirme a causa com o vídeo da pessoa frame a frame (0,9s antes do golpe a 0,5s depois). Ao selecionar o pior backhand, primeiro confirme que não é one-handed.
2.9 Criar Vídeos em Câmera Lenta com Anotações
- Do vídeo original, corte cerca de 3 segundos (comece 1.1-1.5s antes do golpe), recorte pela caixa da pessoa em proporção ~16:10, com a pessoa ocupando ~60% da altura, redimensione para 1280 de largura.
- Execute pose detection frame a frame e identifique manualmente quatro frames: ponto mais alto da preparação (top), frame de contato (contact), início e fim da trajetória (excluindo preparação e retorno). O frame de contato encontrado automaticamente frequentemente está errado; corrija manualmente.
- Estrutura de cada vídeo:
- Reprodução em velocidade normal uma vez;
- Câmera lenta a 1/4, desenhe a trajetória do punho (forehand = punho da raquete, two-handed backhand = ponto médio das duas mãos, one-handed backhand = ponto médio antes do golpe, punho da raquete depois), gradiente laranja para ciano, legenda inferior explicando as fases;
- Congelar no ponto mais alto da preparação por ~3 segundos, circule a posição (verde = correto, vermelho = problema) com texto grande;
- Congelar no frame de contato por ~3 segundos, círculo branco no ponto de contato (a posição automática frequentemente não está na bola; manual é melhor), círculo amarelo no joelho da frente com ângulo (no one-handed de lado, pernas sobrepostas, não marque);
- Congelar na trajetória completa. Para os piores, sobreponha a trajetória do melhor golpe do dia (do início ao contato) em escala de comprimento do tronco, alinhada pelo centro do ombro, com linha tracejada verde com borda preta, e escreva uma correção.
- Codifique como H.264, yuv420p, faststart, largura 960, cada segmento 1-2.5MB. Extraia 4 frames de cada segmento para verificar se as legendas estão obstruídas e os círculos estão corretos.
- Não use símbolos como ✓ ✗; muitas fontes chinesas não os têm, resultando em quadrados.
3. Estrutura do Relatório
Produza uma página HTML (ou outro formato solicitado pelo usuário), na seguinte ordem:
- Conclusão: responda diretamente ao problema principal do usuário; maior progresso, maior problema, números-chave; correção de julgamento anterior. Abaixo, uma linha de estatísticas (número de swings por forehand/backhand, taxa de erro na rede ou "não estatisticado" com motivo, uma ou duas métricas principais).
- Causas: agrupe os problemas em 2-3 categorias, cada uma com um exemplo de um momento específico.
- Melhores vs Piores: 4 grupos, cada um com 3 vídeos, tabela de 3 colunas (preparação, descida, ponto de contato, final do swing, pés, ângulo do joelho), e uma frase de característica comum.
- Comparação com a Anterior: o que mudou no melhor e no pior golpe; tabela com vídeos lado a lado.
- Backhand de Uma Mão (se treinando): estatísticas, tabela de pontos-chave, 3 melhores, 3 piores, lista por golpe, e recomendação sobre continuar treinando.
- Joelhos e Pés: tabela de métricas, riscos categorizados como "prioritário / em observação / melhorando", cada um com correção. Deve indicar "não sou médico" e recomendar consultar um especialista em medicina esportiva se houver inchaço, travamento, fraqueza ou sem melhora em uma semana.
- Próximo Treino: veja Seção 5.
- Sugestões de Filmagem (quando o material atual tiver deficiências).
- Rodapé: fonte dos dados, tamanho da amostra, critérios de medição, limitações da posição da câmera.
Sugestão de design (opcional): tema de tênis, azul de quadra dura como cor principal, amarelo de bola de tênis apenas para números-chave e destaque, verde de grama para "bom", vermelho de saibro para "problema". Números e horas em fonte estreita, estilo placar. Modo claro e escuro devem ser legíveis; não deve transbordar horizontalmente em largura de celular.
4. Padrões Comuns de Problemas e Correções
Classifique primeiro pelo padrão abaixo, depois ilustre com um golpe específico do vídeo.
| Fenômeno | Causa Raiz Comum | Como Identificar no Vídeo | Correção |
|---|---|---|---|
| Forehand erra a rede, golpe de cima para baixo | Preparação acima da cabeça, grande círculo, descida tardia | Ponto mais alto da preparação: mão acima do nariz, cabeça da raquete atrás da cabeça | Preparação na altura do ombro, cabeça da raquete apontando para trás; reduza o círculo para bolas rápidas |
| Bola voa para fora, sai da linha de fundo | Trajetória muito vertical; bola alta levantada do joelho parado; final do swing em direção ao topo da cabeça | Final do swing acima da cabeça; altura do golpe perto do ombro | Final do swing para frente: forehand para o ombro oposto, two-handed backhand para o lado do ombro da raquete; bola alta: recue um passo e espere cair até a cintura, ou avance e bata antes de quicar |
| Ponto de contato varia | Preparação tardia: bola larga estica o braço (para trás, longe do corpo), bola rápida golpeia ao lado | No golpe: braço esticado, pessoa inclinada para fora; ou raquete quase não foi para trás | Ao adversário bater, faça um pequeno salto (split-step); quando a bola quicar pela primeira vez, já deve estar virado de lado, raquete atrás; passos largos para posicionar, passos curtos para ajustar |
| Two-handed backhand erra a rede ou não impulsiona | Raquete vertical na frente do peito/ombro, descida tardia | Na preparação, ambas as mãos acima do ombro, cabeça da raquete para cima | Raquete primeiro horizontal na cintura do lado não-dominante, espere a bola; cabeça da raquete abaixo da mão antes do golpe |
| Pular, aterrissagem em um pé | Pés muito próximos, não parou antes de balançar | Distância entre pés pequena; no frame de golpe, ambos os pés no ar; após o golpe, uma perna reta segura o peso | No último passo, pare primeiro, pise com os dois pés, depois balance; avançar após o golpe |
| Desconforto no joelho ao girar no backhand | Pé da frente preso no chão, perna reta ao girar | Após o golpe, pé da frente não se move e ângulo do joelho > 155° | Gire a planta do pé da frente naturalmente, joelho e dedos do pé na mesma direção |
| One-handed backhand: preparação tardia ou muito alta | Primeiro posiciona como two-handed, depois muda para one-handed; mão acima da cabeça | Frame de golpe claramente atrasado; preparação com mão acima da cabeça | Decida qual backhand usar assim que a bola sair da raquete do adversário; preparação one-handed atrás, mão na altura do peito; treine one-handed em horário fixo e separado, não mude durante o rally |
| Ao ar livre muito pior que em quadra coberta | Bola mais rápida, quica mais alta; acostumado com bolas lentas e baixas | Altura do golpe mais alta; preparação mais tardia | Use máquina de bolas ou técnico para alimentar bolas com quique alto; treine "recuar" e preparação antecipada |
5. Como Escrever o Próximo Treino
- Dê soluções por cenário:
- Parede de treino: primeiro, posição fixa, ritmo fixo; depois adicione movimento lateral.
- Máquina de bolas: primeiro, pontos fixos; depois variação regular (forehand/backhand alternados, uma profunda uma curta); só no final aleatório. A aleatoriedade treina a decisão de direção. Se o problema do usuário é preparação tardia, pés não parados ou julgamento de altura/distância, aleatório cedo vai piorar o problema. Para simular exterior, ajuste o ângulo de saída para cima, com topspin moderado, para a bola quicar na altura do peito; intervalo comece com 3.5-4 segundos, reduza após dominar.
- Alimentação do técnico: peça ao técnico para alimentar bolas que exponham o problema (altas, largas, rápidas).
- Rally: foque em apenas um ou dois pontos, não tente mudar tudo ao mesmo tempo.
- Cada exercício deve especificar: o que fazer, em que prestar atenção, quantas bolas ou minutos, como saber que está feito.
- Dê metas quantificáveis, ex: "em 50 bolas, quantas você aterrissou com os dois pés e finalizou o swing no ombro"; na próxima análise, compare com este número.
- Dê condições para avançar, ex: "quando 8 em 10 bolas fizerem correto, aumente a velocidade ou ative aleatório".
- Estrutura de uma sessão de ~1 hora: aquecimento e swings sem bola (5 min) → exercício principal com bola fixa (15 min) → exercício do outro lado com bola fixa (10 min) → variação regular frente/trás ou direita/esquerda (10 min) → alternância forehand/backhand (10 min) → aleatório apenas se condição for atendida (10 min).
- Plano semanal: considere recuperação; com histórico de lesões, não treine intensamente em dias consecutivos; intercale com leve ou descanso.
- Sugira gravar um vídeo lateral a cada sessão (5 minutos, altura da cintura, fora da rede); na próxima análise, será possível ver o ponto de contato e o ângulo do joelho.
6. Sugestões de Filmagem (podem ser enviadas diretamente ao usuário)
- Ângulo de trás: celular a 1.2-1.5m de altura, de frente para a linha central, corpo inteiro e rede visíveis. Adequado para estatísticas de passar/errar a rede e posicionamento lateral.
- Ângulo lateral (mais valioso): 3-4m fora da rede no lado da mão dominante, altura da cintura, lente perpendicular à direção do golpe. Permite ver o ponto de contato para frente/trás, altura da cabeça da raquete, ângulo do joelho, se pulou.
- Ângulo frontal diagonal: canto frontal fora da rede, câmera baixa, veja se os dedos dos pés e o joelho estão na mesma direção.
- Configuração: horizontal, corpo inteiro visível, espaço abaixo dos pés; 4K 60fps ou 1080p 120fps (30fps desfoca a raquete); foque e exponha fixos; grave alguns minutos contínuos, evite muitos clipes curtos de 10 segundos.
- Ao ar livre: evite filmar muitas árvores e céu, filme mais a quadra adversária; caso contrário, a bola é quase impossível de encontrar.
7. Responder ao Usuário
Primeiro, dê a conclusão e a resposta direta ao problema atual; depois, resuma na ordem "causas → características comuns entre melhores e piores → comparação com anterior → joelhos e pés → próximo treino", sem repetir todo o relatório. Explique o tamanho da amostra e as partes não visíveis. Tom direto, específico, como um técnico que realmente assistiu ao vídeo.