Vai al contenuto

Conteggio degli oggetti con Ultralytics YOLO11

Che cos'è il conteggio degli oggetti?

Conteggio degli oggetti aperti in Colab

Il conteggio degli oggetti con Ultralytics YOLO11 comporta l'identificazione e il conteggio accurato di oggetti specifici in video e flussi di telecamere. YOLO11 eccelle nelle applicazioni in tempo reale, fornendo un conteggio efficiente e preciso degli oggetti per vari scenari come l'analisi della folla e la sorveglianza, grazie ai suoi algoritmi all'avanguardia e alle capacità di deep learning.



Guarda: Conteggio degli oggetti in base alla classe utilizzando Ultralytics YOLOv8

Vantaggi del conteggio degli oggetti

  • Ottimizzazione delle risorse: Il conteggio degli oggetti facilita una gestione efficiente delle risorse, fornendo conteggi accurati e ottimizzando l'allocazione delle risorse in applicazioni come la gestione dell'inventario.
  • Maggiore sicurezza: Il conteggio degli oggetti migliora la sicurezza e la sorveglianza grazie al tracciamento e al conteggio accurato delle entità, favorendo il rilevamento proattivo delle minacce.
  • Decisioni informate: Il conteggio degli oggetti offre spunti preziosi per il processo decisionale, ottimizzando i processi nella vendita al dettaglio, nella gestione del traffico e in vari altri settori.

Applicazioni nel mondo reale

Logistica Acquacoltura
Nastro trasportatore Conteggio pacchetti utilizzando Ultralytics YOLO11 Conteggio dei pesci in mare utilizzando Ultralytics YOLO11
Nastro trasportatore Conteggio pacchetti utilizzando Ultralytics YOLO11 Conteggio dei pesci in mare utilizzando Ultralytics YOLO11

Conteggio degli oggetti con 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 dati ObjectCounter argomenti:

Argomento Tipo Predefinito Descrizione
model str None Percorso del file del modelloYOLO Ultralytics .
show_in bool True Flag per controllare se visualizzare o meno i conteggi nel flusso video.
show_out bool True Flag per controllare se visualizzare i conteggi di uscita nel flusso video.
region list [(20, 400), (1260, 400)] Elenco dei punti che definiscono la regione di conteggio.

Il ObjectCounter La soluzione consente l'utilizzo di diversi track argomenti:

Argomento Tipo Predefinito Descrizione
tracker str 'botsort.yaml' Specifica l'algoritmo di tracciamento da utilizzare, ad es, bytetrack.yaml o botsort.yaml.
conf float 0.3 Imposta la soglia di confidenza per i rilevamenti; valori più bassi consentono di tracciare un maggior numero di oggetti, ma possono includere falsi positivi.
iou float 0.5 Imposta la soglia Intersection over Union (IoU) per il filtraggio dei rilevamenti sovrapposti.
classes list None Filtra i risultati per indice di classe. Ad esempio, classes=[0, 2, 3] tiene traccia solo delle classi specificate.
verbose bool True Controlla la visualizzazione dei risultati del tracciamento, fornendo un output visivo degli oggetti tracciati.
device str None Specifica il dispositivo per l'inferenza (ad es, cpu, cuda:0 o 0). Consente agli utenti di scegliere tra CPU, uno specifico GPU 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 Truevisualizza 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 la larghezza della linea delle caselle di delimitazione. Se NoneLa larghezza della linea viene regolata automaticamente in base alle dimensioni dell'immagine. Fornisce una personalizzazione visiva per la chiarezza.

FAQ

Come si contano gli oggetti in un video utilizzando Ultralytics YOLO11 ?

Per contare gli oggetti in un video utilizzando Ultralytics YOLO11 , si può procedere come segue:

  1. Importare le librerie necessarie (cv2, ultralytics).
  2. Definire la regione di conteggio (ad esempio, un poligono, una linea, ecc.).
  3. Impostare l'acquisizione video e inizializzare il contatore di oggetti.
  4. Elaborare 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, date un'occhiata alla soluzione RegionCounter per il conteggio degli oggetti in più regioni contemporaneamente.

Quali sono i vantaggi dell'utilizzo di Ultralytics YOLO11 per il conteggio degli oggetti?

L'utilizzo di Ultralytics YOLO11 per il conteggio degli oggetti offre diversi vantaggi:

  1. Ottimizzazione delle risorse: Facilita una gestione efficiente delle risorse fornendo conteggi accurati e aiutando a ottimizzare l'allocazione delle risorse in settori come la gestione dell'inventario.
  2. Maggiore sicurezza: Migliora la sicurezza e la sorveglianza tracciando e contando con precisione le entità, favorendo il rilevamento proattivo delle minacce e i sistemi di sicurezza.
  3. Decisioni informate: Offre spunti preziosi per il processo decisionale, ottimizzando i processi in settori come la vendita al dettaglio, la gestione del traffico e altri ancora.
  4. Elaborazione in tempo reale: L'architettura di YOLO11 consente l'inferenza in tempo reale, rendendolo adatto ai flussi video in diretta e alle applicazioni sensibili al tempo.

Per esempi di implementazione e applicazioni pratiche, esplorate la soluzione TrackZone per il tracciamento di oggetti in zone specifiche.

Come si possono 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 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 di classe 0 e 2 (ad esempio, persona e auto nel set di dati COCO). Per ulteriori informazioni sugli indici di classe, consultare la sezione Documentazione del set di dati COCO.

Perché utilizzare YOLO11 rispetto ad altri modelli di rilevamento degli oggetti per le applicazioni in tempo reale?

Ultralytics YOLO11 offre diversi vantaggi rispetto ad altri modelli di rilevamento degli oggetti come Faster R-CNN, SSD e le versioni precedenti di YOLO :

  1. Velocità ed efficienza: YOLO11 offre capacità di elaborazione in tempo reale, che lo rendono ideale per le applicazioni che richiedono un'inferenza ad alta velocità, come la sorveglianza e la guida autonoma.
  2. Precisione: offre una precisione all'avanguardia per le attività di rilevamento e tracciamento degli oggetti, riducendo il numero di falsi positivi e migliorando l'affidabilità complessiva del sistema.
  3. Facilità di integrazione: YOLO11 offre un'integrazione perfetta con diverse piattaforme e dispositivi, compresi quelli mobili ed edge, che è fondamentale per le moderne applicazioni di intelligenza artificiale.
  4. Flessibilità: Supporta diverse attività come il rilevamento, la segmentazione e il tracciamento degli oggetti con modelli configurabili per soddisfare i requisiti di casi d'uso specifici.

Consultate ladocumentazione di Ultralytics YOLO11 per un'analisi più approfondita delle sue caratteristiche e del confronto delle prestazioni.

È possibile utilizzare YOLO11 per applicazioni avanzate come l'analisi della folla e la gestione del traffico?

Sì, Ultralytics YOLO11 è perfettamente adatto ad 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 caratteristiche avanzate consentono il tracciamento, il conteggio e la classificazione degli oggetti ad alta precisione in ambienti dinamici. Esempi di utilizzo sono:

  • Analisi delle folle: Monitorate e gestite i grandi raduni, garantendo la sicurezza e ottimizzando il flusso della folla con il conteggio su base regionale.
  • Gestione del traffico: Traccia e conta i veicoli, analizza i modelli di traffico e gestisce la congestione in tempo reale con funzionalità di stima della velocità.
  • Analitica del commercio al dettaglio: Analizzare i modelli di movimento dei clienti e le interazioni con i prodotti per ottimizzare il layout dei negozi e migliorare l'esperienza dei clienti.
  • Automazione industriale: Contare i prodotti sui nastri trasportatori e monitorare le linee di produzione per il controllo della qualità e il miglioramento dell'efficienza.

Per applicazioni più specializzate, esplorate le soluzioniUltralytics , che offrono una serie completa di strumenti progettati per affrontare le sfide della computer vision nel mondo reale.

📅C reato 1 anno fa ✏️ Aggiornato 6 giorni fa

Commenti