Saltar al contenido

Gesti贸n de colas mediante Ultralytics YOLOv8 馃殌

驴Qu茅 es la Gesti贸n de Colas?

La gesti贸n de colas mediante Ultralytics YOLOv8 consiste en organizar y controlar colas de personas o veh铆culos para reducir los tiempos de espera y mejorar la eficacia. Se trata de optimizar las colas para mejorar la satisfacci贸n del cliente y el rendimiento del sistema en diversos entornos como comercios, bancos, aeropuertos y centros sanitarios.

驴Ventajas de la gesti贸n de colas?

  • Tiempos de espera reducidos: Los sistemas de gesti贸n de colas organizan eficazmente las colas, minimizando los tiempos de espera de los clientes. Esto mejora los niveles de satisfacci贸n, ya que los clientes pasan menos tiempo esperando y m谩s tiempo interactuando con los productos o servicios.
  • Mayor eficacia: La implantaci贸n de la gesti贸n de colas permite a las empresas asignar recursos de forma m谩s eficaz. Analizando los datos de las colas y optimizando el despliegue de personal, las empresas pueden agilizar las operaciones, reducir costes y mejorar la productividad general.

Aplicaciones en el mundo real

Log铆stica Venta al por menor
Gesti贸n de colas en el mostrador de venta de billetes del aeropuerto mediante Ultralytics YOLOv8 Control de colas en multitudes mediante Ultralytics YOLOv8
Gesti贸n de colas en el mostrador de venta de billetes del aeropuerto Utilizaci贸n Ultralytics YOLOv8 Control de colas en multitudes Ultralytics YOLOv8

Gesti贸n de colas mediante YOLOv8 Ejemplo

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

Argumentos opcionales set_args

Nombre Tipo Por defecto Descripci贸n
view_img bool False Mostrar cuadros con recuentos
view_queue_counts bool True Mostrar los recuentos de la cola s贸lo en el fotograma de v铆deo
line_thickness int 2 Aumentar el grosor de los cuadros delimitadores
reg_pts list [(20, 400), (1260, 400)] Puntos que definen el 脕rea de la Regi贸n
classes_names dict model.model.names Diccionario de nombres de clase
region_color RGB Color (255, 0, 255) Color de la regi贸n o l铆nea de recuento de objetos
track_thickness int 2 Grosor de las l铆neas de seguimiento
draw_tracks bool False Activar dibujo L铆neas de seguimiento
track_color RGB Color (0, 255, 0) Color para cada l铆nea de v铆a
count_txt_color RGB Color (255, 255, 255) Color de primer plano del texto del recuento de objetos
region_thickness int 5 Grosor de la contra regi贸n o l铆nea del objeto
fontsize float 0.6 Tama帽o de letra del texto de recuento

Argumentos model.track

Nombre Tipo Por defecto Descripci贸n
source im0 None directorio fuente de im谩genes o v铆deos
persist bool False persistencia de pistas entre fotogramas
tracker str botsort.yaml M茅todo de seguimiento 'bytetrack' o 'botsort'
conf float 0.3 Umbral de confianza
iou float 0.5 Umbral del pagar茅
classes list None filtrar los resultados por clase, es decir, classes=0, o classes=[0,2,3]
verbose bool True Mostrar los resultados del seguimiento de objetos


Creado el 2024-04-02, Actualizado el 2024-04-02
Autores: Burhan-Q (1), RizwanMunawar (1)

Comentarios