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

Arguments facultatifs set_args

Nom Type DĂ©faut Description
view_img bool False Afficher les cadres avec les décomptes
view_queue_counts bool True Afficher les comptes de la file d'attente uniquement sur l'image vidéo
line_thickness int 2 Augmente l'épaisseur des boîtes de délimitation
reg_pts list [(20, 400), (1260, 400)] Points définissant la zone de la région
classes_names dict model.model.names Dictionnaire des noms de classe
region_color RGB Color (255, 0, 255) Couleur de l'objet, de la région de comptage ou de la ligne
track_thickness int 2 Épaisseur des lignes de suivi
draw_tracks bool False Permettre de dessiner des lignes de suivi
track_color RGB Color (0, 255, 0) Couleur pour chaque ligne de piste
count_txt_color RGB Color (255, 255, 255) Couleur de premier plan pour le texte des comptes d'objets
region_thickness int 5 Épaisseur de la contre-région ou de la ligne de l'objet
fontsize float 0.6 Taille de la police du texte de comptage

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-04-02
Auteurs : Burhan-Q (1), RizwanMunawar (1)

Commentaires