高级数据可视化:使用Ultralytics YOLO11的热图 🚀
热图简介
使用Ultralytics YOLO11生成的热图将复杂数据转化为色彩鲜艳、编码矩阵的视觉工具。该工具利用色彩光谱来表示不同的数据值,其中暖色调表示较高的强度,冷色调表示较低的值。热图在可视化复杂数据模式、相关性和异常方面表现出色,为跨多个领域的数据解释提供了一种易于理解和吸引人的方法。
观看: 使用Ultralytics YOLO11的热图
为什么选择热图进行数据分析?
- 直观的数据分布可视化: 热图简化了数据集中度和分布的理解,将复杂的数据集转化为易于理解的视觉格式。
- 高效的模式检测: 通过热图格式可视化数据,更容易发现趋势、集群和异常值,从而加快分析和洞察。
- 增强的空间分析和决策制定: 热图在说明空间关系方面具有重要作用,有助于商业智能、环境研究和城市规划等领域的决策过程。
实际应用
交通运输 | 零售 |
---|---|
Ultralytics YOLO11交通运输热图 | Ultralytics YOLO11零售热图 |
使用Ultralytics YOLO11的热图示例
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))
# 视频写入器
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# 初始化热图
heatmap = solutions.Heatmap(
show=True,
model="yolo11n.pt",
colormap=cv2.COLORMAP_PARULA,
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("视频帧为空或视频处理已成功完成。")
break
im0 = heatmap.generate_heatmap(im0)
video_writer.write(im0)
cap.release()
video_writer.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))
视频写入器
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
对象计数的线条
line_points = [(20, 400), (1080, 404)]
初始化热图
heatmap = solutions.Heatmap( show=True, model="yolo11n.pt", colormap=cv2.COLORMAP_PARULA,
``` region=line_points, )
while cap.isOpened(): success, im0 = cap.read() if not success: print("视频帧为空或视频处理已成功完成。") break im0 = heatmap.generate_heatmap(im0) video_writer.write(im0)
cap.release() video_writer.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))
# 视频写入器
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# 定义多边形点
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360), (20, 400)]
# 初始化热图
heatmap = solutions.Heatmap(
show=True,
model="yolo11n.pt",
colormap=cv2.COLORMAP_PARULA,
region=region_points,
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("视频帧为空或视频处理已成功完成。")
break
im0 = heatmap.generate_heatmap(im0)
video_writer.write(im0)
cap.release()
video_writer.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))
# 视频写入器
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# 定义区域点
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]
# 初始化热图
heatmap = solutions.Heatmap(
show=True,
model="yolo11n.pt",
colormap=cv2.COLORMAP_PARULA,
region=region_points,
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("视频帧为空或视频处理已成功完成。")
break
im0 = heatmap.generate_heatmap(im0)
video_writer.write(im0)
cap.release()
video_writer.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))
# 视频写入器
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# 初始化热图
heatmap = solutions.Heatmap(
show=True,
model="yolo11n.pt",
classes=[0, 2],
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("视频帧为空或视频处理已成功完成。")
break
im0 = heatmap.generate_heatmap(im0)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
```
### 参数 `Heatmap()`
| 名称 | 类型 | 默认值 | 描述 |
| ------------ | ------ | ------------------ | ----------------------------------------------------------------- |
| `colormap` | `int` | `cv2.COLORMAP_JET` | 用于热图的色彩映射。 |
| `show` | `bool` | `False` | 是否显示带有热图叠加的图像。 |
| `show_in` | `bool` | `True` | 是否显示进入区域的对象计数。 |
| `show_out` | `bool` | `True` | 是否显示离开区域的对象计数。 |
| `region` | `list` | `None` | 定义计数区域的点(可以是线或多边形)。 |
| `line_width` | `int` | `2` | 绘图时使用的线条厚度。 |
### 参数 `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` | 控制跟踪结果的显示,提供被跟踪对象的视觉输出。 |
### 热图色彩映射
| 色彩映射名称 | 描述 |
| ------------------------------- | -------------------------------------- |
| `cv::COLORMAP_AUTUMN` | 秋色图 |
| `cv::COLORMAP_BONE` | 骨色图 |
| `cv::COLORMAP_JET` | 喷射色图 |
| `cv::COLORMAP_WINTER` | 冬色图 |
| `cv::COLORMAP_RAINBOW` | 彩虹色图 |
| `cv::COLORMAP_OCEAN` | 海洋色图 |
| `cv::COLORMAP_SUMMER` | 夏色图 |
| `cv::COLORMAP_SPRING` | 春色图 |
| `cv::COLORMAP_COOL` | 冷色图 |
| `cv::COLORMAP_HSV` | HSV(色相、饱和度、明度)色图 |
| `cv::COLORMAP_PINK` | 粉色图 |
| `cv::COLORMAP_HOT` | 热色图 |
| `cv::COLORMAP_PARULA` | 帕鲁拉色图 |
| `cv::COLORMAP_MAGMA` | 岩浆色图 |
| `cv::COLORMAP_INFERNO` | 地狱色图 |
| `cv::COLORMAP_PLASMA` | 等离子色图 |
| `cv::COLORMAP_VIRIDIS` | 维里迪斯色图 |
| `cv::COLORMAP_CIVIDIS` | 西维迪斯色图 |
| `cv::COLORMAP_TWILIGHT` | 黄昏色图 |
| `cv::COLORMAP_TWILIGHT_SHIFTED` | 偏移黄昏色图 |
| `cv::COLORMAP_TURBO` | 涡轮色图 |
| `cv::COLORMAP_DEEPGREEN` | 深绿色图 |
这些色图常用于以不同颜色表示数据的可视化。
## 常见问题
### Ultralytics YOLO11 如何生成热图,它们有什么好处?
Ultralytics YOLO11 通过将复杂数据转换为颜色编码的矩阵来生成热图,其中不同的色调代表数据强度。热图使得更容易可视化数据中的模式、相关性和异常。较暖的色调表示较高的值,而较冷的色调表示较低的值。主要好处包括数据分布的直观可视化、高效的模式检测以及增强的空间分析以支持决策。有关更多详细信息和配置选项,请参阅[热图配置](#arguments-heatmap)部分。
### 我可以同时使用 Ultralytics YOLO11 进行对象跟踪并生成热图吗?
是的,Ultralytics YOLO11 支持同时进行对象跟踪和热图生成。这可以通过其与对象跟踪模型集成的 `Heatmap` 解决方案实现。为此,您需要初始化热图对象并使用 YOLO11 的跟踪功能。以下是一个简单的示例:
```python
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video/file.mp4")
heatmap = solutions.Heatmap(colormap=cv2.COLORMAP_PARULA, show=True, model="yolo11n.pt")
while cap.isOpened():
success, im0 = cap.read()
if not success:
break
im0 = heatmap.generate_heatmap(im0)
cv2.imshow("Heatmap", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
有关进一步指导,请查看跟踪模式页面。
Ultralytics YOLO11 热图与其他数据可视化工具(如 OpenCV 或 Matplotlib)有何不同?
Ultralytics YOLO11 热图专为与其对象检测和跟踪模型集成而设计,提供了一个端到端的实时数据分析解决方案。与 OpenCV 或 Matplotlib 等通用可视化工具不同,YOLO11 热图针对性能和自动化处理进行了优化,支持持久跟踪、衰减因子调整和实时视频叠加等功能。有关 YOLO11 独特功能的更多信息,请访问Ultralytics YOLO11 介绍。
如何使用 Ultralytics YOLO11 仅可视化特定对象类别的热图?
您可以通过在 YOLO 模型的 track()
方法中指定所需类别来可视化特定对象类别。例如,如果您只想可视化汽车和行人(假设它们的类别索引为 0 和 2),您可以相应地设置 classes
参数。
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video/file.mp4")
heatmap = solutions.Heatmap(show=True, model="yolo11n.pt", classes=[0, 2])
while cap.isOpened():
success, im0 = cap.read()
if not success:
break
im0 = heatmap.generate_heatmap(im0)
cv2.imshow("Heatmap", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
为什么企业在数据分析中应选择Ultralytics YOLO11进行热图生成?
Ultralytics YOLO11提供了高级物体检测与实时热图生成的无缝集成,使其成为企业希望更有效地可视化数据的理想选择。其主要优势包括直观的数据分布可视化、高效的图案检测以及增强的空间分析,从而有助于做出更好的决策。此外,YOLO11的尖端功能,如持续跟踪、可定制的色图以及对多种导出格式的支持,使其在全面数据分析方面优于其他工具,如TensorFlow和OpenCV。了解更多关于商业应用的信息,请访问Ultralytics计划。