§1O problema
As ferramentas comerciais de análise por jogador são fechadas e não deixam corrigir erros nem ficar com os dados. Eu queria algo parecido, mas corrigível e com os dados na minha mão.
§2O que eu construí
- ImportadorTraz os jogos do match.day automaticamente (só leitura, por cópia com hard link, a cada 10 min).
- Pipeline de análisePython: detecção de pessoas e bola, rastreio, ligação de pedaços de trilha, separação de times por cor.
- Tela de revisãoMarcar o campo (pixel para metro) e rever o rastreio: juntar/separar trilhas, trocar de time, desfazer.
- Quem é quemSugestão pela camisa: recortes de cada jogador são agrupados em folhas e lidos por um modelo de IA.
- NúmerosDistância, velocidade, sprints, mapa de calor, lances por regras e ficha do jogador.
- Filme do jogadorVídeo só de um jogador, com a câmera seguindo ele.
§3As partes difíceis
5 itens- 01
Manter a identidade de cada jogador por 60 min
No teste foram 625 trocas de identidade em 4 min, e esse continua sendo o ponto fraco.
- 02
Modelo de câmera do panorama
Cilíndrico com correção de lente, para converter pixel em metro: erro médio de 0,8 m com 7 pontos marcados.
- 03
Bug real achado na medição
Os tempos ficavam 0,98 s defasados quando o áudio começava antes do vídeo.
- 04
Avaliar com métrica de verdade
HOTA contra um conjunto público com gabarito, em vez de só “parecer bom”.
- 05
Fila de trabalhos pesados na GPU
Um de cada vez.
§4Resultado
- HOTA no clipe de teste
- 0,42
- recall
- 92%
- precisão
- 87%
No clipe de teste de 4 min com gabarito: HOTA 0,42 (versão final), recall de 92% e precisão de 87%. Para referência, o ByteTrack fica em ~0,42 e o vencedor de 2025 em 0,60. O match.pro ainda não substituiu a análise do match.day; isso só acontece quando ele der conta de 3 jogos reais de ponta a ponta.
§5Stack
- Python (PyTorch / CUDA)
- YOLO11
- BoxMOT / BoT-SORT / OSNet
- Node / Next.js 16
- TypeScript
- SQLite
- ffmpeg
- LLM por linha de comando
- pm2
- Tailscale