Skip to content

高级数据可视化:使用Ultralytics YOLO11的热图 🚀

热图简介

使用Ultralytics YOLO11生成的热图将复杂数据转化为色彩鲜艳、编码矩阵的视觉工具。该工具利用色彩光谱来表示不同的数据值,其中暖色调表示较高的强度,冷色调表示较低的值。热图在可视化复杂数据模式、相关性和异常方面表现出色,为跨多个领域的数据解释提供了一种易于理解和吸引人的方法。



观看: 使用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计划


📅 Created 10 months ago ✏️ Updated 7 days ago

Comments