SpotAI

Como funciona

O projeto é dividido em quatro partes independentes. A parte pesada (a IA) roda uma vez por jogo; o resto é leve e fica no ar de graça.

  1. IA

    PC com GPU da equipe

    Lê o vídeo, detecta e rastreia os jogadores, projeta na quadra, separa os times e calcula as estatísticas. Gera um results.json por jogo.

    backend/ai
  2. API

    Vercel (função Python)

    FastAPI leve, sem modelos. Recebe o results.json com um token e serve os jogos para o site.

    backend/api
  3. Banco

    Supabase (Postgres)

    Guarda jogos, times, jogadores e arremessos. Qualquer pessoa lê; só a API escreve.

    supabase/
  4. Site

    Vercel (Next.js)

    O que você está vendo: lista de jogos, estatísticas, mapas de calor e shotmap.

    frontend

Homografia

O piso da quadra é um plano. Qualquer imagem de um plano se liga à vista de cima dele por uma matriz 3×3, a homografia. Com ela, o ponto onde o pé do jogador toca o chão vira uma posição em metros, e daí saem distância, velocidade e mapas de calor.

A equipe testou quatro formas de calcular essa matriz. A escolhida usa pontos, linhas e arcos da quadra e errou em média 5 a 7 cm em pontos de conferência. Tudo virou uma biblioteca aberta, independente do resto do projeto, que serve para qualquer esporte de quadra.

Ler a documentação da biblioteca court-homography
imagem da câmeraHquadra em metros
O mesmo jogador (ponto ciano) antes e depois da homografia.

Principais decisões

Calibração manual por vídeo
A câmera é fixa e o detector de quadra do 5x5 não generalizou para o 3x3.
Calibração com linhas e arcos, não só pontos
Resolve os cantos da quadra cortados pelo ângulo da câmera.
Quadra oficial FIBA 3x3 como referência
Garante as medidas em metros reais.
Times pela cor dos uniformes
Os uniformes mudam de jogo para jogo; não precisa treinar modelo novo.
Filtro espacial pela posição na quadra
Exclui banco, torcida e aquecimento na outra metade.
IA roda fora da nuvem
Sem GPU gratuita na Vercel; processar local e publicar só o resultado mantém o custo em zero.