Skip to content

Gestion des files d'attente à l'aide de Ultralytics YOLOv8 🚀

Qu'est-ce que la gestion des files d'attente ?

La gestion des files d'attente Ultralytics YOLOv8 implique l'organisation et le contrôle des files d'attente de personnes ou de véhicules afin de réduire les temps d'attente et d'améliorer l'efficacité. Il s'agit d'optimiser les files d'attente afin d'améliorer la satisfaction des clients et les performances du système dans divers contextes tels que le commerce de détail, les banques, les aéroports et les établissements de soins de santé.

Avantages de la gestion des files d'attente ?

  • RĂ©duction des temps d'attente : Les systèmes de gestion des files d'attente organisent efficacement les files d'attente, minimisant ainsi les temps d'attente pour les clients. Cela permet d'amĂ©liorer le niveau de satisfaction car les clients passent moins de temps Ă  attendre et plus de temps Ă  s'occuper des produits ou des services.
  • EfficacitĂ© accrue : La mise en Ĺ“uvre de la gestion des files d'attente permet aux entreprises d'allouer les ressources plus efficacement. En analysant les donnĂ©es relatives aux files d'attente et en optimisant le dĂ©ploiement du personnel, les entreprises peuvent rationaliser les opĂ©rations, rĂ©duire les coĂ»ts et amĂ©liorer la productivitĂ© globale.

Applications dans le monde réel

Logistique Vente au détail
Gestion des files d'attente au guichet de l'aéroport à l'aide de Ultralytics YOLOv8 Surveillance des files d'attente dans les foules Ultralytics YOLOv8
Gestion des files d'attente au guichet de l'aéroport Utilisation Ultralytics YOLOv8 Surveillance des files d'attente dans les foules Ultralytics YOLOv8

Gestion des files d'attente Ă  l'aide de YOLOv8 Exemple

import cv2
from ultralytics import YOLO, solutions

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 = solutions.QueueManager(
    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, solutions

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 = solutions.QueueManager(
    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()

Arguments QueueManager

Nom Type DĂ©faut Description
classes_names dict model.names Un dictionnaire qui Ă©tablit une correspondance entre les identifiants des classes et les noms des classes.
reg_pts list of tuples [(20, 400), (1260, 400)] Points définissant le polygone de la région de comptage. La valeur par défaut est un rectangle prédéfini.
line_thickness int 2 Épaisseur des lignes d'annotation.
track_thickness int 2 Épaisseur des lignes de piste.
view_img bool False Permet d'afficher ou non les cadres de l'image.
region_color tuple (255, 0, 255) Couleur des lignes de la région de comptage (BGR).
view_queue_counts bool True Permet d'afficher ou non les comptes de la file d'attente.
draw_tracks bool False Indique s'il faut dessiner les traces des objets.
count_txt_color tuple (255, 255, 255) Couleur du texte de comptage (BGR).
track_color tuple None Couleur des pistes. Si NoneLes différentes couleurs seront utilisées pour les différentes pistes.
region_thickness int 5 Épaisseur des lignes de la région de comptage.
fontsize float 0.7 Taille de la police pour les annotations de texte.

Arguments model.track

Nom Type DĂ©faut Description
source im0 None répertoire source pour les images ou les vidéos
persist bool False persistance des pistes entre les images
tracker str botsort.yaml MĂ©thode de suivi 'bytetrack' ou 'botsort'
conf float 0.3 Seuil de confiance
iou float 0.5 Seuil de reconnaissance de dette
classes list None filtre les résultats par classe, c'est-à-dire classes=0, ou classes=[0,2,3]
verbose bool True Affiche les résultats du suivi des objets


Créé le 2024-04-02, Mis à jour le 2024-05-18
Auteurs : glenn-jocher (2), Burhan-Q (1), RizwanMunawar (1)

Commentaires