使用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 |
借据阈值 |
classes |
list |
None |
按类别筛选结果,即 classes=0,或 classes=[0,2,3] |
verbose |
bool |
True |
显示物体跟踪结果 |