Explicació detallada del codi i les biblioteques
1. Llibreries utilitzades i noves possibilitats
- ultralytics (YOLO): Proporciona models com YOLOv8 per a la detecció precisa d’objectes en imatges i vídeos.
- opencv-python-headless: Biblioteca per al processament d’imatges i vídeos sense necessitat d’interfície gràfica.
- deep_sort_realtime: Implementació de DeepSORT per fer tracking d’objectes amb assignació d’ID.
- google.colab.files: Permet pujar i descarregar fitxers en Google Colab.
2. Explicació pas a pas del codi
Instal·lació de llibreries
!pip install ultralytics opencv-python-headless deep_sort_realtime
Importació de mòduls
import cv2
import pandas as pd
from ultralytics import YOLO
from deep_sort_realtime.deepsort_tracker import DeepSort
from google.colab import files
import os
Pujar el vídeo
uploaded = files.upload()
video_path = list(uploaded.keys())[0]
print(f'Fitxer pujat: {video_path}')
Carregar el model YOLOv8
model = YOLO('yolov8n.pt')
Configuració del tracker DeepSORT
tracker = DeepSort(max_age=30)
Obrir i preparar el vídeo
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
output_path = '/content/output_tracked.mp4'
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))
Inicialització de dades
data = []
frame_count = 0
Processament de cada frame
- Lectura de frames: Llegeix cada frame del vídeo.
- Predicció amb YOLO: Detecta persones.
- Conversió de resultats: Format per DeepSORT.
- Tracking: Assignació d’ID únics.
- Dibuix i anotació: Visualització de caixes i IDs.
- Emmagatzematge: Guarda informació per a l’anàlisi.
- Escriptura del frame: Guarda el vídeo final.
Tancament i alliberament de recursos
cap.release()
out.release()
cv2.destroyAllWindows()
print(f'Vídeo amb tracking guardat a: {output_path}')
Estadístiques bàsiques
df = pd.DataFrame(data)
counts = df.groupby('track_id')['frame'].nunique()
seconds_visible = counts / fps
print('\n⏱ Temps visible per jugador (segons):')
print(seconds_visible)
Descarregar el vídeo resultant
files.download(output_path)
3. Possibilitats noves amb aquest flux de treball
- Seguiment automàtic: Ideal per a vídeos d’esports o seguretat.
- Estadístiques personalitzades: Com temps de presència o freqüència d’aparició.
- Facilitat d’ús: Tot des de Colab, sense instal·lacions locals.
- Adaptabilitat: Permet detectar altres objectes canviant la classe a YOLO.
- Exportació i visualització: Útil per a informes, entrenament i recerca.
En resum
Aquest codi aprofita les últimes tecnologies de detecció (YOLOv8) i tracking (DeepSORT) per automatitzar l’anàlisi de vídeos, obrint la porta a aplicacions avançades en esports, seguretat i investigació.
🔗 Enllaços útils: