Communitygithub.com

zakezhang/tennis-video-private-coach-zh

Analisa vídeos de treino de tênis e gera relatórios detalhados: identifica cada swing, distingue forehand/backhand, seleciona os melhores e piores golpes com vídeos em câmera lenta e trajetórias, estatísticas de rede (quando visível), verifica joelhos e pés, compara com sessões anteriores e sugere o próximo treino específico.

O que é tennis-video-private-coach-zh?

Esta skill transforma um vídeo de treino de um tenista amador em um relatório de análise acionável. Ela utiliza visão computacional (Ultralytics YOLO pose estimation), processamento de áudio e heurísticas para identificar cada swing, classificar forehands/backhands, avaliar a qualidade dos golpes (rede, erro, profundidade), e analisar movimento dos pés e joelhos. O relatório destaca os 3 melhores e 3 piores golpes de cada tipo, com vídeos em câmera lenta anotados (trajetória do swing, ângulo do joelho, ponto de contato). A análise de áudio detecta o momento exato do contato com a bola, sincronizando com o vídeo. O usuário recebe um diagnóstico preciso dos problemas (ex: preparação tardia, ombro alto, aterrissagem em um pé), com evidências visuais e um plano de treino personalizado (próximos passos, número de repetições). A skill é projetada para ambientes sem GPU, funcionando com Python 3 e ffmpeg, e suporta diversos cenários: parede de treino, máquina de bolas, alimentação do técnico e rally.

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-zh

Perguntar na sua IA favorita

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

Documentação

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)

  1. 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.
  2. Mão dominante (esquerda/direita), backhand é de uma mão ou duas mãos, está treinando ambos ao mesmo tempo.
  3. Nível e objetivo: há quanto tempo treina, o que deseja alcançar (ex: "conseguir jogar um set até o fim do ano").
  4. Cenário de treino: parede / máquina de bolas / alimentação do técnico / rally; quadra coberta ou ao ar livre.
  5. Posição da câmera: atrás, lateral ou frontal; altura do celular; taxa de quadros.
  6. Lesões: joelho, ombro, cotovelo, costas estão doloridos recentemente? Se sim, focar no movimento dos pés e aterrissagem.
  7. 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.
  8. 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, use yolo11m-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étricaComo MedirO que Indica
Forehand: mão da raquete acima do nariz na preparaçãoProporção de frames em [tp-1.1, tp-0.25] onde o punho da raquete está acima do narizPreparação muito alta, grande círculo
Ambas as mãos acima do ombroProporção de frames na mesma janela onde ambas as mãos estão acima da linha do ombroBackhand com raquete muito vertical
Maior flexão de joelhoMínimo do ângulo quadril-joelho-tornozelo da perna da frente em [tp-0.6, tp+0.3], medianaSe a perna está muito reta (ângulo de trás subestima a flexão; comparar apenas consigo mesmo)
Distância entre os pésDistância lateral entre os dois tornozelos em tp ÷ comprimento do troncoPés muito próximos frequentemente acompanhados de pulos
Perna travada e retaDeslocamento 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 golpePosiçã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 quadroAtualmente 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:
    1. Reprodução em velocidade normal uma vez;
    2. 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;
    3. Congelar no ponto mais alto da preparação por ~3 segundos, circule a posição (verde = correto, vermelho = problema) com texto grande;
    4. 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);
    5. 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:

  1. 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).
  2. Causas: agrupe os problemas em 2-3 categorias, cada uma com um exemplo de um momento específico.
  3. 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.
  4. Comparação com a Anterior: o que mudou no melhor e no pior golpe; tabela com vídeos lado a lado.
  5. 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.
  6. 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.
  7. Próximo Treino: veja Seção 5.
  8. Sugestões de Filmagem (quando o material atual tiver deficiências).
  9. 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ômenoCausa Raiz ComumComo Identificar no VídeoCorreção
Forehand erra a rede, golpe de cima para baixoPreparação acima da cabeça, grande círculo, descida tardiaPonto mais alto da preparação: mão acima do nariz, cabeça da raquete atrás da cabeçaPreparaçã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 fundoTrajetória muito vertical; bola alta levantada do joelho parado; final do swing em direção ao topo da cabeçaFinal do swing acima da cabeça; altura do golpe perto do ombroFinal 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 variaPreparação tardia: bola larga estica o braço (para trás, longe do corpo), bola rápida golpeia ao ladoNo golpe: braço esticado, pessoa inclinada para fora; ou raquete quase não foi para trásAo 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 impulsionaRaquete vertical na frente do peito/ombro, descida tardiaNa preparação, ambas as mãos acima do ombro, cabeça da raquete para cimaRaquete 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çarDistância entre pés pequena; no frame de golpe, ambos os pés no ar; após o golpe, uma perna reta segura o pesoNo último passo, pare primeiro, pise com os dois pés, depois balance; avançar após o golpe
Desconforto no joelho ao girar no backhandPé da frente preso no chão, perna reta ao girarApó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 altaPrimeiro posiciona como two-handed, depois muda para one-handed; mão acima da cabeçaFrame de golpe claramente atrasado; preparação com mão acima da cabeçaDecida 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 cobertaBola mais rápida, quica mais alta; acostumado com bolas lentas e baixasAltura do golpe mais alta; preparação mais tardiaUse 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.

Individual skills in this repo

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

Habilidades Relacionadas