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.



Guarda: Come implementare la gestione delle code con Ultralytics YOLOv8 | Aeroporto e stazione della metropolitana

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

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 = solutions.QueueManager(
    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, 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))

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 = solutions.QueueManager(
    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 QueueManager

Nome Tipo Predefinito Descrizione
names dict model.names Un dizionario che mappa gli ID delle classi con i nomi delle classi.
reg_pts list of tuples [(20, 400), (1260, 400)] Punti che definiscono il poligono della regione di conteggio. Per impostazione predefinita è un rettangolo predefinito.
line_thickness int 2 Spessore delle linee di annotazione.
track_thickness int 2 Spessore delle linee dei binari.
view_img bool False Se visualizzare le cornici dell'immagine.
region_color tuple (255, 0, 255) Colore delle linee della regione di conteggio (BGR).
view_queue_counts bool True Se visualizzare il conteggio delle code.
draw_tracks bool False Se disegnare o meno le tracce degli oggetti.
count_txt_color tuple (255, 255, 255) Colore del testo del conteggio (BGR).
track_color tuple None Colore dei binari. Se None, verranno utilizzati colori diversi per i diversi tracciati.
region_thickness int 5 Spessore delle linee della regione di conteggio.
fontsize float 0.7 Dimensione del carattere per le annotazioni di testo.

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

DOMANDE FREQUENTI

Come posso utilizzare Ultralytics YOLOv8 per la gestione delle code in tempo reale?

Per utilizzare Ultralytics YOLOv8 per la gestione delle code in tempo reale, puoi seguire i seguenti passaggi:

  1. Carica il modello YOLOv8 con YOLO("yolov8n.pt").
  2. Cattura il feed video utilizzando cv2.VideoCapture.
  3. Definisci la regione di interesse (ROI) per la gestione delle code.
  4. Elabora i frame per rilevare gli oggetti e gestire le code.

Ecco un esempio minimo:

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video.mp4")
queue_region = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

queue = solutions.QueueManager(
    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)
        cv2.imshow("Queue Management", im0)
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break

cap.release()
cv2.destroyAllWindows()

L'utilizzo di Ultralytics HUB può semplificare questo processo, fornendo una piattaforma di facile utilizzo per l'implementazione e la gestione della tua soluzione di gestione delle code.

Quali sono i principali vantaggi dell'utilizzo di Ultralytics YOLOv8 per la gestione delle code?

L'utilizzo di Ultralytics YOLOv8 per la gestione delle code offre diversi vantaggi:

  • Riduzione dei tempi di attesa: Organizza in modo efficiente le code, riducendo i tempi di attesa dei clienti e aumentandone la soddisfazione.
  • Migliorare l'efficienza: Analizza i dati sulle code per ottimizzare l'impiego del personale e le operazioni, riducendo così i costi.
  • Avvisi in tempo reale: Fornisce notifiche in tempo reale per le code lunghe, consentendo un intervento rapido.
  • Scalabilità: Facilmente scalabile in ambienti diversi come la vendita al dettaglio, gli aeroporti e la sanità.

Per maggiori dettagli, esplora le nostre soluzioni di Queue Management.

Perché dovrei scegliere Ultralytics YOLOv8 rispetto a concorrenti come TensorFlow o Detectron2 per la gestione delle code?

Ultralytics YOLOv8 ha diversi vantaggi rispetto a TensorFlow e Detectron2 per la gestione delle code:

  • Prestazioni in tempo reale: YOLOv8 è noto per le sue capacità di rilevamento in tempo reale, che offrono una maggiore velocità di elaborazione.
  • Facilità d'uso: Ultralytics offre un'esperienza facile da usare, dalla formazione all'implementazione, tramite Ultralytics HUB.
  • Modelli preaddestrati: Accesso a una serie di modelli preaddestrati, che riducono al minimo il tempo necessario per la configurazione.
  • Supporto della comunità: L'ampia documentazione e il supporto attivo della comunità facilitano la risoluzione dei problemi.

Scopri come iniziare a lavorare con Ultralytics YOLO.

Ultralytics YOLOv8 è in grado di gestire più tipi di code, come ad esempio negli aeroporti e nei negozi?

Sì, Ultralytics YOLOv8 può gestire diversi tipi di code, comprese quelle degli aeroporti e degli ambienti di vendita al dettaglio. Configurando il QueueManager con regioni e impostazioni specifiche, YOLOv8 può adattarsi a diversi layout e densità delle code.

Esempio per gli aeroporti:

queue_region_airport = [(50, 600), (1200, 600), (1200, 550), (50, 550)]
queue_airport = solutions.QueueManager(
    names=model.names,
    reg_pts=queue_region_airport,
    line_thickness=3,
    fontsize=1.0,
    region_color=(0, 255, 0),
)

Per maggiori informazioni sulle diverse applicazioni, consulta la nostra sezione Applicazioni del mondo reale.

Quali sono le applicazioni reali di Ultralytics YOLOv8 nella gestione delle code?

Ultralytics YOLOv8 è utilizzato in diverse applicazioni reali per la gestione delle code:

  • Vendita al dettaglio: Monitora le linee di cassa per ridurre i tempi di attesa e migliorare la soddisfazione dei clienti.
  • Aeroporti: Gestisce le code alle biglietterie e ai controlli di sicurezza per rendere più agevole l'esperienza dei passeggeri.
  • Assistenza sanitaria: Ottimizza il flusso dei pazienti in cliniche e ospedali.
  • Banche: Migliora il servizio ai clienti gestendo in modo efficiente le code nelle banche.

Per saperne di più, consulta il nostro blog sulla gestione delle code nel mondo reale.



Creato 2024-04-02, Aggiornato 2024-07-14
Autori: RizwanMunawar (1), glenn-jocher (5), IvorZhu331 (1), Burhan-Q (1)

Commenti