Перейти к содержимому

Управление очередью с помощью Ultralytics YOLOv8 🚀.

Что такое управление очередью?

Управление очередью с помощью Ultralytics YOLOv8 предполагает организацию и контроль очередей людей или транспортных средств для сокращения времени ожидания и повышения эффективности. Речь идет об оптимизации очередей для повышения удовлетворенности клиентов и производительности системы в различных условиях, таких как розничная торговля, банки, аэропорты и медицинские учреждения.

Преимущества управления очередью?

  • Сокращение времени ожидания: Системы управления очередью эффективно организуют очереди, сводя к минимуму время ожидания для клиентов. Это приводит к повышению уровня удовлетворенности, так как клиенты тратят меньше времени на ожидание и больше на работу с продуктами или услугами.
  • Повышение эффективности: Внедрение системы управления очередями позволяет предприятиям более эффективно распределять ресурсы. Анализируя данные об очередях и оптимизируя распределение персонала, предприятия могут оптимизировать работу, сократить расходы и повысить общую производительность.

Применение в реальном мире

Логистика Розничная торговля
Управление очередью в билетной кассе аэропорта с помощью Ultralytics YOLOv8 Контроль очередей в толпе с помощью Ultralytics YOLOv8
Управление очередью в билетной кассе аэропорта Использование Ultralytics YOLOv8 Мониторинг очередей в толпе Ultralytics YOLOv8

Управление очередью с помощью YOLOv8 Пример

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

Необязательные аргументы set_args

Имя Тип По умолчанию Описание
view_img bool False Отображение кадров с подсчетами
view_queue_counts bool True Отображение количества очередей только на видеокадре
line_thickness int 2 Увеличьте толщину ограничительных рамок
reg_pts list [(20, 400), (1260, 400)] Точки, определяющие область региона
classes_names dict model.model.names Словарь названий классов
region_color RGB Color (255, 0, 255) Цвет области подсчета объектов или линии
track_thickness int 2 Толщина линий трекинга
draw_tracks bool False Включить рисование линий трека
track_color RGB Color (0, 255, 0) Цвет для каждой линии трека
count_txt_color RGB Color (255, 255, 255) Цвет переднего плана для текста подсчета объектов
region_thickness int 5 Толщина для области счетчика объектов или линии
fontsize float 0.6 Размер шрифта текста для подсчета

Аргументы model.track

Имя Тип По умолчанию Описание
source im0 None исходный каталог для изображений или видео
persist bool False Сохранение треков между кадрами
tracker str botsort.yaml Метод отслеживания 'bytetrack' или 'botsort'
conf float 0.3 Порог доверия
iou float 0.5 Порог IOU
classes list None Фильтруй результаты по классам, то есть classes=0, или classes=[0,2,3]
verbose bool True Отображение результатов отслеживания объектов


Создано 2024-04-02, Обновлено 2024-04-02
Авторы: Burhan-Q (1), RizwanMunawar (1)

Комментарии