使用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 进行实时队列管理,可以按照以下步骤操作:
- 加载YOLOv8 模型
YOLO("yolov8n.pt")
. - 使用
cv2.VideoCapture
. - 定义队列管理的关注区域 (ROI)。
- 处理帧以检测对象和管理队列。
下面是一个最简单的例子:
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 在现实世界的各种应用中被用于队列管理:
- 零售:监控结账队伍,减少等待时间,提高顾客满意度。
- 机场:管理售票柜台和安检站的排队情况,让旅客体验更顺畅。
- 医疗保健:优化诊所和医院的病人流动。
- 银行:通过有效管理银行排队,提高客户服务水平。
查看我们关于真实世界队列管理的博客,了解更多信息。