使用 Ultralytics YOLO26 进行分析

简介

本指南全面介绍了三种基本类型的数据可视化:折线图、柱状图和饼图。每一节都包含使用 Python 创建这些可视化的分步说明和代码片段。



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

视觉示例

折线图柱状图饼图
用于目标追踪的 YOLO 分析折线图用于检测计数的 YOLO 分析柱状图用于类别分布的 YOLO 分析饼图

为什么图表很重要

  • 折线图非常适合跟踪短期和长期内的变化,以及比较同一时期内多个组的变化。
  • 另一方面,柱状图适用于比较不同类别的数量,并显示类别与其数值之间的关系。
  • 最后,饼图能有效地说明类别之间的比例并展示部分与整体的关系。
使用 Ultralytics YOLO 进行分析
yolo solutions analytics show=True

# Pass the source
yolo solutions analytics source="path/to/video.mp4"

# Generate the pie chart
yolo solutions analytics analytics_type="pie" show=True

# Generate the bar plots
yolo solutions analytics analytics_type="bar" show=True

# Generate the area plots
yolo solutions analytics analytics_type="area" show=True

Analytics 参数

下表列出了 Analytics 参数:

参数类型默认值描述
modelstrNoneUltralytics YOLO 模型文件的路径。
analytics_typestr'line'图表类型,例如 line(折线)、bar(柱状)、area(面积)或 pie(饼图)。

You can also leverage different track arguments in the Analytics solution.

参数类型默认值描述
trackerstr'botsort.yaml'指定要使用的追踪算法,例如 bytetrack.yamlbotsort.yaml
conffloat0.1设置检测的置信度阈值;较低的值允许追踪更多的对象,但可能包含误报。
ioufloat0.7设置用于过滤重叠检测的交并比 (IoU) 阈值。
classeslistNone按类别索引过滤结果。例如,classes=[0, 2, 3] 仅追踪指定的类别。
verboseboolTrue控制追踪结果的显示,提供追踪对象的视觉输出。
devicestrNone指定用于推理的设备(例如 cpucuda:00)。允许用户选择 CPU、特定的 GPU 或其他计算设备来执行模型。

此外,还支持以下可视化参数:

参数类型默认值描述
showboolFalse如果为 True,则在窗口中显示标注后的图像或视频。这对于开发或测试期间的即时视觉反馈非常有用。
line_widthint or NoneNone指定边界框的线条宽度。如果设为 None,线条宽度将根据图像大小自动调整。提供视觉自定义以提高清晰度。

结论

理解何时以及如何使用不同类型的可视化对于有效的数据分析至关重要。折线图、柱状图和饼图是基础工具,可以帮助你更清晰、更有效地传达数据背后的故事。Ultralytics YOLO26 Analytics 解决方案提供了一种简化的方式,用于从你的目标检测和追踪结果中生成这些可视化,从而更容易从视觉数据中提取有意义的洞察。

常见问题 (FAQ)

如何使用 Ultralytics YOLO26 Analytics 创建折线图?

要使用 Ultralytics YOLO26 Analytics 创建折线图,请按照以下步骤操作:

  1. 加载一个 YOLO26 模型并打开你的视频文件。
  2. 初始化 Analytics 类,并将类型设置为 "line"。
  3. 遍历视频帧,用相关数据(如每帧的目标计数)更新折线图。
  4. 保存显示折线图的输出视频。

示例:

import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video.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,
    (1280, 720),  # 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
        results = analytics(im0, frame_count)  # update analytics graph every frame
        out.write(results.plot_im)  # write the video file
    else:
        break

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

关于配置 Analytics 类的更多详情,请访问使用 Ultralytics YOLO26 进行分析一节。

使用 Ultralytics YOLO26 创建柱状图有什么好处?

使用 Ultralytics YOLO26 创建柱状图有几个好处:

  1. 实时数据可视化:将目标检测结果无缝集成到柱状图中进行动态更新。
  2. 易于使用:简单的 API 和函数使得实现和可视化数据变得直接明了。
  3. 自定义:自定义标题、标签、颜色等,以满足你的特定需求。
  4. 高效:能够高效处理大量数据并在视频处理过程中实时更新图表。

使用以下示例来生成柱状图:

import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video.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,
    (1280, 720),  # 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
        results = analytics(im0, frame_count)  # update analytics graph every frame
        out.write(results.plot_im)  # write the video file
    else:
        break

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

要了解更多信息,请访问指南中的柱状图一节。

为什么在数据可视化项目中使用 Ultralytics YOLO26 创建饼图?

Ultralytics YOLO26 是创建饼图的绝佳选择,因为:

  1. 与目标检测集成:将目标检测结果直接集成到饼图中以获取即时洞察。
  2. 用户友好的 API:设置简单,只需极少的代码即可使用。
  3. 可自定义:提供多种颜色、标签等自定义选项。
  4. 实时更新:能够实时处理和可视化数据,非常适合视频分析项目。

这是一个简单的示例:

import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video.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,
    (1280, 720),  # 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
        results = analytics(im0, frame_count)  # update analytics graph every frame
        out.write(results.plot_im)  # write the video file
    else:
        break

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

欲了解更多信息,请参考指南中的饼图一节。

Ultralytics YOLO26 能否用于追踪对象并动态更新可视化?

是的,Ultralytics YOLO26 可以用于追踪对象并动态更新可视化。它支持实时追踪多个对象,并可以根据被追踪对象的数据更新各种可视化图表,如折线图、柱状图和饼图。

追踪并更新折线图的示例:

import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video.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,
    (1280, 720),  # 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
        results = analytics(im0, frame_count)  # update analytics graph every frame
        out.write(results.plot_im)  # write the video file
    else:
        break

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

要了解完整功能,请查看追踪一节。

Ultralytics YOLO26 与 OpenCVTensorFlow 等其他目标检测解决方案有何不同?

Ultralytics YOLO26 在多个方面区别于 OpenCV 和 TensorFlow 等其他目标检测解决方案:

  1. 最先进的准确性:YOLO26 在目标检测实例分割语义分割分类任务中提供了卓越的准确性。
  2. 易于使用:用户友好的 API 允许在无需大量编码的情况下快速实现和集成。
  3. 实时性能:针对高速推理进行了优化,适用于实时应用。
  4. 多样化的应用:支持多种任务,包括多目标追踪、自定义模型训练以及导出为 ONNX、TensorRT 和 CoreML 等不同格式。
  5. 详尽的文档:提供丰富的文档博客资源,引导用户完成每一步。

要获取更详细的比较和用例,请浏览我们的 Ultralytics 博客

评论