Overslaan naar inhoud

Wachtrijbeheer met Ultralytics YOLOv8 🚀

Wat is wachtrijmanagement?

Wachtrijmanagement met behulp van Ultralytics YOLOv8 Het gaat om het organiseren en controleren van rijen mensen of voertuigen om wachttijden te verkorten en de efficiëntie te verbeteren. Het gaat om het optimaliseren van wachtrijen om de klanttevredenheid en de systeemprestaties te verbeteren in verschillende omgevingen zoals de detailhandel, banken, luchthavens en gezondheidszorg.

Voordelen van wachtrijmanagement?

  • Kortere wachttijden: Wachtrijbeheersystemen organiseren wachtrijen efficiënt, waardoor de wachttijden voor klanten tot een minimum worden beperkt. Dit leidt tot een grotere tevredenheid omdat klanten minder tijd kwijt zijn met wachten en meer tijd overhouden voor producten of diensten.
  • Verhoogde efficiëntie: Door wachtrijmanagement te implementeren kunnen bedrijven hun middelen effectiever toewijzen. Door wachtrijgegevens te analyseren en de inzet van personeel te optimaliseren, kunnen bedrijven hun activiteiten stroomlijnen, kosten verlagen en de algehele productiviteit verbeteren.

Toepassingen in de echte wereld

Logistiek Detailhandel
Wachtrijbeheer bij ticketbalie op luchthaven met behulp van Ultralytics YOLOv8 Wachtrijbewaking in mensenmassa's met behulp van Ultralytics YOLOv8
Wachtrijbeheer bij ticketbalie op luchthaven Gebruiken Ultralytics YOLOv8 Wachtrijbewaking in menigte Ultralytics YOLOv8

Wachtrijbeheer met YOLOv8 Voorbeeld

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

Optionele argumenten set_args

Naam Type Standaard Beschrijving
view_img bool False Frames met tellingen weergeven
view_queue_counts bool True Wachtrijtellingen alleen op videoframe weergeven
line_thickness int 2 Vergroot de dikte van bounding boxes
reg_pts list [(20, 400), (1260, 400)] Punten die het gebied van de regio definiëren
classes_names dict model.model.names Woordenboek van klassenamen
region_color RGB Color (255, 0, 255) Kleur van het Object dat Regio of Lijn telt
track_thickness int 2 Dikte van volglijnen
draw_tracks bool False Tekenen van spoorlijnen inschakelen
track_color RGB Color (0, 255, 0) Kleur voor elke spoorlijn
count_txt_color RGB Color (255, 255, 255) Voorgrondkleur voor tekst Objecttelling
region_thickness int 5 Dikte voor object tegengebied of lijn
fontsize float 0.6 Lettergrootte van tellende tekst

Argumenten model.track

Naam Type Standaard Beschrijving
source im0 None bronmap voor afbeeldingen of video's
persist bool False Blijvende sporen tussen frames
tracker str botsort.yaml Volgmethode 'bytetrack' of 'botsort'
conf float 0.3 Vertrouwensdrempel
iou float 0.5 Drempel IOU
classes list None filter resultaten op klasse, d.w.z. classes=0, of classes=[0,2,3]
verbose bool True De resultaten van het volgen van objecten weergeven


Gemaakt op 2024-04-02, Bijgewerkt op 2024-04-02
Auteurs: Burhan-Q (1), RizwanMunawar (1)

Reacties