Vai al contenuto

Conteggio degli oggetti con Ultralytics YOLOv8 🚀

Che cos'è il conteggio degli oggetti?

Il conteggio degli oggetti con Ultralytics YOLOv8YOLOv8 eccelle nelle applicazioni in tempo reale, fornendo un conteggio efficiente e preciso degli oggetti in 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: Class-wise Object Counting using 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 conta pacchetti utilizzando Ultralytics YOLOv8 Conteggio dei pesci in mare utilizzando Ultralytics YOLOv8
Nastro trasportatore conta pacchetti utilizzando Ultralytics YOLOv8 Conteggio dei pesci in mare utilizzando Ultralytics YOLOv8

Esempio di conteggio degli oggetti con YOLOv8

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
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, 404), (1080, 360), (20, 360)]

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

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=region_points,
    classes_names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

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

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
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 as a polygon with 5 points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360), (20, 400)]

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

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=region_points,
    classes_names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

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

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
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 line points
line_points = [(20, 400), (1080, 400)]

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

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=line_points,
    classes_names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

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

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
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))

line_points = [(20, 400), (1080, 400)]  # line or region points
classes_to_count = [0, 2]  # person and car classes for count

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

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=line_points,
    classes_names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False, classes=classes_to_count)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
La regione è mobile

Puoi spostare la regione in qualsiasi punto della cornice cliccando sui suoi bordi.

Argomento ObjectCounter

Ecco una tabella con i dati ObjectCounter argomenti:

Nome Tipo Predefinito Descrizione
classes_names dict None Dizionario dei nomi delle classi.
reg_pts list [(20, 400), (1260, 400)] Elenco dei punti che definiscono la regione di conteggio.
count_reg_color tuple (255, 0, 255) Colore RGB della regione di conteggio.
count_txt_color tuple (0, 0, 0) Colore RGB del testo del conteggio.
count_bg_color tuple (255, 255, 255) Colore RGB dello sfondo del testo del conteggio.
line_thickness int 2 Spessore delle linee per i riquadri di delimitazione.
track_thickness int 2 Spessore delle linee dei binari.
view_img bool False Flag per controllare se visualizzare il flusso video.
view_in_counts bool True Flag per controllare se visualizzare o meno i conteggi nel flusso video.
view_out_counts bool True Flag per controllare se visualizzare i conteggi di uscita nel flusso video.
draw_tracks bool False Flag per controllare se disegnare o meno le tracce dell'oggetto.
track_color tuple None Colore RGB delle tracce.
region_thickness int 5 Spessore della regione di conteggio dell'oggetto.
line_dist_thresh int 15 Soglia della distanza euclidea per il contatore di linee.
cls_txtdisplay_gap int 50 Visualizza l'intervallo tra il conteggio di ogni classe.

Argomenti model.track

Nome Tipo Predefinito Descrizione
source im0 None directory di origine per le immagini o i video
persist bool False persistenza dei brani tra i fotogrammi
tracker str botsort.yaml Metodo di tracciamento 'bytetrack' o 'botsort'
conf float 0.3 Soglia di fiducia
iou float 0.5 Soglia IOU
classes list None filtrare i risultati per classe, ad esempio classi=0 o classi=[0,2,3].
verbose bool True Visualizza i risultati del tracciamento dell'oggetto


Created 2023-12-02, Updated 2024-06-10
Authors: glenn-jocher (14), IvorZhu331 (1), RizwanMunawar (6), AyushExel (1)

Commenti