使用 Ultralytics YOLO26 进行目标跟踪热力图分析#
Heatmap 解决方案集成于 Ultralytics YOLO26 中,可跨视频帧跟踪目标,并将其累计移动强度叠加到每一帧上,因此繁忙区域会以暖色发光,而安静区域则保持冷色。该方案基于 YOLO26 目标跟踪,只需一行 Python 代码或一条 CLI 命令,即可将任意视频转换为空间活动图,展示交通流、人员移动和停留区域。
Watch: How to Create Heatmaps with Ultralytics YOLO26 | Visualize Object Activity | VisionAI in Retail 🚀
为什么要在视频分析中使用热力图?#
- 一眼发现活动模式: 跟踪目标停留的区域会不断累积强度,因此无需逐帧手动检查,就能突出高流量通道、热门货架或人群拥堵点。
- 内置跟踪功能: 该方案在内部运行 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 时,需要区域的解决方案会回退到预定义的默认区域。 |
line_width | int | 2 | 解决方案绘制的框、关键点和计数的线条粗细。 |
verbose | bool | True | 启用解决方案逐帧记录输入形状、类别计数和处理速度的日志。跟踪调用本身始终保持静默。 |
你还可以在 Heatmap 解决方案中应用不同的 track 参数。
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
tracker | str | 'botsort.yaml' | 指定要使用的跟踪算法。内置选项:botsort.yaml、bytetrack.yaml、ocsort.yaml、deepocsort.yaml、fasttrack.yaml、tracktrack.yaml。 |
conf | float | 0.25 | 设置检测的置信度阈值;较低的值允许跟踪更多对象,但可能包含误报。 |
iou | float | 0.7 | 设置用于过滤重叠检测结果的交并比(IoU)阈值。 |
classes | list | None | 按类别索引过滤结果。例如,classes=[0, 2, 3] 仅跟踪指定类别。 |
device | str | None | 指定推理设备(例如 cpu、cuda:0 或 0)。允许用户在 CPU、特定 GPU 或其他计算设备之间进行选择,以执行模型。 |
imgsz | int or tuple | 640 | 目标推理图像大小:用于正方形图像的整数或 (height, width) 对。形状会根据模型步幅进行调整。 |
max_det | int | 300 | 在跟踪前每帧保留的最大检测数量,用于限制解决方案在密集场景中处理的对象数量。 |
quantize | int or str | None | 推理精度:对于 PyTorch 和 TorchScript 模型,使用 16 (FP16) 或 32/不设置 (FP32);其他格式则在其构件和运行时所选的精度下计算。替换了已弃用的 half 标志。 |
此外,支持的可视化参数如下所列:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
show | bool | False | 如果为 True,则会在窗口中显示带标注的图像或视频。适用于开发或测试期间获取即时视觉反馈。 |
show_conf | bool | True | 在每个检测结果旁显示其置信度分数,让你了解模型对每个检测结果的确定程度。 |
show_labels | bool | True | 在可视化输出中显示每个检测结果的标签,帮助你立即了解检测到的对象。 |
热力图颜色映射#
colormap 参数接受任意 OpenCV 颜色映射。传入 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 解决方案扩展了 ObjectCounter 类。在处理第一帧时,它会创建一个与帧大小相匹配的空白强度层。之后,每一帧都会经过以下两个步骤处理:
- YOLO26 跟踪会检测并跟随帧中的每个目标
- 对于每个跟踪目标,热力图强度会在以其边界框为中心的圆形区域内增加
每帧一次,累计的强度层会进行归一化,使用所选颜色映射进行着色,并与原始帧混合。只要至少跟踪到一个目标,就会显示叠加层;没有跟踪到目标的帧则不会显示热力图叠加层。
最终得到的是一种随时间逐渐累积的动态可视化效果,可揭示视频数据中的交通模式、人群移动或其他空间行为。当设置了 region 时,该方案还会在构建热力图的同时,对进入和离开该区域的目标进行计数。
结论#
Ultralytics YOLO26 Heatmap 解决方案只需几行代码,就能将目标跟踪结果转换为直观的活动叠加层。你还可以将其与目标计数结合使用,探索其他 Ultralytics Solutions,或阅读底层跟踪模式的相关内容。
常见问题#
Ultralytics YOLO26 会跨视频帧跟踪目标,并在每个跟踪目标的位置累积强度值,然后对结果进行着色并与原始帧混合。目标频繁出现或长时间停留的区域会累积更高的强度,并以更暖的颜色呈现。如需了解配置选项,请参阅
Heatmap()参数部分。使用 OpenCV 的
cv2.VideoWriter,并按照主示例所示,为每个处理后的帧写入results.plot_im。plot_im属性包含已应用热力图叠加层的帧。可以。向
Heatmap()传入region参数,并指定线、矩形或多边形点,方案就会在构建热力图的同时,对进入和离开该区域的目标进行计数。返回结果包括in_count、out_count以及按类别统计的计数。有关区域配置的详细信息,请参阅目标计数指南。向
Heatmap()传入classes参数,并指定你要保留的类别索引。例如,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 等通用工具则需要你自行搭建这套流程。该方案可实时处理视频流,并开箱即用地支持持久跟踪和可自定义颜色映射。有关底层模型的详细信息,请参阅 YOLO26 模型页面。

