Skip to content

Comptage d'objets Ă  l'aide de Ultralytics YOLOv8

Qu'est-ce que le comptage d'objets ?

Le comptage d'objets avec Ultralytics YOLOv8 implique l'identification et le comptage précis d'objets spécifiques dans les vidéos et les flux de caméras. YOLOv8 excelle dans les applications en temps réel, en fournissant un comptage d'objets efficace et précis pour divers scénarios tels que l'analyse des foules et la surveillance, grâce à ses algorithmes de pointe et à ses capacités d'apprentissage profond.


Regarde : Comptage d'objets Ă  l'aide de Ultralytics YOLOv8

Regarde : Comptage d'objets par classe Ă  l'aide de Ultralytics YOLOv8

Avantages du comptage d'objets ?

  • Optimisation des ressources : Le comptage d'objets facilite la gestion efficace des ressources en fournissant des comptages prĂ©cis et en optimisant l'allocation des ressources dans des applications telles que la gestion des stocks.
  • SĂ©curitĂ© renforcĂ©e : Le comptage d'objets amĂ©liore la sĂ©curitĂ© et la surveillance en suivant et en comptant avec prĂ©cision les entitĂ©s, ce qui permet une dĂ©tection proactive des menaces.
  • Prise de dĂ©cision Ă©clairĂ©e : Le comptage d'objets offre des informations prĂ©cieuses pour la prise de dĂ©cision, l'optimisation des processus dans le commerce de dĂ©tail, la gestion du trafic et divers autres domaines.

Applications dans le monde réel

Logistique Aquaculture
Comptage de paquets sur bande transporteuse Utilisation Ultralytics YOLOv8 Compter les poissons dans la mer en utilisant Ultralytics YOLOv8
Comptage de paquets sur bande transporteuse Utilisation Ultralytics YOLOv8 Compter les poissons dans la mer en utilisant Ultralytics YOLOv8

Comptage d'objets Ă  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))

# Define region points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=region_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.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))

# Define region points as a polygon with 5 points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360), (20, 400)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=region_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.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))

# Define line points
line_points = [(20, 400), (1080, 400)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=line_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.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))

line_points = [(20, 400), (1080, 400)]  # line or region points
classes_to_count = [0, 2]  # person and car classes for count

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=line_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False, classes=classes_to_count)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
La région est mobile

Tu peux déplacer la région n'importe où dans le cadre en cliquant sur ses bords

Argument ObjectCounter

Voici un tableau avec les ObjectCounter arguments :

Nom Type DĂ©faut Description
names dict None Dictionnaire des noms de classes.
reg_pts list [(20, 400), (1260, 400)] Liste des points définissant la région de comptage.
count_reg_color tuple (255, 0, 255) Couleur RVB de la région de comptage.
count_txt_color tuple (0, 0, 0) Couleur RVB du texte de comptage.
count_bg_color tuple (255, 255, 255) Couleur RVB de l'arrière-plan du texte de comptage.
line_thickness int 2 Épaisseur du trait pour les boîtes de délimitation.
track_thickness int 2 Épaisseur des lignes de piste.
view_img bool False Drapeau permettant de contrôler l'affichage ou non du flux vidéo.
view_in_counts bool True Indicateur permettant de contrôler l'affichage du nombre d'entrées sur le flux vidéo.
view_out_counts bool True Indicateur permettant de contrôler l'affichage ou non des décomptes de sortie sur le flux vidéo.
draw_tracks bool False Drapeau permettant de contrôler si les pistes de l'objet doivent être dessinées.
track_color tuple None Couleur RVB des pistes.
region_thickness int 5 Épaisseur de la région de comptage des objets.
line_dist_thresh int 15 Seuil de distance euclidienne pour le compteur de lignes.
cls_txtdisplay_gap int 50 Affiche l'Ă©cart entre chaque comptage de classe.

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

FAQ

Comment compter les objets dans une vidéo à l'aide de Ultralytics YOLOv8 ?

Pour compter les objets dans une vidéo à l'aide de Ultralytics YOLOv8 , tu peux suivre les étapes suivantes :

  1. Importe les bibliothèques nécessaires (cv2, ultralytics).
  2. Charge un modèle pré-entraîné YOLOv8 .
  3. Définis la région de comptage (par exemple, un polygone, une ligne, etc.).
  4. Configure la capture vidéo et initialise le compteur d'objets.
  5. Traite chaque image pour suivre les objets et les compter dans la région définie.

Voici un exemple simple pour compter dans une région :

import cv2

from ultralytics import YOLO, solutions


def count_objects_in_region(video_path, output_video_path, model_path):
    """Count objects in a specific region within a video."""
    model = YOLO(model_path)
    cap = cv2.VideoCapture(video_path)
    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))
    region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]
    video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
    counter = solutions.ObjectCounter(
        view_img=True, reg_pts=region_points, names=model.names, draw_tracks=True, line_thickness=2
    )

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or video processing has been successfully completed.")
            break
        tracks = model.track(im0, persist=True, show=False)
        im0 = counter.start_counting(im0, tracks)
        video_writer.write(im0)

    cap.release()
    video_writer.release()
    cv2.destroyAllWindows()


count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolov8n.pt")

Explore d'autres configurations et options dans la section Comptage d'objets.

Quels sont les avantages de l'utilisation de Ultralytics YOLOv8 pour le comptage d'objets ?

L'utilisation de Ultralytics YOLOv8 pour le comptage d'objets offre plusieurs avantages :

  1. Optimisation des ressources : Il facilite la gestion efficace des ressources en fournissant des comptages précis, ce qui permet d'optimiser l'affectation des ressources dans des secteurs tels que la gestion des stocks.
  2. Sécurité renforcée : Il améliore la sécurité et la surveillance en suivant et en comptant les entités avec précision, ce qui facilite la détection proactive des menaces.
  3. Prise de décision éclairée : Il offre des informations précieuses pour la prise de décision, l'optimisation des processus dans des domaines tels que la vente au détail, la gestion du trafic, et plus encore.

Pour des applications concrètes et des exemples de code, visite la section Avantages du comptage d'objets.

Comment puis-je compter des classes spécifiques d'objets en utilisant Ultralytics YOLOv8 ?

Pour compter des classes d'objets spécifiques à l'aide de Ultralytics YOLOv8 , tu dois spécifier les classes qui t'intéressent pendant la phase de suivi. Tu trouveras ci-dessous un exemple de Python :

import cv2

from ultralytics import YOLO, solutions


def count_specific_classes(video_path, output_video_path, model_path, classes_to_count):
    """Count specific classes of objects in a video."""
    model = YOLO(model_path)
    cap = cv2.VideoCapture(video_path)
    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))
    line_points = [(20, 400), (1080, 400)]
    video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
    counter = solutions.ObjectCounter(
        view_img=True, reg_pts=line_points, names=model.names, draw_tracks=True, line_thickness=2
    )

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or video processing has been successfully completed.")
            break
        tracks = model.track(im0, persist=True, show=False, classes=classes_to_count)
        im0 = counter.start_counting(im0, tracks)
        video_writer.write(im0)

    cap.release()
    video_writer.release()
    cv2.destroyAllWindows()


count_specific_classes("path/to/video.mp4", "output_specific_classes.avi", "yolov8n.pt", [0, 2])

Dans cet exemple, classes_to_count=[0, 2]ce qui signifie qu'il compte les objets de la classe 0 et 2 (par exemple, personne et voiture).

Pourquoi devrais-je utiliser YOLOv8 plutôt que d'autres modèles de détection d'objets pour les applications en temps réel ?

Ultralytics YOLOv8 offre plusieurs avantages par rapport à d'autres modèles de détection d'objets comme Faster R-CNN, SSD et les versions précédentes de YOLO :

  1. Vitesse et efficacité : YOLOv8 offre des capacités de traitement en temps réel, ce qui le rend idéal pour les applications nécessitant une inférence à grande vitesse, telles que la surveillance et la conduite autonome.
  2. Précision : il offre une précision de pointe pour les tâches de détection et de suivi des objets, ce qui permet de réduire le nombre de faux positifs et d'améliorer la fiabilité globale du système.
  3. Facilité d'intégration : YOLOv8 offre une intégration transparente avec diverses plateformes et appareils, y compris les appareils mobiles et périphériques, ce qui est crucial pour les applications modernes d'IA.
  4. Flexibilité : Prend en charge diverses tâches telles que la détection, la segmentation et le suivi d'objets avec des modèles configurables pour répondre aux exigences de cas d'utilisation spécifiques.

Consulte le site Ultralytics YOLOv8 Documentation pour en savoir plus sur ses caractéristiques et comparer ses performances.

Puis-je utiliser YOLOv8 pour des applications avancées telles que l'analyse des foules et la gestion du trafic ?

Oui, Ultralytics YOLOv8 est parfaitement adapté aux applications avancées telles que l'analyse des foules et la gestion du trafic, grâce à ses capacités de détection en temps réel, à son évolutivité et à sa souplesse d'intégration. Ses fonctions avancées permettent le suivi, le comptage et la classification d'objets avec une grande précision dans des environnements dynamiques. Voici quelques exemples de cas d'utilisation :

  • Analyse des foules : Surveille et gère les grands rassemblements, en assurant la sĂ©curitĂ© et en optimisant le flux de la foule.
  • Gestion du trafic : Suit et compte les vĂ©hicules, analyse les schĂ©mas de circulation et gère les embouteillages en temps rĂ©el.

Pour plus d'informations et de détails sur la mise en œuvre, reporte-toi au guide sur les applications réelles du comptage d'objets avec YOLOv8.



Créé le 2023-12-02, Mis à jour le 2024-07-14
Auteurs : RizwanMunawar (6), glenn-jocher (15), IvorZhu331 (1), AyushExel (1)

Commentaires