In questo articolo scoprirai cos’è YOLO e come utilizzarlo per analizzare un video, riconoscere e contare le persone presenti al suo interno. Vedremo come scrivere un semplice script in Python, configurabile, che consente di scegliere la sorgente video più adatta alle proprie esigenze.

Cos’è YOLO?

YOLO (You Only Look Once) è un algoritmo di object detection in tempo reale basato su reti neurali.
In parole semplici, YOLO analizza ogni frame di un video (che sia un file o un flusso da webcam/IP camera) per identificare oggetti come persone, veicoli, animali e molto altro.

🔗 Per un approfondimento su YOLO, puoi consultare questo link.

Cos’è OpenCV?

OpenCV (Open Source Computer Vision Library) è una libreria open-source originariamente sviluppata da Intel, il cui scopo principale è facilitare l’elaborazione delle immagini e la computer vision.

Grazie a OpenCV, possiamo elaborare un flusso video aggiungendo informazioni visive sugli oggetti riconosciuti, come ad esempio disegnare riquadri attorno alle persone rilevate da YOLO.

🔗 Per maggiori dettagli su OpenCV, visita questo link.

Cos’è Python?

Python è uno dei linguaggi di programmazione più diffusi al mondo. Semplice, potente e molto utilizzato nei settori del machine learning, della data analysis e dell’intelligenza artificiale.

🔗 Abbiamo già parlato di Python in questo articolo.

L’idea

L’obiettivo di questo progetto è iniziare a esplorare il mondo dell’intelligenza artificiale in modo semplice e pratico, realizzando un primo esperimento concreto con YOLO e OpenCV.

Cosa serve

Per questo progetto ho utilizzato

  • Python 3.12.6
  • Yolo 8.3.169
  • OpenCV 4.12.0.88
  • GPU Nvidia GeForce RTX 3060TI

Il codice

Lo script è stato progettato per permettere all’utente di configurare i seguenti parametri:

  • Selezione del modello YOLO da utilizzare
  • Scelta della sorgente video (file locale, webcam, URL IP)
  • Abilitazione o meno della GPU

In base alle impostazioni scelte, possono cambiare le prestazioni e la fluidità del video risultante. Una volta configurati i parametri iniziali, lo script scarica automaticamente il modello YOLO richiesto.

La parte principale del codice è contenuta nel file cv_player.py.

Inizializzazione della finestra di output

Vengono lette le dimensioni del flusso video:

frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))

E viene recuperato il numero di fotogrammi al secondo:

frames_per_second = int(cap.get(cv2.CAP_PROP_FPS))

Analisi e tracciamento

Per ogni frame letto, si esegue il riconoscimento:

results = model(img, stream=True, device=selected_device)

Dai risultati è possibile individuare le coordinate per disegnare un box attorno agli oggetti rilevati. Inoltre, lo script utilizza la libreria deep_sort_realtime per assegnare a ogni persona rilevata un ID univoco, utile per il tracciamento nel tempo:

tracker = DeepSort(max_age=frames_per_second)

Visualizzazione

Infine, viene aggiornato il frame con le informazioni rilevate:

cvzone.putTextRect(img, f'ID: {track_id}', (x1, max(30, y1 - 10)), scale=1, thickness=1)
cvzone.putTextRect(img, f"Detected {len(unique_ids)} unique people", (15, 25), scale=0.75, thickness=1)
cv2.imshow("main", img)

Conclusioni

Questo è stato il mio primo esperimento con YOLO, OpenCV e il riconoscimento di oggetti tramite intelligenza artificiale.
Spero in futuro di poter aggiungere ulteriori funzionalità a questo script, oppure crearne di nuovi per esplorare ancora più a fondo il mondo della computer vision.

🔗 Per il codice completo puoi cliccare su questo link.

💬 Hai suggerimenti o domande? Lascia pure un commento qui sotto!

Di admin

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *