İçeriğe geç

Ultralytics YOLOv8 kullanarak Kuyruk Yönetimi 🚀

Kuyruk Yönetimi Nedir?

Kuyruk yönetimi kullanarak Ultralytics YOLOv8 bekleme sürelerini azaltmak ve verimliliği artırmak için insan veya araç kuyruklarını organize ve kontrol etmeyi içerir. Perakende, bankalar, havaalanları ve sağlık tesisleri gibi çeşitli ortamlarda müşteri memnuniyetini ve sistem performansını artırmak için kuyrukları optimize etmekle ilgilidir.

Kuyruk Yönetiminin Avantajları?

  • Azaltılmış Bekleme Süreleri: Kuyruk yönetim sistemleri kuyrukları verimli bir şekilde düzenleyerek müşterilerin bekleme sürelerini en aza indirir. Müşteriler beklemek için daha az, ürün veya hizmetlerle ilgilenmek için daha fazla zaman harcadıklarından, bu durum memnuniyet düzeylerinin artmasına yol açar.
  • Artan Verimlilik: Sıra yönetiminin uygulanması, işletmelerin kaynakları daha etkili bir şekilde tahsis etmesine olanak tanır. Sıra verilerini analiz ederek ve personel dağıtımını optimize ederek işletmeler operasyonları düzene sokabilir, maliyetleri azaltabilir ve genel verimliliği artırabilir.

Gerçek Dünya Uygulamaları

Lojistik Perakende
Havaalanı bilet gişesinde kuyruk yönetimi Ultralytics YOLOv8 Kalabalık içinde kuyruk izleme Ultralytics YOLOv8
Havaalanı bilet gişesinde kuyruk yönetimi Kullanma Ultralytics YOLOv8 Kalabalıkta kuyruk izleme Ultralytics YOLOv8

YOLOv8 Örneğini Kullanarak Kuyruk Yönetimi

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

İsteğe Bağlı Argümanlar set_args

İsim Tip Varsayılan Açıklama
view_img bool False Çerçeveleri sayımlarla görüntüleme
view_queue_counts bool True Kuyruk sayılarını yalnızca video karesinde görüntüleme
line_thickness int 2 Sınırlayıcı kutu kalınlığını artırın
reg_pts list [(20, 400), (1260, 400)] Bölge Alanını tanımlayan noktalar
classes_names dict model.model.names Sınıf Adları Sözlüğü
region_color RGB Color (255, 0, 255) Nesne Sayma Bölgesinin veya Çizgisinin Rengi
track_thickness int 2 İzleme Çizgilerinin Kalınlığı
draw_tracks bool False Çizgileri izlemeyi etkinleştir
track_color RGB Color (0, 255, 0) Her ray hattı için renk
count_txt_color RGB Color (255, 255, 255) Nesne sayıları metni için ön plan rengi
region_thickness int 5 Nesne karşı bölgesi veya çizgi için kalınlık
fontsize float 0.6 Sayma metninin yazı tipi boyutu

Argümanlar model.track

İsim Tip Varsayılan Açıklama
source im0 None resimler veya videolar için kaynak dizin
persist bool False kareler arasında kalıcı izler
tracker str botsort.yaml İzleme yöntemi 'bytetrack' veya 'botsort'
conf float 0.3 Güven Eşiği
iou float 0.5 IOU Eşiği
classes list None sonuçları sınıfa göre filtreleyin, yani classes=0 veya classes=[0,2,3]
verbose bool True Nesne izleme sonuçlarını görüntüleme


Oluşturuldu 2024-04-02, Güncellendi 2024-04-02
Yazarlar: Burhan-Q (1), RizwanMunawar (1)

Yorumlar