← Tutti i lavori

Computer vision · 2026

Tactical Football

Una pipeline di computer vision per il calcio, dalla detection al tracking, dall'assegnazione delle squadre alla calibrazione del campo fino alla vista dall'alto, con ogni fase misurata su una ground truth annotata a mano.

Heatmap di occupazione vista dall'alto attorno al cerchio di centrocampo, costruita da posizioni annotate a mano su tre frame di una clip aerea.
accuracy assegnazione squadra (32/35)
0,914
su Apple M4 (clip sorgente: 25 FPS)
~30 FPS
errore dell'omografia sui frame di validazione
0,17–1,05 m

Il problema

Non un singolo compito isolato, ma una pipeline tattica completa in cui ogni fase si misura per conto suo: mAP per la detection, MOTA/IDF1 per il tracking, accuracy per l’assegnazione delle squadre, errore di riproiezione in metri per l’omografia. Volevo evitare di fermarmi al “sembra che funzioni”. Il tutto dentro vincoli realistici: un solo sviluppatore, un portatile (Apple M4, PyTorch/MPS), clip royalty-free e niente accesso a SoccerNet.

Cosa ho costruito

Detection (YOLOv8n) → Tracking (ByteTrack) → Squadra (KMeans su H,S del busto)
  → Omografia (RANSAC, coordinate FIFA) → vista dall'alto, heatmap, distanza
  • Detector COCO pre-addestrato messo a confronto con un fine-tuning su pseudo-label, provato su due clip.
  • ByteTrack tramite supervision, che gestisce occlusioni brevi e tracce perse invece di un abbinamento ingenuo frame per frame.
  • Assegnazione delle squadre non supervisionata, con filtri che escludono i pixel d’erba e quelli scuri.
  • Omografia validata su frame diversi da quello usato per stimarla.
  • Ground truth manuale per ogni componente (precisione dichiarata ±15–20 px), benchmark degli FPS e una dashboard Streamlit per esplorare nuove clip.

Risultati

FaseRisultato
Assegnazione squadraaccuracy 0,914 (32/35), il numero migliore della pipeline
Detection, clip principaleAP@0,5 persone da 0,353 a 0,408 dopo il fine-tuning; palla 0,000
Detection, seconda clippersone 0,747 e palla 1,000 con il baseline; dopo il fine-tuning 0,521
TrackingMOTA −0,30, IDF1 0,43, un solo cambio di identità su 40 istanze
Omografiaerrore medio di 0,165 m e 1,045 m sui due frame di validazione
Velocità~30–33 FPS su M4/MPS, sopra i 25 FPS della clip

Il risultato più istruttivo: il fine-tuning ha peggiorato la generalizzazione. Sulla clip principale aiuta, ma su una clip con luce e inquadratura diverse scende da 0,747 a 0,521. È overfitting al dominio, e lo riporto invece di nasconderlo dietro un generico “il fine-tuning funziona”. Anche il MOTA negativo va letto nel suo contesto: gran parte dei “falsi positivi” sono persone reali escluse dalla ground truth per scelta, e la frammentazione delle tracce nasce dalla recall limitata del detector a monte, non dal tracker.

Limiti

Il detector generico non trova nessun giocatore nella ripresa aerea verticale, quindi le analisi dall’alto usano posizioni annotate a mano, e il codice lo dichiara esplicitamente. Le riprese sono amatoriali e da drone, non televisive. L’omografia è calibrata solo attorno al cerchio di centrocampo. La palla si perde nelle riprese a bassa risoluzione e mosse.