Communitygithub.com

zakezhang/tennis-video-private-coach

Revê um vídeo de treino de tênis e produz um relatório técnico. Detecta cada raqueteada, separa forehands e backhands, escolhe as melhores e piores jogadas e renderiza clipes em câmera lenta anotados com a trajetória da raquete desenhada no jogador, conta redes/fora quando a bola está visível, verifica joelhos e trabalho de pés, compara com sessões passadas e escreve um plano concreto para o próximo treino. Use quando alguém enviar um vídeo de treino, pedir uma revisão de sessão ou perguntar o que treinar a seguir.

O que é tennis-video-private-coach?

Habilidade especializada em tênis que analisa vídeos de treino de jogadores amadores, gerando relatórios de coaching detalhados e acionáveis. Ela processa o vídeo automaticamente: identifica cada raqueteada, separa forehands e backhands, avalia a técnica (como altura da preparação, ângulo do joelho, largura da postura), e seleciona as três melhores e piores jogadas de cada tipo. Para essas jogadas selecionadas, a ferramenta renderiza clipes em câmera lenta com anotações visuais, incluindo a trajetória da raquete desenhada quadro a quadro sobre o jogador, pontos de congelamento no topo da preparação e no contato, e uma comparação com a melhor jogada da sessão, facilitando a identificação visual dos erros. Além da análise técnica, a habilidade conta o número de bolas na rede ou fora (quando a bola é visível no vídeo), verifica a biomecânica dos joelhos e do trabalho de pés, e compara os resultados com sessões anteriores para medir progresso. O relatório final é uma página HTML, priorizando a resposta direta à pergunta do jogador, e termina com um plano de treino personalizado de 2 a 4 drills, cada um com critérios de sucesso para avançar. A ferramenta funciona com vídeos de câmera de celular (incluindo 4K), processa áudio para localizar o contato, e usa modelos de pose YOLO (ultralytics) para rastreamento e análise, sendo executável em qualquer ambiente com Python 3 e ffmpeg. O público-alvo são jogadores de tênis iniciantes a intermediários, batendo contra parede, máquina de bolas, treinador ou parceiro. A habilidade suporta personalização via perguntas sobre a mão dominante, nível, lesões e o maior problema a ser resolvido, e cobre tanto backhands de uma mão quanto de duas mãos, mantendo análises separadas. O relatório também inclui conselhos de câmera, limites dos dados e uma seção de "Joelhos e trabalho de pés" com classificação de riscos e encaminhamento médico. É especialmente útil para jogadores que desejam feedback visual e específico para melhorar sua técnica sem a presença constante de um treinador. ## 5. O que treinar a seguir Escreva um plano que o jogador possa executar, com este formato: 1. **Drill 1** (que treina a falha principal): descrição curta, repetições ou minutos, condição de sucesso para avançar. 2. **Drill 2** (falha secundária, ou progressão do drill 1): o mesmo formato. 3. **Drill 3** (se houver uma terceira prioridade). 4. **Drill 4** (opcional: condicionamento, ou um drill que amarre os anteriores). Exemplo: - **Drill 1: Sentindo a preparação baixa**. Contra uma parede ou com alimentação, tente acertar 10 forehand seguidos com a cabeça da raquete abaixo da bola na preparação e a cabeça abaixo da mão. Avance quando sentir que isso é natural. - **Drill 2: Ajuste com largura**. Marque uma linha a 30 cm do seu pé da frente. Em cada forehand, dê um passo para a direita e coloque o pé da frente além da linha. Avance quando você se sentir estável e plantado. - **Drill 3: Um backhand de duas mãos com contato à frente**. Amarre uma corda na cintura e na raquete perto da corda; pratique 10 backhand segurados a 30 cm à frente do quadril. Se você golpear uma selfie, está muito perto.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zakezhang/tennis-video-review-public/tree/main/skills/tennis-video-private-coach

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Treinador Particular de Vídeo de Tênis

Transforme o vídeo de treino de um jogador amador em uma revisão que ele possa usar: qual parte do golpe quebra, quais jogadas comprovam isso e exatamente o que treinar a seguir. Construído para jogadores iniciantes a intermediários batendo contra uma parede, uma máquina de bolas, um treinador ou um parceiro de batidas.

Requisitos: um ambiente que possa executar Python 3 e ffmpeg e instalar pacotes pip (ultralytics, opencv-python, numpy, scipy, Pillow). Uma GPU ajuda, mas não é necessária.

0. Pergunte primeiro (apenas o que você ainda não sabe)

  1. Qual pessoa no quadro é o jogador: cores da roupa, cabelo, posição. Treinadores, parceiros e pessoas na quadra ao lado geralmente aparecem na gravação.
  2. Mão dominante, e se o backhand é de uma mão ou de duas mãos (ou ambos, enquanto aprende).
  3. Nível e objetivo: há quanto tempo joga e o que deseja alcançar (por exemplo, "rebater e jogar um set até o fim do ano").
  4. Ambiente: parede de treino / máquina de bolas / treinador alimentando / batendo; indoor ou outdoor.
  5. Câmera: atrás, lateral ou frontal; altura do celular; taxa de quadros.
  6. Lesões: dores recentes nos joelhos, ombro, cotovelo ou costas. Se sim, o trabalho de pés e as aterrissagens recebem atenção extra.
  7. O único problema que mais desejam resolver (por exemplo, "muitas bolas vão longe" ou "meu ponto de contato é inconsistente"). O relatório deve respondê-lo no topo.
  8. Relatórios anteriores, se houver, para comparação.

1. O que o relatório deve fazer

  • Comece com a conclusão. Uma frase sobre o maior problema e a maior melhoria, depois os detalhes. Seja específico e apoie cada crítica com evidências; não apenas elogie. Se uma revisão anterior errou algo, diga-o explicitamente.
  • Apoie cada afirmação com vídeo. Cada caso recebe um clipe anotado em câmera lenta, desenhado na filmagem real do jogador, não em uma animação de palito.
  • Padrão de 4 categorias × 3 jogadas: melhores forehands, piores forehands, melhores backhands, piores backhands (12 clipes). Cada categoria recebe uma tabela de comparação de 3 colunas e uma frase sobre o que as três jogadas têm em comum. Se uma categoria tiver menos de 3 jogadas utilizáveis, informe quantas foram encontradas.
  • Mantenha backhands de uma mão e de duas mãos separados. Se o jogador está praticando ambos, os de uma mão recebem sua própria seção e são excluídos das estatísticas de duas mãos.
  • Nomeie a fase quebrada: preparação / queda da raquete / ponto de contato / direção do follow-through / trabalho de pés / tempo de preparação / lidar com bolas altas / decisão forehand-backhand.
  • Sempre verifique joelhos e trabalho de pés: bater enquanto está no ar, aterrissar em uma perna, pivotear em uma perna reta travada.
  • Declare os limites dos dados: tamanho da amostra, quantas jogadas eram ilegíveis, viés do ângulo da câmera. Se algo não pode ser visto, diga-o em vez de adivinhar um número.
  • Termine com um plano que eles possam seguir: 2–4 drills com repetições ou minutos, mais a condição para passar para o próximo estágio.

2. Pipeline

2.1 Transcodicar e extrair áudio

  • Filmagem de celular 4K HEVC é pesada. Faça uma cópia de análise H.264 de 960 de largura: 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; forçar 30 mantém as conversões de tempo simples.)
  • Extraia o áudio separadamente para localizar o contato: ffmpeg -i IN.MOV -vn -ac 1 -ar 22050 a.wav
  • Processe vídeos longos em pedaços de 4–5 minutos para evitar timeouts. Para muitos clipes curtos, pegue um quadro de cada um em uma folha de visão geral primeiro e decida quais clipes são ângulos utilizáveis atrás do jogador e quais estão muito distantes (use estes apenas para olhar a técnica).
  • Para sessões de parede de treino, também corte uma cópia "parede" ampliada ao redor da linha da rede para julgar rede/fora.

2.2 Estimativa de pose

  • Use um modelo de pose YOLO da Ultralytics (yolo11n-pose.pt; yolo11m-pose.pt para mais precisão). Em ambientes internos, a cada 4 quadros com imgsz 640, conf 0.3 é suficiente. Em ambientes externos, onde as pessoas são menores e mais numerosas, use a cada 2 quadros, imgsz 960, conf 0.25.
  • Rastreie a pessoa certa. Com uma pessoa no quadro, pegue a maior caixa. Com treinadores ou outras pessoas ao redor, pontue cada detecção pela roupa: mediana de brilho e saturação HSV dentro do polígono do tronco (ombros + quadris), e a cor da região quadril-joelho para shorts/calças. Adicione uma penalidade para saltos longe do quadro anterior para que o rastreamento não troque de pessoa.
  • Decida esquerda e direita pela coordenada x da imagem, não pelos rótulos esquerda/direita do modelo. Por trás, o lado direito do jogador é o lado direito da imagem.

2.3 Encontrar cada raqueteada

  • Uma raqueteada é um pico na velocidade do pulso: deslocamento quadro a quadro do pulso que mais se move, dividido pela altura da caixa, suavizado em 2 amostras, limiar de cerca de 0.16 (para amostragem a cada 4 quadros; escale para amostragem mais densa).
  • Exija pelo menos 1,6 s entre picos. Uma lacuna de 1,0 s conta a recuperação após o follow-through como uma segunda raqueteada. O ritmo normal é uma raqueteada a cada 3–4 s.
  • Forehand ou backhand: na janela de 1,1 s a 0,25 s antes do pico, de que lado da linha média do quadril está o ponto médio de ambas as mãos. O lado da mão dominante significa forehand. Alguns estarão errados; confirme quadro a quadro para qualquer jogada que você destacar.
  • Âncore cada métrica abaixo ao pico de velocidade do pulso (chame-o de tp) para que as sessões permaneçam comparáveis.

2.4 Localizar o contato pelo som

  • Filtro passa-alta em 1500 Hz; calcule uma envoltória de energia em janelas de 110 amostras; encontre picos pelo menos 10 dB acima da mediana das 401 janelas ao redor e pelo menos 50 janelas de distância.
  • Converta para segundos com window_index × 110 / 22050. Multiplicar por 0,005 como atalho deriva cerca de meio segundo a cada 4 minutos e estraga a segunda metade de vídeos longos.
  • Parede de treino: pegue o pico mais alto pelo menos 15 dB acima do fundo dentro de [tp−0,1, tp+0,55] s, geralmente 0,2–0,35 s após tp. A bola batendo na parede cerca de 0,45 s após o contato também é alta; não a escolha.
  • Ambientes externos: as batidas do treinador e outras quadras adicionam ruído. Procure [tp−0,45, tp+0,25] s; se nada se qualificar, use tp.
  • Para cada jogada que termina em um clipe, confirme o quadro de contato real olhando os quadros.

2.5 Detectar backhands de uma mão (se o jogador estiver aprendendo)

  • Entre os backhands, pegue a distância máxima pulso a pulso (dividida pelo comprimento do tronco) dentro de 0,7 s após tp. Os de duas mãos mantêm ambas as mãos juntas até o final (geralmente abaixo de 1,5); os de uma mão abrem o braço não batente para trás (geralmente 2,0–2,5). A lacuna é clara; um limiar em torno de 1,95 funciona.
  • Ângulos de câmera fechados produzem falsos positivos; confirme cada candidato visualmente.
  • Para cada jogada de uma mão, registre: se a mão vai acima da cabeça na preparação, se a preparação é atrasada (preparação como uma de duas mãos, depois levantada no último momento), se o braço está reto no contato, altura do follow-through e o resultado.
  • Checklist de uma mão (para cada item: como o correto parece / esta sessão / veredito): giro da unidade com a mão contrária no pescoço da raquete, altura da preparação entre o peito e o ombro com a cabeça da raquete apontando para trás, a raquete cai baixo e depois balança de baixo para cima, contato à frente com o braço reto, braço contrário abre para trás, finalização alta e mantida sem que o peito gire cedo, joelhos dobrados e avançando. A empunhadura não pode ser vista por trás; sugira que o jogador a confirme com um treinador.

2.6 Contagem de rede/fora (apenas quando a bola está visível)

  • Parede de treino: marque a linha da rede no vídeo ampliado da parede. Para cada jogada, faça um tile: manchas amarelas em movimento sobre os 30 quadros após o contato, plotadas vermelho→verde pelo tempo, mais o movimento da cortina acima da linha da rede em uma segunda cor. Julgue cada tile a olho: cortina se move ou bola bate acima da linha = dentro; bola bate na placa e a cortina não se move = rede; bloqueado pelo jogador = ilegível. A classificação totalmente automática concorda com um humano apenas cerca de 60% do tempo, então use-a apenas como uma dica.
  • Amostragem: julgue 100 jogadas distribuídas uniformemente pela sessão, exclua as ilegíveis e reporte forehand / duas mãos / uma mão separadamente. Em seguida, revise as 20 jogadas mais suspeitas restantes para ver se os erros se concentram em um período (geralmente após o cansaço se instalar).
  • Ambientes externos: com árvores se movendo ao fundo ou muitos jogadores ao redor, a detecção de bola por cor e movimento falha principalmente. Não reporte uma porcentagem. Diga por que no relatório, escolha melhores/piores pela técnica e dê conselhos de câmera que tornariam a contagem possível.

2.7 Métricas de técnica (medidas em cada raqueteada)

MétricaComoO que revela
Mão de forehand acima do narizParcela dos quadros em [tp−1,1, tp−0,25] com o pulso batente acima do narizPreparação muito alta, balanço em loop
Ambas as mãos acima dos ombrosParcela da mesma janela com ambos os pulsos acima do centro do ombroRaquete de backhand segurada muito alta
Maior flexão de joelhoÂngulo mínimo quadril-joelho-tornozelo da perna da frente em [tp−0,6, tp+0,3], mediana entre as raqueteadaPernas muito retas (uma câmera por trás subestima a flexão para frente; compare apenas com você mesmo)
Largura da posturaDistância horizontal do tornozelo em tp ÷ comprimento do troncoPostura estreita geralmente acompanha saltos
Plantado e retoUm tornozelo se move menos de 0,4 comprimentos de tronco dentro de 0,7 s após tp, e esse joelho está mais reto que 155°Carga de torção no joelho (comum ao pivotear em backhands)
Altura do contatoPosição da mão batente entre quadril (0) e ombro (1), 0,07–0,2 s antes de tpQuantas bolas são altas e se o jogador ajusta a posição
Saltar / aterrissar em uma pernaContado a olho nas jogadas que você revisa quadro a quadroNenhuma métrica automática confiável ainda
  • Para sessões longas, reporte a primeira e a segunda metade separadamente para ver o que quebra com a fadiga.
  • Se a câmera, local ou método mudar, ou meça novamente os vídeos antigos da nova maneira ou diga claramente que os números não são comparáveis.

2.8 Escolher 3 melhores e 3 piores

  • Melhores: bom resultado (passa a rede confortavelmente, cai fundo) e um golpe completo (preparação na posição, cabeça da raquete cai abaixo da bola, finalização completa, ambos os pés no chão). Espalhe-os pela sessão.
  • Piores: rede, bolas para o alto ou erros claros; se não houver o suficiente, pegue as jogadas onde a falha técnica é mais clara. Prefira jogadas que mostrem causas diferentes, ou que juntas provem uma causa comum.
  • Faça uma shortlist a partir dos tiles de resultado, depois confirme a causa a partir das folhas de jogada por quadro (0,9 s antes a 0,5 s após o contato). Ao escolher os piores backhands, certifique-se de que não são de uma mão.

2.9 Renderizar clipes anotados em câmera lenta

  • Corte cerca de 3 s do original (começando 1,1–1,5 s antes do contato), recorte ao redor do jogador para aproximadamente 16:10 com o jogador cerca de 60% da altura do quadro e escale para 1280 de largura.
  • Execute a pose em cada quadro. Escolha quatro quadros manualmente: topo da preparação, contato, e início e fim do caminho desenhado (excluindo a posição de prontidão e recuperação). Os quadros de contato automáticos geralmente estão errados; sempre verifique visualmente.
  • Estrutura do clipe:
    1. Velocidade real uma vez.
    2. Velocidade reduzida a um quarto, desenhando o caminho da mão batente quadro a quadro (forehand = pulso batente; duas mãos = ponto médio de ambos os pulsos; uma mão = ponto médio antes do contato, pulso batente depois), gradiente laranja→ciano, com legendas para cada fase na parte inferior.
    3. Congelamento no topo da preparação por cerca de 3 s, circule-o (verde = correto, vermelho = problema) com uma manchete curta.
    4. Congelamento no contato por cerca de 3 s: círculo branco no ponto de contato (a posição automática geralmente erra a bola, então ajuste manualmente), círculo amarelo no joelho da frente com seu ângulo (pule para backhands de uma mão, onde as pernas se sobrepõem de lado).
    5. Congelamento no caminho completo. Nos piores clipes, sobreponha a melhor jogada da sessão do mesmo tipo, do início do caminho ao contato, escalada pelo comprimento do tronco e alinhada no centro do ombro, como uma linha tracejada verde animada com um contorno preto, mais uma frase sobre a correção.
  • Codifique H.264, yuv420p, faststart, 960 de largura, cerca de 1–2,5 MB por clipe. Faça uma folha de contato com 4 quadros de cada clipe para verificar se as legendas não cobrem nada e os círculos caem no lugar certo.
  • Evite ✓ e ✗ nas legendas; muitas fontes CJK não os têm e mostram quadrados.

3. Estrutura do relatório

Produza uma página HTML (ou o formato que o usuário pedir), nesta ordem:

  1. Veredito: responda à pergunta do jogador diretamente; maior melhoria, maior problema, números-chave; correções à revisão anterior. Abaixo disso, uma faixa de estatísticas (raqueteada por golpe, taxa de rede amostrada ou "não contada" com o motivo, uma ou duas métricas-chave).
  2. Causas: agrupe os problemas em 2–3 causas, cada uma com um exemplo com carimbo de tempo.
  3. Melhores vs piores: 4 grupos, cada um com 3 clipes, uma tabela de 3 colunas (preparação, queda, contato, finalização, pés, ângulo do joelho) e uma frase sobre o padrão.
  4. Comparado com a última vez: o que mudou na melhor e na pior jogada, como uma tabela mais clipes lado a lado.
  5. Backhand de uma mão (se praticando): estatísticas, checklist, 3 clipes bons e 3 ruins, lista jogada por jogada e conselho sobre se continuar treinando agora.
  6. Joelhos e trabalho de pés: tabela de métricas e riscos classificados em "prioridade / observar / melhorando", cada um com uma correção. Declare claramente que isso não é aconselhamento médico e sugira consultar um médico de medicina esportiva para inchaço, travamento, falseio ou dor com duração superior a uma semana.
  7. O que treinar a seguir: veja a seção 5.
  8. Conselhos de câmera (se a filmagem teve lacunas).
  9. Rodapé: fonte de dados, tamanho da amostra, definições de medição, limitações da câmera.

Direção de design opcional: uma paleta de tênis, com azul de quadra dura como cor principal, amarelo de bola apenas para números-chave e destaques, verde de grama para "bom" e vermelho de saibro para "problema". Numerais condensados para uma sensação de placar. Torne-o legível nos modos claro e escuro, sem rolagem horizontal em um celular.

4. Falhas comuns e correções

Classifique o que você vê com esta tabela primeiro, depois prove com jogadas específicas.

SintomaCausa usualComo aparece no vídeoCorreção
Forehand na rede, varrendo para baixoPreparação acima da cabeça, grande loop, raquete não consegue cair a tempoMão batente acima do nariz durante quase toda a preparação; a raquete desce íngreme e encontra a bola acima da linha do quadrilAbaixe a preparação: mantenha a cabeça da raquete abaixo do nível da bola durante a preparação e tente tocar a parte de baixo da bola
Bolas de forehead para o alto e para trásCotovelo bate, não estende o braçoA bola é rebatida com o pulso dobrado e o cotovelo dobrado, então o movimento guia a bola para cima e para trásSolte o braço: pratique o alongação total no contato e após ele; a empunhadura continental geralmente causa isso, então mude para semi-western ou western
Backhand consistente não cruza a redeA bola está batendo muito tarde ou o ponto de contato está muito longe do corpo, então o movimento não consegue seguir o caminho corretoA preparação está atrasada, resultando em contato com o braço já à frente do corpo; o movimento está sobrecarregadoMova a preparação para mais cedo e pratique bater a bola mais à frente do seu corpo
Backhand descontrolado para o altoFalta de giro da unidade; o ombro está muito alto no contatoO cotovelo está levantado e o corpo está aberto cedoFoque em girar o ombro e terminar com ambos os ombros em direção à rede; mantenha a cabeça da raquete abaixada sob a bola
Joelho que dobra repetidamenteO pé está plantado em uma perna reta e o joelho trava, então a torção força a articulaçãoA perna da frente está reta e o pé pivoteia; no replay em câmera lenta, o joelho mostra uma torção súbitaPratique cair para a frente na bola e pousar com o joelho dobrado; nunca pouse em uma perna reta
Jogador constantemente pulandoO trabalho de pés não está: ou o tempo está errado e o jogador não pode estar em posição no chão, ou o padrão de passos é muito estreitoA postura é estreita e ambos os pés estão no ar no contatoAlargue a postura e pratique passos de ajuste; pule apenas quando forçado por uma bola muito larga de um lado
Bola consistentemente alta parede/quadraO trabalho de pés está atrasado, então o jogador está em uma posição defensiva e deve golpear por baixo da bola para manter a trocaO jogador está recuando no contato e o movimento para cima é exageradoPratique mover-se para cima na quadra e pegar a bola mais cedo

5. O que treinar a seguir

Escreva um plano que o jogador possa executar, com este formato:

  1. Drill 1 (que treina a falha principal): descrição curta, repetições ou minutos, condição de sucesso para avançar.
  2. Drill 2 (falha secundária, ou progressão do drill 1): o mesmo formato.
  3. Drill 3 (se houver uma terceira prioridade).
  4. Drill 4 (opcional: condicionamento, ou um drill que amarre os anteriores).

Exemplo:

  • Drill 1: Sentindo a preparação baixa. Contra uma parede ou com alimentação, tente acertar 10 forehand seguidos com a cabeça da raquete abaixo da bola na preparação e a cabeça abaixo da mão. Avance quando sentir que isso é natural.
  • Drill 2: Ajuste com largura. Marque uma linha a 30 cm do seu pé da frente. Em cada forehand, dê um passo para a direita e coloque o pé da frente além da linha. Avance quando você se sentir estável e plantado.
  • Drill 3: Um backhand de duas mãos com contato à frente. Amarre uma corda na cintura e na raquete perto da corda; pratique 10 backhand segurados a 30 cm à frente do quadril. Se você golpear uma selfie, está muito perto.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Habilidades Relacionadas