Vai al contenuto

Gestione delle code con Ultralytics YOLOv8 🚀

Che cos'è la gestione delle code?

La gestione delle code Ultralytics YOLOv8 consiste nell'organizzare e controllare le code di persone o veicoli per ridurre i tempi di attesa e migliorare l'efficienza. Si tratta di ottimizzare le code per migliorare la soddisfazione dei clienti e le prestazioni del sistema in vari contesti come la vendita al dettaglio, le banche, gli aeroporti e le strutture sanitarie.

Vantaggi della gestione delle code?

  • Riduzione dei tempi di attesa: I sistemi di gestione delle code organizzano in modo efficiente le code, riducendo al minimo i tempi di attesa dei clienti. Questo porta a migliorare i livelli di soddisfazione dei clienti, che passano meno tempo ad aspettare e più tempo a interagire con i prodotti o i servizi.
  • Maggiore efficienza: L'implementazione della gestione delle code consente alle aziende di allocare le risorse in modo più efficace. Analizzando i dati sulle code e ottimizzando l'impiego del personale, le aziende possono snellire le operazioni, ridurre i costi e migliorare la produttività complessiva.

Applicazioni nel mondo reale

Logistica Vendita al dettaglio
Gestione delle code alla biglietteria dell'aeroporto con Ultralytics YOLOv8 Monitoraggio delle code nella folla con Ultralytics YOLOv8
Gestione delle code alla biglietteria dell'aeroporto Utilizzo Ultralytics YOLOv8 Monitoraggio delle code nella folla Ultralytics YOLOv8

Esempio di gestione delle code con YOLOv8

import cv2
from ultralytics import YOLO
from ultralytics.solutions import queue_management

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))

video_writer = cv2.VideoWriter("queue_management.avi",
                               cv2.VideoWriter_fourcc(*'mp4v'),
                               fps,
                               (w, h))

queue_region = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

queue = queue_management.QueueManager()
queue.set_args(classes_names=model.names,
               reg_pts=queue_region,
               line_thickness=3,
               fontsize=1.0,
               region_color=(255, 144, 31))

while cap.isOpened():
    success, im0 = cap.read()

    if success:
        tracks = model.track(im0, show=False, persist=True,
                             verbose=False)
        out = queue.process_queue(im0, tracks)

        video_writer.write(im0)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
        continue

    print("Video frame is empty or video processing has been successfully completed.")
    break

cap.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO
from ultralytics.solutions import queue_management

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))

video_writer = cv2.VideoWriter("queue_management.avi",
                               cv2.VideoWriter_fourcc(*'mp4v'),
                               fps,
                               (w, h))

queue_region = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

queue = queue_management.QueueManager()
queue.set_args(classes_names=model.names,
               reg_pts=queue_region,
               line_thickness=3,
               fontsize=1.0,
               region_color=(255, 144, 31))

while cap.isOpened():
    success, im0 = cap.read()

    if success:
        tracks = model.track(im0, show=False, persist=True,
                             verbose=False, classes=0)  # Only person class
        out = queue.process_queue(im0, tracks)

        video_writer.write(im0)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
        continue

    print("Video frame is empty or video processing has been successfully completed.")
    break

cap.release()
cv2.destroyAllWindows()

Argomenti opzionali set_args

Nome Tipo Predefinito Descrizione
view_img bool False Visualizza i fotogrammi con i conteggi
view_queue_counts bool True Visualizza i conteggi della coda solo sul fotogramma video
line_thickness int 2 Aumenta lo spessore dei riquadri di delimitazione
reg_pts list [(20, 400), (1260, 400)] Punti che definiscono l'area della regione
classes_names dict model.model.names Dizionario dei nomi delle classi
region_color RGB Color (255, 0, 255) Colore dell'oggetto che conta la regione o la linea
track_thickness int 2 Spessore delle linee di tracciamento
draw_tracks bool False Abilita il disegno delle linee di tracciamento
track_color RGB Color (0, 255, 0) Colore per ogni linea di binari
count_txt_color RGB Color (255, 255, 255) Colore di primo piano per il testo dei conteggi degli oggetti
region_thickness int 5 Spessore per la regione o la linea del contatore dell'oggetto
fontsize float 0.6 Dimensione del carattere del testo di conteggio

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


Creato 2024-04-02, Aggiornato 2024-04-02
Autori: Burhan-Q (1), RizwanMunawar (1)

Commenti