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, 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(
    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, 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(
    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 QueueManager

Nombre Tipo Por defecto Descripci贸n
classes_names dict model.names Un diccionario que asigna ID de clase a nombres de clase.
reg_pts list of tuples [(20, 400), (1260, 400)] Puntos que definen el pol铆gono de la regi贸n de recuento. Por defecto es un rect谩ngulo predefinido.
line_thickness int 2 Grosor de las l铆neas de anotaci贸n.
track_thickness int 2 Grosor de las l铆neas de la v铆a.
view_img bool False Si se muestran los marcos de la imagen.
region_color tuple (255, 0, 255) Color de las l铆neas de la regi贸n de recuento (BGR).
view_queue_counts bool True Si se muestra el recuento de colas.
draw_tracks bool False Si se dibujan las huellas de los objetos.
count_txt_color tuple (255, 255, 255) Color del texto de recuento (BGR).
track_color tuple None Color de las v铆as. Si Nonese utilizar谩n colores diferentes para las distintas v铆as.
region_thickness int 5 Grosor de las l铆neas de la regi贸n de recuento.
fontsize float 0.7 Tama帽o de letra para las anotaciones de texto.

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 2024-04-02, Actualizado 2024-05-18
Autores: glenn-jocher (2), Burhan-Q (1), RizwanMunawar (1)

Comentarios