使用Ultralytics YOLO11进行分析
简介
本指南全面概述了三种基本类型的数据可视化:折线图、条形图和饼图。每个部分都包含逐步说明和代码片段,介绍如何使用Python创建这些可视化。
观看: 如何使用Ultralytics生成分析图表 | 折线图、条形图、面积图和饼图
视觉样本
折线图 | 条形图 | 饼图 |
---|---|---|
图表的重要性
- 折线图非常适合用于跟踪短期和长期的变化,以及在同一时期内比较多个组的变化。
- 条形图则适用于比较不同类别的数量,并展示类别与其数值之间的关系。
- 最后,饼图有效地说明了类别之间的比例,并展示了整体的部分。
分析示例
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("Path/to/video/file.mp4")
assert cap.isOpened(), "错误读取视频文件"
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), # 这是固定的
)
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) # 每帧更新分析图表
out.write(im0) # 写入视频文件
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(), "错误读取视频文件"
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), # 这是固定的
)
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) # 每帧更新分析图表
out.write(im0) # 写入视频文件
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
```python import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("Path/to/video/file.mp4") assert cap.isOpened(), "错误读取视频文件"
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",
```python 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()
=== "Area chart"
```python
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()
```
### 参数 `Analytics`
以下是 `Analytics` 参数的表格:
| 名称 | 类型 | 默认值 | 描述 |
| ---------------- | ------ | ------- | -------------------------------------------------- |
| `analytics_type` | `str` | `line` | 图表类型,例如 "line"、"bar"、"area"、"pie" |
| `model` | `str` | `None` | Ultralytics YOLO 模型文件的路径 |
| `line_width` | `int` | `2` | 边界框的线条厚度。 |
| `show` | `bool` | `False` | 控制是否显示视频流的标志。 |
### 参数 `model.track`
| 参数 | 类型 | 默认值 | 描述 |
| ---------- | ------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `source` | `str` | `None` | 指定图像或视频的源目录。支持文件路径和URL。 |
| `persist` | `bool` | `False` | 启用帧间对象的持续跟踪,在视频序列中保持ID一致。 |
| `tracker` | `str` | `botsort.yaml` | 指定要使用的跟踪算法,例如 `bytetrack.yaml` 或 `botsort.yaml`。 |
| `conf` | `float` | `0.3` | 设置检测的置信度阈值;较低的值允许更多对象被跟踪,但可能包含误报。 |
| `iou` | `float` | `0.5` | 设置用于过滤重叠检测的[交并比](https://www.ultralytics.com/glossary/intersection-over-union-iou) (IoU) 阈值。 |
| `classes` | `list` | `None` | 按类别索引过滤结果。例如,`classes=[0, 2, 3]` 仅跟踪指定的类别。 |
| `verbose` | `bool` | `True` | 控制跟踪结果的显示,提供被跟踪对象的视觉输出。 |
## 结论
理解何时以及如何使用不同类型的可视化对于有效的数据分析至关重要。折线图、条形图和饼图是基本工具,可以帮助您更清晰、更有效地传达数据的故事。
## 常见问题
### 如何使用 Ultralytics YOLO11 Analytics 创建折线图?
要使用 Ultralytics YOLO11 Analytics 创建折线图,请按照以下步骤操作:
1. 加载 YOLO11 模型并打开您的视频文件。
2. 使用类型设置为 "line" 初始化 `Analytics` 类。
3. 遍历视频帧,使用相关数据(如每帧的对象数量)更新折线图。
4. 保存显示折线图的输出视频。
示例:
```python
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()
有关配置 Analytics
类的更多详细信息,请访问 使用 Ultralytics YOLO11 进行分析 📊 部分。
使用 Ultralytics YOLO11 创建条形图的好处是什么?
使用 Ultralytics YOLO11 创建条形图有以下几个好处:
- 实时数据可视化:无缝地将 对象检测 结果集成到条形图中,实现动态更新。
- 易用性:简单的 API 和函数使得实现和可视化数据变得简单直接。
- 定制化:自定义标题、标签、颜色等以满足您的特定需求。
- 效率:高效处理大量数据并在视频处理过程中实时更新图表。
使用以下示例生成条形图:
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()
为什么我应该在数据可视化项目中使用Ultralytics YOLO11来创建饼图?
Ultralytics YOLO11是创建饼图的绝佳选择,因为:
- 与目标检测的集成:直接将目标检测结果集成到饼图中,以获得即时洞察。
- 用户友好的API:设置和使用简单,代码量少。
- 可定制性:提供多种颜色、标签等自定义选项。
- 实时更新:处理和可视化实时数据,非常适合视频分析项目。
以下是一个快速示例:
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()
更多信息,请参阅指南中的饼图部分。
Ultralytics YOLO11能否用于跟踪对象并动态更新可视化?
是的,Ultralytics YOLO11可以用于跟踪对象并动态更新可视化。它支持实时跟踪多个对象,并可以根据跟踪对象的数据更新各种可视化,如折线图、条形图和饼图。
跟踪和更新折线图的示例:
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()
要了解完整功能,请参阅跟踪部分。
Ultralytics YOLO11与OpenCV和TensorFlow等其他目标检测解决方案有何不同?
Ultralytics YOLO11在多个方面与其他目标检测解决方案如OpenCV和TensorFlow不同:
- 最先进的准确性:YOLO11在目标检测、分割和分类任务中提供卓越的准确性。
- 易用性:用户友好的API允许快速实现和集成,无需大量编码。
- 实时性能:优化了高速推理,适用于实时应用。
- 多样化的应用:支持多种任务,包括多对象跟踪、自定义模型训练以及导出为ONNX、TensorRT和CoreML等不同格式。
- 全面的文档:广泛的文档和博客资源指导用户完成每一步。
要了解更多详细比较和用例,请浏览我们的Ultralytics博客。