Progetti

Swish AI

Ho addestrato un’AI a seguire ogni tiro e tenere il conto.

Un'app di Computer Vision che guarda video di basket, traccia giocatori, palla e canestro con un modello YOLOv11 addestrato su misura, e sovrappone al video le statistiche di tiro in tempo reale.

DataOttobre 2025
StatoOpen source
Tech stack
  • Python
  • YOLOv11
  • PyTorch
  • OpenCV
  • FastAPI
  • React
Output dal vivo: SwishAI traccia il canestro e conta i tiri in tempo reale.

Da dove nasce

Ho giocato a basket per anni, e ogni sessione di tiro finisce allo stesso modo: perdi il conto. Erano 60 canestri su 90, o 70 su 110? La domanda sembra banale, finché non ti accorgi che tenerne traccia seriamente, ogni sessione, onestamente, è esattamente quel tipo di lavoro noioso che una macchina dovrebbe fare al posto tuo.

SwishAI è ciò che è successo quando quel prurito ha incontrato la mia curiosità per l'object detection. Volevo puntare una videocamera sul campo, non fare nient'altro, e ricevere la mia percentuale al tiro. Niente wearable, niente tagging manuale, niente app da toccare tra un tiro e l'altro. Solo il video, e la verità.

Cosa fa

Carichi un video di basket e SwishAI rileva cinque cose contemporaneamente: la palla, la palla dentro il canestro, il giocatore, il ferro, e il gesto del tiro. Da quei rilevamenti deriva ciò che conta davvero, tiri tentati, tiri segnati, percentuale dal campo in tempo reale, e lo ridisegna sul video, con un'animazione a impulso ogni volta che una palla entra.

Si comporta da prodotto, non da script. Tre modalità di elaborazione (tracking completo, statistiche ed effetti, solo statistiche), soglie di confidenza regolabili classe per classe per adattarsi a condizioni di luce difficili, e una Test Mode che elabora solo i primi 15 secondi per validare il setup prima di lanciare il render completo.

Addestrare su una GPU del 2016

Il modello è uno YOLOv11s rifinito su circa 10.000 immagini di basket annotate. La parte umiliante è stata l'hardware: una GTX 1060 con 6 GB di VRAM, che ha significato 48 ore di training continuo, batch size 8, mixed precision, e uno script di addestramento tarato attorno a ognuno di quei limiti.

L'augmentation è specifica per il basket, saturazione HSV extra perché una palla arancione sopravviva alle luci di una palestra, shear per gestire angoli di ripresa strani, mixup per tenere separabili i giocatori nei frame affollati. E rilevare non basta per segnare: un livello di fisica aggiunge dei cooldown (1,5 s per tiro, 2 s per canestro) così un jump shot non viene mai contato due volte.

0.909mAP50 su 5 classi
10kimmagini annotate
48hdi training su una GTX 1060
200epoche
Accuratezza per classe: la diagonale è quanto spesso ogni classe viene letta correttamente. Forte su ferro e giocatore; i due eventi più rari, palla nel canestro e il gesto del tiro, sono i più difficili, e lo mostro onestamente.

Il post che ha fatto il giro

Ho condiviso su LinkedIn una clip di SwishAI che contava i miei canestri, aspettandomi il solito educato silenzio. Invece è decollata: migliaia di reazioni, centinaia di commenti, messaggi da allenatori, sviluppatori e perfetti sconosciuti che chiedevano come funzionasse. Resta la mia prova preferita che i side project migliori sono quelli che risolvono un problema che hai davvero.

Quella reazione ha cambiato il modo in cui guardavo al progetto. Un esperimento da weekend aveva evidentemente toccato un nervo scoperto: così ho smesso di trattare SwishAI come una demo e ho iniziato a progettarlo come un vero prodotto, che chiunque possa puntare su un campo e semplicemente usare. Quella versione è in costruzione proprio ora.

Qualcosa sta arrivando. Presto online.

Altri progetti