Salta para o conteúdo

Gestão de filas de espera utilizando Ultralytics YOLOv8 🚀

O que é a gestão de filas de espera?

Gestão de filas de espera utilizando Ultralytics YOLOv8 envolve a organização e o controlo de filas de pessoas ou veículos para reduzir os tempos de espera e aumentar a eficiência. Trata-se de otimizar as filas de espera para melhorar a satisfação do cliente e o desempenho do sistema em vários contextos, como o comércio a retalho, os bancos, os aeroportos e as unidades de saúde.

Vantagens da gestão de filas de espera?

  • Redução dos tempos de espera: Os sistemas de gestão de filas organizam as filas de forma eficiente, minimizando os tempos de espera dos clientes. Isto leva a melhores níveis de satisfação, uma vez que os clientes passam menos tempo à espera e mais tempo a interagir com os produtos ou serviços.
  • Aumenta a eficiência: A implementação da gestão de filas de espera permite que as empresas atribuam recursos de forma mais eficaz. Ao analisar os dados das filas de espera e otimizar a distribuição do pessoal, as empresas podem simplificar as operações, reduzir os custos e melhorar a produtividade geral.

Aplicações no mundo real

Logística Retalho
Gestão de filas de espera na bilheteira do aeroporto utilizando Ultralytics YOLOv8 Monitorização de filas de espera em multidões utilizando Ultralytics YOLOv8
Gestão de filas de espera na bilheteira do aeroporto Utilizar Ultralytics YOLOv8 Monitorização de filas de espera na multidão Ultralytics YOLOv8

Gestão de filas de espera utilizando YOLOv8 Exemplo

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

Nome Tipo Predefinição Descrição
classes_names dict model.names Um dicionário que mapeia IDs de classe para nomes de classe.
reg_pts list of tuples [(20, 400), (1260, 400)] Pontos que definem o polígono da região de contagem. Usa por defeito um retângulo predefinido.
line_thickness int 2 Espessura das linhas de anotação.
track_thickness int 2 Espessura das linhas de traçado.
view_img bool False Se pretende apresentar as molduras de imagem.
region_color tuple (255, 0, 255) Cor das linhas da região de contagem (BGR).
view_queue_counts bool True Mostra ou não as contagens das filas de espera.
draw_tracks bool False Se queres desenhar os rastos dos objectos.
count_txt_color tuple (255, 255, 255) Cor do texto de contagem (BGR).
track_color tuple None Cor das faixas. Se NoneSe quiseres, podes utilizar cores diferentes para faixas diferentes.
region_thickness int 5 Espessura das linhas da região de contagem.
fontsize float 0.7 Tamanho do tipo de letra para as anotações de texto.

Argumentos model.track

Nome Tipo Predefinição Descrição
source im0 None diretório de origem para imagens ou vídeos
persist bool False persistência de faixas entre fotogramas
tracker str botsort.yaml Método de rastreio 'bytetrack' ou 'botsort'
conf float 0.3 Limiar de confiança
iou float 0.5 Limiar IOU
classes list None filtra os resultados por classe, ou seja, classes=0, ou classes=[0,2,3]
verbose bool True Apresenta os resultados do rastreio de objectos


Criado em 2024-04-02, Atualizado em 2024-05-18
Autores: glenn-jocher (2), Burhan-Q (1), RizwanMunawar (1)

Comentários