Vai al contenuto

Conteggio degli oggetti con Ultralytics YOLO11

Che cos'è il conteggio degli oggetti?

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 con Ultralytics YOLOv8

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

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 YOLO11 Esempio

# Run a counting example
yolo solutions count show=True

# Pass a source video
yolo solutions count source="path/to/video/file.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/file.mp4")
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))

# Define region points
# region_points = [(20, 400), (1080, 400)]  # For line counting
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]  # For rectangle region counting
# region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360), (20, 400)]  # For polygon region counting

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init ObjectCounter
counter = solutions.ObjectCounter(
    show=True,  # Display the output
    region=region_points,  # Pass region points
    model="yolo11n.pt",  # model="yolo11n-obb.pt" for object counting using YOLO11 OBB model.
    # classes=[0, 2],  # If you want to count specific classes i.e person and car with COCO pretrained model.
    # show_in=True,  # Display in counts
    # show_out=True,  # Display out counts
    # line_width=2,  # Adjust the line width for bounding boxes and text display
)

# Process video
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    im0 = counter.count(im0)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()

Argomento ObjectCounter

Ecco una tabella con i dati ObjectCounter argomenti:

Nome Tipo Predefinito Descrizione
model str None Percorso del file del modello Ultralytics YOLO
region list [(20, 400), (1260, 400)] Elenco dei punti che definiscono la regione di conteggio.
line_width int 2 Spessore delle linee per i riquadri di delimitazione.
show bool False Flag per controllare se visualizzare il flusso video.
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.

Argomenti model.track

Argomento Tipo Predefinito Descrizione
source str None Specifica la directory di origine delle immagini o dei video. Supporta percorsi di file e URL.
persist bool False Consente il tracciamento persistente degli oggetti tra i fotogrammi, mantenendo gli ID tra le sequenze video.
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.

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 video processing has been successfully completed.")
            break
        im0 = counter.count(im0)
        video_writer.write(im0)

    cap.release()
    video_writer.release()
    cv2.destroyAllWindows()


count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolo11n.pt")

Per ulteriori configurazioni e opzioni, consultare la sezione Conteggio oggetti.

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, 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.
  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.

Per applicazioni reali ed esempi di codice, visitate la sezione Vantaggi del conteggio degli oggetti.

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 video processing has been successfully completed.")
            break
        im0 = counter.count(im0)
        video_writer.write(im0)

    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], il che significa che conta gli oggetti della classe 0 e 2 (ad esempio, persona e auto).

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 precedenti versioni 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: Monitorare e gestire i grandi raduni, garantendo la sicurezza e ottimizzando il flusso della folla.
  • Gestione del traffico: Traccia e conta i veicoli, analizza i modelli di traffico e gestisce la congestione in tempo reale.

Per ulteriori informazioni e dettagli sull'implementazione, consultare la guida sulle applicazioni reali del conteggio degli oggetti con YOLO11.

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

Commenti