Zum Inhalt springen

Warteschlangenmanagement mit Ultralytics YOLOv8 🚀

Was ist Warteschlangenmanagement?

Warteschlangenmanagement mit Ultralytics YOLOv8 umfasst die Organisation und Kontrolle von Menschen- oder Fahrzeugschlangen, um Wartezeiten zu verkĂŒrzen und die Effizienz zu steigern. Es geht um die Optimierung von Warteschlangen, um die Kundenzufriedenheit und die Systemleistung in verschiedenen Bereichen wie Einzelhandel, Banken, FlughĂ€fen und Gesundheitseinrichtungen zu verbessern.

Vorteile des Warteschlangenmanagements?

  • Reduzierte Wartezeiten: Warteschlangenmanagementsysteme organisieren Warteschlangen effizient und minimieren die Wartezeiten fĂŒr Kunden. Dies fĂŒhrt zu einer höheren Kundenzufriedenheit, da die Kunden weniger Zeit mit Warten und mehr Zeit mit der Nutzung von Produkten oder Dienstleistungen verbringen.
  • Gesteigerte Effizienz: Durch die EinfĂŒhrung von Warteschlangenmanagement können Unternehmen ihre Ressourcen effektiver einsetzen. Durch die Analyse von Warteschlangendaten und die Optimierung des Personaleinsatzes können Unternehmen ihre AblĂ€ufe rationalisieren, Kosten senken und die GesamtproduktivitĂ€t verbessern.

Anwendungen in der realen Welt

Logistik Einzelhandel
Warteschlangenmanagement am Flughafenschalter mit Ultralytics YOLOv8 Überwachung von Warteschlangen in Menschenmengen mit Ultralytics YOLOv8
Warteschlangenmanagement am Flughafen-Schalter Verwenden Ultralytics YOLOv8 Überwachung von Warteschlangen in Menschenmengen Ultralytics YOLOv8

Warteschlangenmanagement mit YOLOv8 Beispiel

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

Optionale Argumente set_args

Name Typ Standard Beschreibung
view_img bool False Rahmen mit ZĂ€hlungen anzeigen
view_queue_counts bool True WarteschlangenzÀhlungen nur bei Videobildern anzeigen
line_thickness int 2 Dicke der Begrenzungsrahmen erhöhen
reg_pts list [(20, 400), (1260, 400)] Punkte, die das Gebiet der Region definieren
classes_names dict model.model.names Wörterbuch der Klassennamen
region_color RGB Color (255, 0, 255) Farbe des Objekts ZĂ€hlregion oder Linie
track_thickness int 2 Dicke der NachfĂŒhrlinien
draw_tracks bool False Aktivieren des Zeichnens von Spurlinien
track_color RGB Color (0, 255, 0) Farbe fĂŒr jede Spurlinie
count_txt_color RGB Color (255, 255, 255) Vordergrundfarbe fĂŒr Objekt zĂ€hlt Text
region_thickness int 5 Dicke fĂŒr Objektgegenbereich oder Linie
fontsize float 0.6 SchriftgrĂ¶ĂŸe des ZĂ€hltextes

Argumente model.track

Name Typ Standard Beschreibung
source im0 None Quellverzeichnis fĂŒr Bilder oder Videos
persist bool False Spuren zwischen Frames beibehalten
tracker str botsort.yaml Tracking-Methode 'bytetrack' oder 'botsort'
conf float 0.3 Konfidenzschwelle
iou float 0.5 IOU-Schwelle
classes list None Ergebnisse nach Klassen filtern, d.h. classes=0, oder classes=[0,2,3]
verbose bool True Anzeige der Ergebnisse der Objektverfolgung


Erstellt am 2024-04-02, Aktualisiert am 2024-04-02
Autoren: Burhan-Q (1), RizwanMunawar (1)

Kommentare