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 |
つまり、class=0、またはclass=[0,2,3]。 |
verbose |
bool |
True |
物体追跡結果を表示する |