跳至内容

使用Ultralytics YOLOv8 进行队列管理 🚀

什么是队列管理?

使用队列管理 Ultralytics YOLOv8队列管理涉及组织和控制排队的人员或车辆,以减少等待时间并提高效率。在零售、银行、机场和医疗保健设施等各种环境中,它涉及优化队列,以提高客户满意度和系统性能。



观看: 如何通过Ultralytics YOLOv8 | 机场和地铁站实施队列管理

队列管理的优势?

  • 减少等待时间:队列管理系统能有效地组织队列,最大限度地减少客户的等待时间。这将提高客户满意度,因为客户可以减少等待时间,有更多时间使用产品或服务。
  • 提高效率:实施队列管理可使企业更有效地分配资源。通过分析排队数据和优化人员部署,企业可以简化运营、降低成本并提高整体生产率。

真实世界的应用

物流 零售
利用机场售票柜台进行排队管理Ultralytics YOLOv8 在人群中使用队列监控Ultralytics YOLOv8
机场售票柜台的队列管理 使用Ultralytics YOLOv8 人群中的队列监控Ultralytics YOLOv8

队列管理使用YOLOv8 示例

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

论据 QueueManager

名称 类型 默认值 说明
names dict model.names 将类别 ID 映射到类别名称的字典。
reg_pts list of tuples [(20, 400), (1260, 400)] 定义计数区域多边形的点。默认为预定义的矩形。
line_thickness int 2 注释线的厚度。
track_thickness int 2 轨道线的厚度。
view_img bool False 是否显示图像帧。
region_color tuple (255, 0, 255) 计数区域线 (BGR) 的颜色。
view_queue_counts bool True 是否显示队列计数。
draw_tracks bool False 是否绘制对象的轨迹。
count_txt_color tuple (255, 255, 255) 计数文本的颜色 (BGR)。
track_color tuple None 轨道的颜色。如果 None不同的轨道将使用不同的颜色。
region_thickness int 5 计数区域线的厚度。
fontsize float 0.7 文本注释的字体大小。

论据 model.track

名称 类型 默认值 说明
source im0 None 图像或视频的源目录
persist bool False 帧与帧之间的持久轨迹
tracker str botsort.yaml 跟踪方法 "bytetrack "或 "botsort
conf float 0.3 置信度阈值
iou float 0.5 借据阈值
classes list None 按类别筛选结果,即 classes=0,或 classes=[0,2,3]
verbose bool True 显示物体跟踪结果

常见问题

如何使用Ultralytics YOLOv8 进行实时队列管理?

要使用Ultralytics YOLOv8 进行实时队列管理,可以按照以下步骤操作:

  1. 加载YOLOv8 模型 YOLO("yolov8n.pt").
  2. 使用 cv2.VideoCapture.
  3. 定义队列管理的关注区域 (ROI)。
  4. 处理帧以检测对象和管理队列。

下面是一个最简单的例子:

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

Ultralytics HUB 可为部署和管理队列管理解决方案提供用户友好型平台,从而简化这一流程。

使用Ultralytics YOLOv8 进行队列管理的主要优势是什么?

使用Ultralytics YOLOv8 进行队列管理有几个好处:

  • 等候时间骤减:有效组织排队,减少客户等待时间,提高满意度。
  • 提高效率:分析队列数据,优化人员部署和运营,从而降低成本。
  • 实时警报:针对排队时间过长的情况提供实时通知,以便进行快速干预。
  • 可扩展性:可在零售、机场和医疗保健等不同环境中轻松扩展。

更多详情,请了解我们的队列管理解决方案。

在队列管理方面,为什么要选择Ultralytics YOLOv8 而不是TensorFlow 或 Detectron2 等竞争对手?

Ultralytics YOLOv8 与TensorFlow 和 Detectron2 相比,它在队列管理方面有几个优势:

  • 实时性能: YOLOv8 以实时检测能力著称,处理速度更快。
  • 易用性: Ultralytics 通过Ultralytics HUB 提供从培训到部署的用户友好体验。
  • 预训练模型:访问一系列预训练模型,最大限度地减少设置所需的时间。
  • 社区支持:丰富的文档和活跃的社区支持让解决问题变得更容易。

了解如何开始使用 Ultralytics YOLO.

Ultralytics YOLOv8 能否处理多种类型的队列,如机场和零售业的队列?

是的,Ultralytics YOLOv8 可以管理各种类型的队列,包括机场和零售环境中的队列。通过对 QueueManager 进行特定区域和设置的配置,YOLOv8 可以适应不同的队列布局和密度。

以机场为例:

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

有关各种应用的更多信息,请查看我们的 "真实世界应用"部分。

Ultralytics YOLOv8 在队列管理方面有哪些实际应用?

Ultralytics YOLOv8 在现实世界的各种应用中被用于队列管理:

  • 零售:监控结账队伍,减少等待时间,提高顾客满意度。
  • 机场:管理售票柜台和安检站的排队情况,让旅客体验更顺畅。
  • 医疗保健:优化诊所和医院的病人流动。
  • 银行:通过有效管理银行排队,提高客户服务水平。

查看我们关于真实世界队列管理的博客,了解更多信息。



创建于 2024-04-02,更新于 2024-07-14
作者:RizwanMunawar(1)、glenn-jocher(5)、IvorZhu331(1)、Burhan-Q(1)

评论