Skip to content

Analytics using Ultralytics YOLO11

Introduction

This guide provides a comprehensive overview of three fundamental types of data visualizations: line graphs, bar plots, and pie charts. Each section includes step-by-step instructions and code snippets on how to create these visualizations using Python.



Regarde : How to generate Analytical Graphs using Ultralytics | Line Graphs, Bar Plots, Area and Pie Charts

Échantillons visuels

Graphique linéaire Tracé des barres Diagramme circulaire
Graphique linéaire Tracé des barres Diagramme circulaire

Pourquoi les graphiques sont-ils importants ?

  • Les graphiques linĂ©aires sont idĂ©aux pour suivre les changements sur des pĂ©riodes courtes ou longues et pour comparer les changements de plusieurs groupes sur la mĂŞme pĂ©riode.
  • Les diagrammes en barres, en revanche, conviennent pour comparer les quantitĂ©s entre diffĂ©rentes catĂ©gories et montrer les relations entre une catĂ©gorie et sa valeur numĂ©rique.
  • Enfin, les diagrammes circulaires sont efficaces pour illustrer les proportions entre les catĂ©gories et montrer les parties d'un tout.

Exemples d'analyses

import cv2

from ultralytics import solutions

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

out = cv2.VideoWriter(
    "ultralytics_analytics.avi",
    cv2.VideoWriter_fourcc(*"MJPG"),
    fps,
    (1920, 1080),  # This is fixed
)

analytics = solutions.Analytics(
    analytics_type="line",
    show=True,
)

frame_count = 0
while cap.isOpened():
    success, im0 = cap.read()
    if success:
        frame_count += 1
        im0 = analytics.process_data(im0, frame_count)  # update analytics graph every frame
        out.write(im0)  # write the video file
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import solutions

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

out = cv2.VideoWriter(
    "ultralytics_analytics.avi",
    cv2.VideoWriter_fourcc(*"MJPG"),
    fps,
    (1920, 1080),  # This is fixed
)

analytics = solutions.Analytics(
    analytics_type="pie",
    show=True,
)

frame_count = 0
while cap.isOpened():
    success, im0 = cap.read()
    if success:
        frame_count += 1
        im0 = analytics.process_data(im0, frame_count)  # update analytics graph every frame
        out.write(im0)  # write the video file
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import solutions

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

out = cv2.VideoWriter(
    "ultralytics_analytics.avi",
    cv2.VideoWriter_fourcc(*"MJPG"),
    fps,
    (1920, 1080),  # This is fixed
)

analytics = solutions.Analytics(
    analytics_type="bar",
    show=True,
)

frame_count = 0
while cap.isOpened():
    success, im0 = cap.read()
    if success:
        frame_count += 1
        im0 = analytics.process_data(im0, frame_count)  # update analytics graph every frame
        out.write(im0)  # write the video file
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import solutions

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

out = cv2.VideoWriter(
    "ultralytics_analytics.avi",
    cv2.VideoWriter_fourcc(*"MJPG"),
    fps,
    (1920, 1080),  # This is fixed
)

analytics = solutions.Analytics(
    analytics_type="area",
    show=True,
)

frame_count = 0
while cap.isOpened():
    success, im0 = cap.read()
    if success:
        frame_count += 1
        im0 = analytics.process_data(im0, frame_count)  # update analytics graph every frame
        out.write(im0)  # write the video file
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()

Argument Analytics

Voici un tableau avec les Analytics arguments :

Nom Type DĂ©faut Description
analytics_type str line Type of graph i.e "line", "bar", "area", "pie"
model str None Path to Ultralytics YOLO Model File
line_width int 2 Épaisseur du trait pour les boîtes de délimitation.
show bool False Drapeau permettant de contrôler l'affichage ou non du flux vidéo.

Arguments model.track

Argument Type DĂ©faut Description
source str None Specifies the source directory for images or videos. Supports file paths and URLs.
persist bool False Enables persistent tracking of objects between frames, maintaining IDs across video sequences.
tracker str botsort.yaml Specifies the tracking algorithm to use, e.g., bytetrack.yaml ou botsort.yaml.
conf float 0.3 Sets the confidence threshold for detections; lower values allow more objects to be tracked but may include false positives.
iou float 0.5 Sets the Intersection over Union (IoU) threshold for filtering overlapping detections.
classes list None Filters results by class index. For example, classes=[0, 2, 3] only tracks the specified classes.
verbose bool True Controls the display of tracking results, providing a visual output of tracked objects.

Conclusion

Comprendre quand et comment utiliser les différents types de visualisation est crucial pour une analyse efficace des données. Les graphiques linéaires, les diagrammes à barres et les diagrammes circulaires sont des outils fondamentaux qui peuvent t'aider à transmettre l'histoire de tes données de façon plus claire et plus efficace.

FAQ

How do I create a line graph using Ultralytics YOLO11 Analytics?

To create a line graph using Ultralytics YOLO11 Analytics, follow these steps:

  1. Load a YOLO11 model and open your video file.
  2. Initialise le Analytics avec le type "ligne".
  3. Fais défiler les images vidéo, en mettant à jour le graphique linéaire avec des données pertinentes, telles que le nombre d'objets par image.
  4. Enregistre la vidéo de sortie affichant le graphique linéaire.

Exemple :

import cv2

from ultralytics import solutions

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

out = cv2.VideoWriter(
    "ultralytics_analytics.avi",
    cv2.VideoWriter_fourcc(*"MJPG"),
    fps,
    (1920, 1080),  # This is fixed
)

analytics = solutions.Analytics(
    analytics_type="line",
    show=True,
)

frame_count = 0
while cap.isOpened():
    success, im0 = cap.read()
    if success:
        frame_count += 1
        im0 = analytics.process_data(im0, frame_count)  # update analytics graph every frame
        out.write(im0)  # write the video file
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()

Pour plus de détails sur la configuration du Analytics visite le site de la classe Analytics using Ultralytics YOLO11 📊 section.

What are the benefits of using Ultralytics YOLO11 for creating bar plots?

Using Ultralytics YOLO11 for creating bar plots offers several benefits:

  1. Real-time Data Visualization: Seamlessly integrate object detection results into bar plots for dynamic updates.
  2. Facilité d'utilisation: l'API et les fonctions simples permettent de mettre en œuvre et de visualiser facilement les données.
  3. Personnalisation: Personnalise les titres, les étiquettes, les couleurs et plus encore pour répondre à tes besoins spécifiques.
  4. Efficacité: Traite efficacement de grandes quantités de données et mets à jour les tracés en temps réel pendant le traitement des vidéos.

Utilise l'exemple suivant pour générer un diagramme à barres :

import cv2

from ultralytics import solutions

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

out = cv2.VideoWriter(
    "ultralytics_analytics.avi",
    cv2.VideoWriter_fourcc(*"MJPG"),
    fps,
    (1920, 1080),  # This is fixed
)

analytics = solutions.Analytics(
    analytics_type="bar",
    show=True,
)

frame_count = 0
while cap.isOpened():
    success, im0 = cap.read()
    if success:
        frame_count += 1
        im0 = analytics.process_data(im0, frame_count)  # update analytics graph every frame
        out.write(im0)  # write the video file
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()

Pour en savoir plus, visite la section Tracé des barres du guide.

Why should I use Ultralytics YOLO11 for creating pie charts in my data visualization projects?

Ultralytics YOLO11 is an excellent choice for creating pie charts because:

  1. Intégration avec la détection d'objets: Intègre directement les résultats de la détection d'objets dans les diagrammes circulaires pour une compréhension immédiate.
  2. API conviviale: Simple Ă  mettre en place et Ă  utiliser avec un minimum de code.
  3. Personnalisable: Diverses options de personnalisation pour les couleurs, les Ă©tiquettes et plus encore.
  4. Mises à jour en temps réel: Traite et visualise les données en temps réel, ce qui est idéal pour les projets d'analyse vidéo.

Voici un petit exemple :

import cv2

from ultralytics import solutions

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

out = cv2.VideoWriter(
    "ultralytics_analytics.avi",
    cv2.VideoWriter_fourcc(*"MJPG"),
    fps,
    (1920, 1080),  # This is fixed
)

analytics = solutions.Analytics(
    analytics_type="pie",
    show=True,
)

frame_count = 0
while cap.isOpened():
    success, im0 = cap.read()
    if success:
        frame_count += 1
        im0 = analytics.process_data(im0, frame_count)  # update analytics graph every frame
        out.write(im0)  # write the video file
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()

Pour plus d'informations, reporte-toi Ă  la section Graphique en camembert du guide.

Can Ultralytics YOLO11 be used to track objects and dynamically update visualizations?

Yes, Ultralytics YOLO11 can be used to track objects and dynamically update visualizations. It supports tracking multiple objects in real-time and can update various visualizations like line graphs, bar plots, and pie charts based on the tracked objects' data.

Exemple de suivi et de mise à jour d'un graphique linéaire :

import cv2

from ultralytics import solutions

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

out = cv2.VideoWriter(
    "ultralytics_analytics.avi",
    cv2.VideoWriter_fourcc(*"MJPG"),
    fps,
    (1920, 1080),  # This is fixed
)

analytics = solutions.Analytics(
    analytics_type="line",
    show=True,
)

frame_count = 0
while cap.isOpened():
    success, im0 = cap.read()
    if success:
        frame_count += 1
        im0 = analytics.process_data(im0, frame_count)  # update analytics graph every frame
        out.write(im0)  # write the video file
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()

Pour en savoir plus sur l'ensemble des fonctionnalités, consulte la section sur le suivi.

What makes Ultralytics YOLO11 different from other object detection solutions like OpenCV and TensorFlow?

Ultralytics YOLO11 stands out from other object detection solutions like OpenCV and TensorFlow for multiple reasons:

  1. State-of-the-art Accuracy: YOLO11 provides superior accuracy in object detection, segmentation, and classification tasks.
  2. Facilité d'utilisation: L'API conviviale permet une mise en œuvre et une intégration rapides sans codage approfondi.
  3. Performance en temps réel: Optimisé pour une inférence à grande vitesse, adapté aux applications en temps réel.
  4. Applications diverses: Prend en charge diverses tâches, notamment le suivi d'objets multiples, la formation de modèles personnalisés et l'exportation vers différents formats tels que ONNX, TensorRT, et CoreML.
  5. Documentation complète: Une documentation complète et des ressources de blog pour guider les utilisateurs à chaque étape.

Pour des comparaisons et des cas d'utilisation plus détaillés, explore notre blogUltralytics .


📅 Created 4 months ago ✏️ Updated 0 days ago

Commentaires