Ultralytics YOLO27:

使用 Ultralytics YOLO26 进行目标跟踪热力图分析#

Open Heatmaps In Colab

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 交通热力图Ultralytics YOLO 零售热力图

如何使用 Ultralytics YOLO 生成热力图#

你可以通过 CLI 或 Python,在视频源上运行 Heatmap 解决方案。下面的 Python 示例会将处理后的帧写入输出视频文件:

使用 Ultralytics YOLO 生成热力图
# 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 参数表:

参数类型默认值描述
modelstrNoneUltralytics YOLO 模型文件的路径。
colormapintcv2.COLORMAP_DEEPGREEN用于热力图的颜色映射。
show_inboolTrue控制是否在视频流中显示进入计数的标志。
show_outboolTrue控制是否在视频流中显示离开计数的标志。
regionlistdictNone定义感兴趣区域的点,可以是 (x, y) 元组列表,也可以是将区域名称映射到多区域点列表的字典(仅限 RegionCounter)。当 None 时,需要区域的解决方案会回退到预定义的默认区域。
line_widthint2解决方案绘制的框、关键点和计数的线条粗细。
verboseboolTrue启用解决方案逐帧记录输入形状、类别计数和处理速度的日志。跟踪调用本身始终保持静默。

你还可以在 Heatmap 解决方案中应用不同的 track 参数。

参数类型默认值描述
trackerstr'botsort.yaml'指定要使用的跟踪算法。内置选项:botsort.yamlbytetrack.yamlocsort.yamldeepocsort.yamlfasttrack.yamltracktrack.yaml
conffloat0.25设置检测的置信度阈值;较低的值允许跟踪更多对象,但可能包含误报。
ioufloat0.7设置用于过滤重叠检测结果的交并比(IoU)阈值。
classeslistNone按类别索引过滤结果。例如,classes=[0, 2, 3] 仅跟踪指定类别。
devicestrNone指定推理设备(例如 cpucuda:00)。允许用户在 CPU、特定 GPU 或其他计算设备之间进行选择,以执行模型。
imgszint or tuple640目标推理图像大小:用于正方形图像的整数或 (height, width) 对。形状会根据模型步幅进行调整。
max_detint300在跟踪前每帧保留的最大检测数量,用于限制解决方案在密集场景中处理的对象数量。
quantizeint or strNone推理精度:对于 PyTorch 和 TorchScript 模型,使用 16 (FP16) 或 32/不设置 (FP32);其他格式则在其构件和运行时所选的精度下计算。替换了已弃用的 half 标志。

此外,支持的可视化参数如下所列:

参数类型默认值描述
showboolFalse如果为 True,则会在窗口中显示带标注的图像或视频。适用于开发或测试期间获取即时视觉反馈。
show_confboolTrue在每个检测结果旁显示其置信度分数,让你了解模型对每个检测结果的确定程度。
show_labelsboolTrue在可视化输出中显示每个检测结果的标签,帮助你立即了解检测到的对象。

热力图颜色映射#

colormap 参数接受任意 OpenCV 颜色映射。传入 cv2 模块中的常量,例如 colormap=cv2.COLORMAP_INFERNO

颜色映射名称描述
cv2.COLORMAP_AUTUMNAutumn 颜色映射
cv2.COLORMAP_BONEBone 颜色映射
cv2.COLORMAP_JETJet 颜色映射
cv2.COLORMAP_WINTERWinter 颜色映射
cv2.COLORMAP_RAINBOWRainbow 颜色映射
cv2.COLORMAP_OCEANOcean 颜色映射
cv2.COLORMAP_SUMMERSummer 颜色映射
cv2.COLORMAP_SPRINGSpring 颜色映射
cv2.COLORMAP_COOLCool 颜色映射
cv2.COLORMAP_HSV色相、饱和度、明度(HSV)颜色映射
cv2.COLORMAP_PINKPink 颜色映射
cv2.COLORMAP_HOTHot 颜色映射
cv2.COLORMAP_PARULAParula 颜色映射
cv2.COLORMAP_MAGMAMagma 颜色映射
cv2.COLORMAP_INFERNOInferno 颜色映射
cv2.COLORMAP_PLASMAPlasma 颜色映射
cv2.COLORMAP_VIRIDISViridis 颜色映射
cv2.COLORMAP_CIVIDISCividis 颜色映射
cv2.COLORMAP_TWILIGHTTwilight 颜色映射
cv2.COLORMAP_TWILIGHT_SHIFTEDShifted Twilight 颜色映射
cv2.COLORMAP_TURBOTurbo 颜色映射
cv2.COLORMAP_DEEPGREENDeep Green 颜色映射

热力图的工作原理#

Heatmap 解决方案扩展了 ObjectCounter 类。在处理第一帧时,它会创建一个与帧大小相匹配的空白强度层。之后,每一帧都会经过以下两个步骤处理:

  1. YOLO26 跟踪会检测并跟随帧中的每个目标
  2. 对于每个跟踪目标,热力图强度会在以其边界框为中心的圆形区域内增加

每帧一次,累计的强度层会进行归一化,使用所选颜色映射进行着色,并与原始帧混合。只要至少跟踪到一个目标,就会显示叠加层;没有跟踪到目标的帧则不会显示热力图叠加层。

最终得到的是一种随时间逐渐累积的动态可视化效果,可揭示视频数据中的交通模式、人群移动或其他空间行为。当设置了 region 时,该方案还会在构建热力图的同时,对进入和离开该区域的目标进行计数

结论#

Ultralytics YOLO26 Heatmap 解决方案只需几行代码,就能将目标跟踪结果转换为直观的活动叠加层。你还可以将其与目标计数结合使用,探索其他 Ultralytics Solutions,或阅读底层跟踪模式的相关内容。

常见问题#

  • Ultralytics YOLO26 会跨视频帧跟踪目标,并在每个跟踪目标的位置累积强度值,然后对结果进行着色并与原始帧混合。目标频繁出现或长时间停留的区域会累积更高的强度,并以更暖的颜色呈现。如需了解配置选项,请参阅 Heatmap() 参数部分。

  • 使用 OpenCV 的 cv2.VideoWriter,并按照主示例所示,为每个处理后的帧写入 results.plot_implot_im 属性包含已应用热力图叠加层的帧。

  • 可以。向 Heatmap() 传入 region 参数,并指定线、矩形或多边形点,方案就会在构建热力图的同时,对进入和离开该区域的目标进行计数。返回结果包括 in_countout_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 模型页面

评论