Conteggio degli oggetti utilizzando Ultralytics YOLO11
Cos'è il conteggio degli oggetti?
Il conteggio degli oggetti con Ultralytics YOLO11 comporta l'identificazione e il conteggio accurati di oggetti specifici in video e flussi di telecamere. YOLO11 eccelle nelle applicazioni in tempo reale, fornendo un conteggio degli oggetti efficiente e preciso per vari scenari come l'analisi della folla e la sorveglianza, grazie ai suoi algoritmi all'avanguardia e alle capacità di deep learning.
Guarda: Come eseguire il conteggio degli oggetti in tempo reale con Ultralytics YOLO11 🍏
Vantaggi del Conteggio degli Oggetti
- Ottimizzazione delle risorse: Il conteggio degli oggetti facilita la gestione efficiente delle risorse fornendo conteggi accurati, ottimizzando l'allocazione delle risorse in applicazioni come la gestione dell'inventario.
- Maggiore sicurezza: Il conteggio degli oggetti migliora la sicurezza e la sorveglianza tracciando e contando accuratamente le entità, aiutando nel rilevamento proattivo delle minacce.
- Processo decisionale informato: Il conteggio degli oggetti offre preziose informazioni per il processo decisionale, ottimizzando i processi nel commercio al dettaglio, nella gestione del traffico e in vari altri settori.
Applicazioni nel mondo reale
Logistica | Acquacoltura |
---|---|
![]() |
![]() |
Conteggio di Pacchetti su Nastro Trasportatore Utilizzando Ultralytics YOLO11 | Conteggio dei pesci in mare usando Ultralytics YOLO11 |
Conteggio degli oggetti usando Ultralytics YOLO
# Run a counting example
yolo solutions count show=True
# Pass a source video
yolo solutions count source="path/to/video.mp4"
# Pass region coordinates
yolo solutions count region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"
# region_points = [(20, 400), (1080, 400)] # line counting
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)] # rectangle region
# region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360), (20, 400)] # polygon region
# Video writer
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Initialize object counter object
counter = solutions.ObjectCounter(
show=True, # display the output
region=region_points, # pass region points
model="yolo11n.pt", # model="yolo11n-obb.pt" for object counting with OBB model.
# classes=[0, 2], # count specific classes i.e. person and car with COCO pretrained model.
# tracker="botsort.yaml", # choose trackers i.e "bytetrack.yaml"
)
# Process video
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or processing is complete.")
break
results = counter(im0)
# print(results) # access the output
video_writer.write(results.plot_im) # write the processed frame.
cap.release()
video_writer.release()
cv2.destroyAllWindows() # destroy all opened windows
ObjectCounter
Argomenti
Ecco una tabella con i ObjectCounter
argomenti:
Argomento | Tipo | Predefinito | Descrizione |
---|---|---|---|
model |
str |
None |
Percorso del file del modello Ultralytics YOLO. |
show_in |
bool |
True |
Flag per controllare se visualizzare i conteggi in streaming video. |
show_out |
bool |
True |
Flag per controllare se visualizzare i conteggi out streaming video. |
region |
list |
'[(20, 400), (1260, 400)]' |
Elenco dei punti che definiscono la regione di conteggio. |
Il ObjectCounter
solution consente l'utilizzo di diversi track
argomenti:
Argomento | Tipo | Predefinito | Descrizione |
---|---|---|---|
tracker |
str |
'botsort.yaml' |
Specifica l'algoritmo di tracking da utilizzare, ad esempio: bytetrack.yaml oppure botsort.yaml . |
conf |
float |
0.3 |
Imposta la soglia di confidenza per i rilevamenti; valori inferiori consentono di tracciare più oggetti, ma potrebbero includere falsi positivi. |
iou |
float |
0.5 |
Imposta la soglia Intersection over Union (IoU) per filtrare i rilevamenti sovrapposti. |
classes |
list |
None |
Filtra i risultati per indice di classe. Per esempio, classes=[0, 2, 3] traccia solo le classi specificate. |
verbose |
bool |
True |
Controlla la visualizzazione dei risultati del tracking, fornendo un output visivo degli oggetti tracciati. |
device |
str |
None |
Specifica il dispositivo per l'inferenza (ad esempio, cpu , cuda:0 oppure 0 ). Consente agli utenti di scegliere tra CPU, una GPU specifica o altri dispositivi di calcolo per l'esecuzione del modello. |
Inoltre, sono supportati gli argomenti di visualizzazione elencati di seguito:
Argomento | Tipo | Predefinito | Descrizione |
---|---|---|---|
show |
bool |
False |
Se True , visualizza le immagini o i video annotati in una finestra. Utile per un feedback visivo immediato durante lo sviluppo o il test. |
line_width |
None or int |
None |
Specifica lo spessore della linea dei riquadri di delimitazione. Se None , lo spessore della linea viene regolato automaticamente in base alle dimensioni dell'immagine, fornendo una personalizzazione visiva per una maggiore chiarezza. |
show_conf |
bool |
True |
Visualizza il punteggio di confidenza per ogni rilevamento accanto all'etichetta, offrendo una panoramica sulla certezza del modello per ogni rilevamento. |
show_labels |
bool |
True |
Mostra le etichette per ogni rilevamento nell'output visivo, fornendo una comprensione immediata degli oggetti rilevati. |
FAQ
Come posso contare gli oggetti in un video usando Ultralytics YOLO11?
Per contare gli oggetti in un video utilizzando Ultralytics YOLO11, puoi seguire questi passaggi:
- Importa le librerie necessarie (
cv2
,ultralytics
). - Definire la regione di conteggio (ad esempio, un poligono, una linea, ecc.).
- Imposta l'acquisizione video e inizializza il contatore di oggetti.
- Elabora ogni fotogramma per tracciare gli oggetti e contarli all'interno della regione definita.
Ecco un semplice esempio di conteggio in una regione:
import cv2
from ultralytics import solutions
def count_objects_in_region(video_path, output_video_path, model_path):
"""Count objects in a specific region within a video."""
cap = cv2.VideoCapture(video_path)
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]
counter = solutions.ObjectCounter(show=True, region=region_points, model=model_path)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or processing is complete.")
break
results = counter(im0)
video_writer.write(results.plot_im)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolo11n.pt")
Per configurazioni e opzioni più avanzate, consulta la soluzione RegionCounter per il conteggio simultaneo di oggetti in più regioni.
Quali sono i vantaggi dell'utilizzo di Ultralytics YOLO11 per il conteggio di oggetti?
L'utilizzo di Ultralytics YOLO11 per il conteggio degli oggetti offre diversi vantaggi:
- Ottimizzazione delle risorse: Facilita la gestione efficiente delle risorse fornendo conteggi accurati, aiutando a ottimizzare l'allocazione delle risorse in settori come la gestione dell'inventario.
- Maggiore sicurezza: Migliora la sicurezza e la sorveglianza tracciando e contando accuratamente le entità, aiutando nel rilevamento proattivo delle minacce e nei sistemi di sicurezza.
- Processi Decisionali Informati: Offre preziose informazioni per il processo decisionale, ottimizzando i processi in settori come la vendita al dettaglio, la gestione del traffico e altro ancora.
- Elaborazione in tempo reale: L'architettura di YOLO11 consente l'inferenza in tempo reale, rendendolo adatto per flussi video live e applicazioni che richiedono tempi di risposta rapidi.
Per esempi di implementazione e applicazioni pratiche, esplora la soluzione TrackZone per il tracciamento di oggetti in zone specifiche.
Come posso contare classi specifiche di oggetti utilizzando Ultralytics YOLO11?
Per contare classi specifiche di oggetti utilizzando Ultralytics YOLO11, è necessario specificare le classi a cui si è interessati durante la fase di tracciamento. Di seguito è riportato un esempio in python:
import cv2
from ultralytics import solutions
def count_specific_classes(video_path, output_video_path, model_path, classes_to_count):
"""Count specific classes of objects in a video."""
cap = cv2.VideoCapture(video_path)
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
line_points = [(20, 400), (1080, 400)]
counter = solutions.ObjectCounter(show=True, region=line_points, model=model_path, classes=classes_to_count)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or processing is complete.")
break
results = counter(im0)
video_writer.write(results.plot_im)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
count_specific_classes("path/to/video.mp4", "output_specific_classes.avi", "yolo11n.pt", [0, 2])
In questo esempio, classes_to_count=[0, 2]
significa che conta gli oggetti della classe 0
e 2
(ad esempio, persona e auto nel dataset COCO). Puoi trovare maggiori informazioni sugli indici di classe nel Documentazione del dataset COCO.
Perché dovrei usare YOLO11 rispetto ad altri modelli di object detection per applicazioni in tempo reale?
Ultralytics YOLO11 offre diversi vantaggi rispetto ad altri modelli di rilevamento oggetti come Faster R-CNN, SSD e le precedenti versioni di YOLO:
- Velocità ed efficienza: YOLO11 offre capacità di elaborazione in tempo reale, rendendolo ideale per applicazioni che richiedono inferenza ad alta velocità, come la sorveglianza e la guida autonoma.
- Precisione: Fornisce una precisione all'avanguardia per attività di rilevamento e tracciamento degli oggetti, riducendo il numero di falsi positivi e migliorando l'affidabilità complessiva del sistema.
- Facilità di integrazione: YOLO11 offre un'integrazione perfetta con varie piattaforme e dispositivi, inclusi dispositivi mobili e edge, il che è fondamentale per le moderne applicazioni di IA.
- Flessibilità: Supporta varie attività come il rilevamento di oggetti, la segmentazione e il tracciamento con modelli configurabili per soddisfare requisiti specifici del caso d'uso.
Consulta la documentazione di Ultralytics YOLO11 per un approfondimento sulle sue caratteristiche e sui confronti delle prestazioni.
Posso utilizzare YOLO11 per applicazioni avanzate come l'analisi della folla e la gestione del traffico?
Sì, Ultralytics YOLO11 è perfettamente adatto per applicazioni avanzate come l'analisi della folla e la gestione del traffico grazie alle sue capacità di rilevamento in tempo reale, alla scalabilità e alla flessibilità di integrazione. Le sue funzionalità avanzate consentono il tracciamento, il conteggio e la classificazione degli oggetti ad alta precisione in ambienti dinamici. Esempi di casi d'uso includono:
- Analisi della folla: Monitora e gestisci grandi raduni, garantendo la sicurezza e ottimizzando il flusso della folla con il conteggio basato sulla regione.
- Gestione del traffico: Traccia e conta i veicoli, analizza i modelli di traffico e gestisci la congestione in tempo reale con funzionalità di stima della velocità.
- Retail Analytics: Analizza i modelli di movimento dei clienti e le interazioni con i prodotti per ottimizzare la disposizione del negozio e migliorare l'esperienza del cliente.
- Automazione industriale: Contare i prodotti sui nastri trasportatori e monitorare le linee di produzione per il controllo qualità e i miglioramenti dell'efficienza.
Per applicazioni più specializzate, esplora le Soluzioni Ultralytics per una serie completa di strumenti progettati per le sfide del mondo reale nella computer vision.