使用 Ultralytics YOLO26 进行对象跟踪热图分析#
Ultralytics YOLO26 中的 Heatmap solution 可在视频帧中追踪对象,并将它们累积的运动强度叠加到每一帧上,使繁忙区域发出暖色光芒,而安静区域保持冷色。它基于 YOLO26 object tracking 构建,只需通过一个 Python 调用或 CLI 命令,即可将任何视频转化为显示交通流、人群移动和停留区域的空间活动图。
Watch: Heatmaps using Ultralytics YOLO26
为什么要将热图用于视频分析?#
- 一目了然地发现活动模式: 强度会在被跟踪对象停留的地方累积,因此高流量车道、热门货架或人群瓶颈无需逐帧手动查看即可凸显出来。
- 内置跟踪功能: 该解决方案在内部运行 YOLO26 检测和跟踪,因此无需额外设置跟踪流水线。
- 在单次运行中计数: 传入
region可以在生成热图的同时统计进入和离开区域的对象,从而在单次运行中结合两项分析任务。
现实世界应用#
| 交通运输 | 零售 |
|---|---|
![]() | ![]() |
| Ultralytics YOLO 交通热图 | Ultralytics YOLO 零售热图 |
如何使用 Ultralytics YOLO 生成热图#
通过 CLI 或 Python 在视频源上运行 Heatmap 解决方案。以下 Python 示例将处理后的帧写入输出视频文件:
# Run a heatmap example
yolo solutions heatmap show=True
# Pass a source video
yolo solutions heatmap source="path/to/video.mp4"
# Pass a custom colormap
yolo solutions heatmap colormap=cv2.COLORMAP_INFERNO
# Heatmaps + object counting
yolo solutions heatmap region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"Heatmap() 参数#
以下是包含 Heatmap 参数的表格:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
model | str | None | Ultralytics YOLO 模型文件的路径。 |
colormap | int | cv2.COLORMAP_DEEPGREEN | 用于热力图的颜色映射。 |
show_in | bool | True | 控制是否在视频流上显示进入计数的标志。 |
show_out | bool | True | 控制是否在视频流上显示离开计数的标志。 |
region | list 或 dict | None | 定义感兴趣区域的点,可以是 (x, y) 元组的列表,也可以是将区域名称映射到多个区域的点列表的字典(仅限 RegionCounter)。当为 None 时,需要区域的解决方案将回退到预定义的默认值。 |
你还可以在 Heatmap 方案中应用不同的 track 参数。
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
tracker | str | 'tracktrack.yaml' | 指定要使用的跟踪算法。内置选项:botsort.yaml、bytetrack.yaml、ocsort.yaml、deepocsort.yaml、fasttrack.yaml、tracktrack.yaml。 |
conf | float | 0.1 | 设置检测的置信度阈值;较低的值允许跟踪更多的对象,但也可能包含误报。 |
iou | float | 0.7 | 设置用于过滤重叠检测结果的交并比 (IoU) 阈值。 |
classes | list | None | 按类别索引过滤结果。例如,classes=[0, 2, 3] 仅跟踪指定的类别。 |
verbose | bool | True | 控制跟踪结果的显示,提供被跟踪对象的视觉输出。 |
device | str | None | 指定用于推理的设备(例如 cpu、cuda:0 或 0)。允许用户在 CPU、特定的 GPU 或用于模型执行的其他计算设备之间进行选择。 |
此外,下面列出了支持的可视化参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
show | bool | False | 如果为 True,则在窗口中显示带注释的图像或视频。对于开发或测试期间的即时视觉反馈非常有用。 |
line_width | int or None | None | 指定边界框的线条宽度。如果为 None,则线条宽度会根据图像大小自动调整。提供视觉定制以提高清晰度。 |
show_conf | bool | True | 在标签旁显示每次检测的置信度得分。让你深入了解模型对每次检测的确定性。 |
show_labels | bool | True | 在视觉输出中显示每次检测的标签。提供对检测到对象的即时理解。 |
热图色彩映射表 (Colormaps)#
colormap 参数接受任何 OpenCV colormap。请从 cv2 模块传入常量,例如 colormap=cv2.COLORMAP_INFERNO:
| 色彩映射名称 | 描述 |
|---|---|
cv2.COLORMAP_AUTUMN | Autumn 色彩映射 |
cv2.COLORMAP_BONE | Bone 色彩映射 |
cv2.COLORMAP_JET | Jet 色彩映射 |
cv2.COLORMAP_WINTER | Winter 色彩映射 |
cv2.COLORMAP_RAINBOW | Rainbow 色彩映射 |
cv2.COLORMAP_OCEAN | Ocean 色彩映射 |
cv2.COLORMAP_SUMMER | Summer 色彩映射 |
cv2.COLORMAP_SPRING | Spring 色彩映射 |
cv2.COLORMAP_COOL | Cool 色彩映射 |
cv2.COLORMAP_HSV | HSV (色相、饱和度、明度) 色彩映射 |
cv2.COLORMAP_PINK | Pink 色彩映射 |
cv2.COLORMAP_HOT | Hot 色彩映射 |
cv2.COLORMAP_PARULA | Parula 色彩映射 |
cv2.COLORMAP_MAGMA | Magma 色彩映射 |
cv2.COLORMAP_INFERNO | Inferno 色彩映射 |
cv2.COLORMAP_PLASMA | Plasma 色彩映射 |
cv2.COLORMAP_VIRIDIS | Viridis 色彩映射 |
cv2.COLORMAP_CIVIDIS | Cividis 色彩映射 |
cv2.COLORMAP_TWILIGHT | Twilight 色彩映射 |
cv2.COLORMAP_TWILIGHT_SHIFTED | Shifted Twilight 色彩映射 |
cv2.COLORMAP_TURBO | Turbo 色彩映射 |
cv2.COLORMAP_DEEPGREEN | Deep Green 色彩映射 |
热图的工作原理#
Heatmap solution 扩展了 ObjectCounter 类。在处理的第一帧上,它会创建一个与帧大小匹配的空白强度图层。然后,每一帧都会通过两个步骤进行处理:
- YOLO26 跟踪检测并跟踪帧中的每个对象
- 对于每个被跟踪的对象,热图强度在其边界框中心的圆形区域内增加
每帧处理一次,累积的强度层会进行归一化,使用选定的色彩映射表着色,并与原始帧混合。叠加层一旦跟踪到至少一个对象就会出现;没有被跟踪对象的帧将显示为没有热图叠加。
结果是一个随时间推移而构建的动态可视化效果,可揭示视频数据中的交通模式、人群移动或其他空间行为。当设置了 region 时,该解决方案还会在生成热图的同时计算对象进出该区域的情况。
结论#
Ultralytics YOLO26 Heatmap 解决方案只需几行代码即可将对象跟踪结果转换为直观的活动叠加层。要进一步了解,请将其与对象计数结合使用,探索其他 Ultralytics Solutions,或阅读底层跟踪模式的相关内容。
常见问题解答#
Ultralytics YOLO26 如何从视频生成热图?#
Ultralytics YOLO26 通过在视频帧之间跟踪对象并在每个跟踪对象的位置累积强度值来生成热图,然后为结果着色并将其与原始帧进行混合。对象频繁出现或停留的区域会积累更高的强度并以暖色呈现。有关配置选项,请参阅 Heatmap() Arguments 部分。
如何将热图输出保存到视频文件?#
使用 OpenCV 的 cv2.VideoWriter 并为每个处理过的帧编写 results.plot_im,如主要示例所示。plot_im 属性包含已应用热图叠加层的帧。
我可以将热图与对象计数结合使用吗?#
可以。将带有线、矩形或多边形点的 region 参数传递给 Heatmap(),方案就会在生成热力图的同时统计进出该区域的对象。返回结果包括 in_count、out_count 以及按类别统计的数量。有关区域配置的详情,请参阅object counting guide。
如何使用 Ultralytics YOLO26 在热图中仅可视化特定的物体类别?#
将你想保留的类别索引的 classes 参数传递给 Heatmap()。例如,classes=[0, 2] 仅通过行人和汽车(COCO 类别索引 0 和 2)来生成热力图:
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
heatmap = solutions.Heatmap(show=True, model="yolo26n.pt", classes=[0, 2])
while cap.isOpened():
success, im0 = cap.read()
if not success:
break
results = heatmap(im0)
cap.release()
cv2.destroyAllWindows()是什么让 Ultralytics YOLO26 热图不同于 OpenCV 或 Matplotlib 等其他数据可视化工具?#
Ultralytics YOLO26 热图将对象检测、跟踪、强度累积和叠加渲染集成到一个单独的调用中,而 OpenCV 或 Matplotlib 等通用工具则需要你自己构建该管道。该解决方案可以实时处理视频流,并开箱即用地支持持久跟踪和可自定义的色彩映射。有关底层模型的详细信息,请参阅 YOLO26 model page。

