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.



Observa: Como implementar a gestão de filas de espera com Ultralytics YOLOv8 | Aeroporto e estação de metro

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

Argumentos QueueManager

Nome Tipo Predefinição Descrição
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

FAQ

Como posso utilizar Ultralytics YOLOv8 para a gestão de filas de espera em tempo real?

Para utilizar Ultralytics YOLOv8 para a gestão de filas em tempo real, podes seguir estes passos:

  1. Carrega o modelo YOLOv8 com YOLO("yolov8n.pt").
  2. Captura o feed de vídeo utilizando cv2.VideoCapture.
  3. Define a região de interesse (ROI) para a gestão de filas.
  4. Processa quadros para detetar objetos e gerenciar filas.

Aqui tens um exemplo mínimo:

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

A utilização do Ultralytics HUB pode simplificar este processo, fornecendo uma plataforma de fácil utilização para implementar e gerir a sua solução de gestão de filas.

Quais são as principais vantagens de utilizar Ultralytics YOLOv8 para a gestão de filas de espera?

A utilização do Ultralytics YOLOv8 para a gestão de filas de espera oferece várias vantagens:

  • Diminui os tempos de espera: Organiza eficazmente as filas de espera, reduzindo os tempos de espera dos clientes e aumentando a sua satisfação.
  • Aumenta a eficiência: Analisa os dados das filas de espera para otimizar a distribuição do pessoal e as operações, reduzindo assim os custos.
  • Alertas em tempo real: Fornece notificações em tempo real para filas de espera longas, permitindo uma intervenção rápida.
  • Escalabilidade: Facilmente escalável em diferentes ambientes, como retalho, aeroportos e cuidados de saúde.

Para mais informações, explora as nossas soluções de gestão de filas de espera.

Por que razão devo escolher Ultralytics YOLOv8 em vez de concorrentes como TensorFlow ou Detectron2 para a gestão de filas de espera?

Ultralytics YOLOv8 tem várias vantagens sobre TensorFlow e Detectron2 para a gestão de filas de espera:

  • Desempenho em tempo real: YOLOv8 é conhecido pelas suas capacidades de deteção em tempo real, oferecendo velocidades de processamento mais rápidas.
  • Facilidade de utilização: Ultralytics proporciona uma experiência fácil de utilizar, desde a formação à implementação, através do Ultralytics HUB.
  • Modelos pré-treinados: Acede a uma gama de modelos pré-treinados, minimizando o tempo necessário para a configuração.
  • Suporte da comunidade: A documentação extensa e o suporte ativo da comunidade facilitam a resolução de problemas.

Aprende a começar com Ultralytics YOLO.

A Ultralytics YOLOv8 consegue gerir vários tipos de filas de espera, por exemplo, em aeroportos e no comércio retalhista?

Sim, Ultralytics YOLOv8 pode gerir vários tipos de filas de espera, incluindo as de aeroportos e ambientes de retalho. Ao configurar o QueueManager com regiões e definições específicas, o YOLOv8 pode adaptar-se a diferentes disposições e densidades de filas.

Exemplo de aeroportos:

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

Para mais informações sobre diversas aplicações, consulta a nossa secção Aplicações do mundo real.

Quais são algumas das aplicações reais de Ultralytics YOLOv8 na gestão de filas de espera?

Ultralytics YOLOv8 é utilizado em várias aplicações do mundo real para a gestão de filas de espera:

  • Retalho: Monitoriza as filas de caixa para reduzir os tempos de espera e melhorar a satisfação dos clientes.
  • Aeroportos: Gere as filas de espera nos balcões de venda de bilhetes e nos pontos de controlo de segurança para facilitar a experiência dos passageiros.
  • Cuidados de saúde: Optimiza o fluxo de pacientes em clínicas e hospitais.
  • Bancos: Melhora o serviço ao cliente gerindo as filas de espera de forma eficiente nos bancos.

Consulta o nosso blogue sobre gestão de filas de espera no mundo real para saberes mais.



Criado em 2024-04-02, Atualizado em 2024-07-14
Autores: RizwanMunawar (1), glenn-jocher (5), IvorZhu331 (1), Burhan-Q (1)

Comentários