使用 Ultralytics YOLO26 生成目标跟踪热力图#
热力图解决方案可通过 Ultralytics YOLO26 跨视频帧跟踪目标,并将目标累积的运动强度叠加到每一帧上,因此繁忙区域会呈现暖色,安静区域则保持冷色。该方案基于 YOLO26目标跟踪,只需调用一次 Python 或 CLI 命令,即可将任意视频转换为空间活动图,显示交通流、人群移动和停留区域。
观看: 如何使用 Ultralytics YOLO26 创建热力图 | 可视化目标活动 | 零售行业 VisionAI 🚀
为什么要使用热力图进行视频分析?#
- 一眼发现活动模式: 跟踪目标停留的区域会累积强度,因此无需逐帧人工查看,就能显现交通繁忙的车道、热门货架或人群拥堵点。
- 内置跟踪功能: 该解决方案会在内部运行 YOLO26 检测和跟踪,因此无需单独搭建跟踪流水线。
- 一次运行即可计数: 传入
region,即可在生成热力图的同时统计进入和离开区域的目标数量,一次运行完成两项分析任务。
实际应用#
| 交通运输 | 零售 |
|---|---|
![]() | ![]() |
| Ultralytics YOLO 交通热力图 | Ultralytics YOLO 零售热力图 |
如何使用 Ultralytics YOLO 生成热力图#
通过 CLI 或 Python 对视频源运行热力图解决方案。下面的 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 | 'tracktrack.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 | 秋季颜色映射 |
cv2.COLORMAP_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 颜色映射 |
热力图的工作原理#
热力图解决方案扩展了ObjectCounter类。处理第一帧时,它会创建一个与帧尺寸相同的空白强度层。随后,每帧都会经过两个步骤处理:
- YOLO26 跟踪会检测并追踪帧中的每个对象
- 对于每个被跟踪的对象,热力图强度会在其边界框中心的圆形区域内增加
每帧处理一次时,系统会对累积的强度层进行归一化,使用所选颜色映射着色,并与原始帧混合。至少跟踪到一个对象后,叠加层才会显示;在此之前,帧会以未叠加热力图的形式显示。
生成的动态图像会随着时间推移逐渐累积,展现视频数据中的交通模式、人群移动或其他空间行为。设置 region 后,该解决方案还会在热力图逐渐形成的同时,统计进入和离开该区域的对象。
结论#
Ultralytics YOLO26 热力图解决方案只需几行代码,就能将对象跟踪结果转换为直观的活动叠加层。你可以进一步将它与对象计数结合,探索其他 Ultralytics 解决方案,或阅读底层的跟踪模式。
常见问题#
Ultralytics YOLO26 会跟踪视频帧中的对象,在每个被跟踪对象的位置累积强度值,然后为结果着色并与原始帧混合,从而生成热力图。对象频繁出现或停留较久的区域会累积更高的强度,并以更暖的颜色呈现。配置选项请参阅
Heatmap()参数部分。如主示例所示,使用 OpenCV 的
cv2.VideoWriter,并为每个处理后的帧写入results.plot_im。plot_im属性中保存的是已应用热力图叠加层的帧。可以。将
region参数传给Heatmap(),并提供线段、矩形或多边形的点;该解决方案会在热力图逐渐形成的同时统计进入和离开该区域的对象。返回结果包括in_count、out_count和各类别的计数。有关区域配置的详细信息,请参阅对象计数指南。将
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 等通用工具需要你自行构建整个处理流程。该解决方案可实时处理视频流,并开箱即用地支持持久化跟踪和可自定义的颜色映射。有关底层模型的详细信息,请参阅 YOLO26 模型页面。

