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
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 opcionais set_args

Nome Tipo Predefinição Descrição
view_img bool False Apresenta quadros com contagens
view_queue_counts bool True Apresenta a contagem de filas apenas no fotograma de vídeo
line_thickness int 2 Aumenta a espessura das caixas delimitadoras
reg_pts list [(20, 400), (1260, 400)] Pontos que definem a área da região
classes_names dict model.model.names Dicionário de nomes de classes
region_color RGB Color (255, 0, 255) Cor da região ou linha de contagem de objectos
track_thickness int 2 Espessura das linhas de rastreio
draw_tracks bool False Ativar o desenho de linhas de traço
track_color RGB Color (0, 255, 0) Cor para cada linha de pista
count_txt_color RGB Color (255, 255, 255) Cor de primeiro plano para o texto de contagem de objectos
region_thickness int 5 Espessura da região ou linha do contador de objectos
fontsize float 0.6 Tamanho da letra do texto de contagem

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-04-02
Autores: Burhan-Q (1), RizwanMunawar (1)

Comentários