即插即用 | YOLOv8热力图可视化方法详解

高级数据可视化:使用Ultralytics YOLOv8 绘制热图 🚀

热图简介

生成的热图通过Ultralytics YOLOv8将复杂的数据转换成生动的彩色编码矩阵。这种可视化工具采用色谱来表示不同的数据值,暖色调表示较高的强度,冷色调表示较低的值。热图在可视化复杂的数据模式、相关性和异常情况方面表现出色,为不同领域的数据解读提供了一种易于理解且引人入胜的方法。

观看: 使用热图Ultralytics YOLOv8

为什么选择热图进行数据分析?

  • 直观的数据分布可视化:热图可简化对数据集中和分布的理解,将复杂的数据集转换为易于理解的可视化格式。
  • 高效模式检测:通过热图格式的可视化数据,可以更容易地发现趋势、群组和异常值,从而促进更快地分析和洞察。
  • 增强空间分析和决策 :热图有助于说明空间关系,帮助商业智能、环境研究和城市规划等领域的决策过程。

真实世界的应用

  • 交通运输
    • Ultralytics YOLOv8 交通热图
  • 零售
    • Ultralytics YOLOv8 零售业热图

热图配置

  • heatmap_alpha:确保该值在 (0.0 - 1.0) 范围内。
  • decay_factor:用于在帧中不再存在对象后删除热图,其值也应在 (0.0 - 1.0) 范围内。

热图使用Ultralytics YOLOv8 示例

热图

python 复制代码
import cv2
from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
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
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Define polygon points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360), (20, 400)]

# Init heatmap
heatmap_obj = solutions(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    count_reg_pts=region_points,
    names=model.names,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    tracks = model.track(im0, persist=True, show=False)
    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()

论据 Heatmap()

名称 类型 默认值 说明
names list None 类名词典
imw int 0 图像宽度
imh int 0 图像高度
colormap int cv2.COLORMAP_JET 热图使用的颜色图
heatmap_alpha float 0.5 热图叠加的 Alpha 混合值
view_img bool False 是否使用热图叠加显示图像
view_in_counts bool True 是否显示进入区域的对象计数
view_out_counts bool True 是否显示退出区域的对象计数
count_reg_pts listNone None 定义计数区域的点(直线或多边形)
count_txt_color tuple (0, 0, 0) 显示计数的文本颜色
count_bg_color tuple (255, 255, 255) 显示计数的背景颜色
count_reg_color tuple (255, 0, 255) 计数区域的颜色
region_thickness int 5 区域线的厚度
line_dist_thresh int 15 线性计数的距离阈值
line_thickness int 2 绘画线条的粗细
decay_factor float 0.99 热图的衰减系数,用于降低随时间变化的强度
shape str "circle" 热图 Blobs 的形状("圆形"或 "矩形")

论据 model.track

名称 类型 默认值 说明
source str None 指定图像或视频的源目录。支持文件路径和 URL
persist bool False 启用跨帧持久跟踪对象,维护视频序列中的 ID
tracker str botsort.yaml 指定要使用的跟踪算法,例如 bytetrack.yamlbotsort.yaml
conf float 0.3 设置检测的置信度阈值;较低的值允许跟踪更多对象,但可能包括误报
iou float 0.5 设置过滤重叠检测的交并比(IoU)阈值
classes list None 按类索引过滤结果。例如,classes=[0, 2, 3] 只跟踪指定的类
verbose bool True 控制跟踪结果的显示,提供跟踪对象的视觉输出

热图 COLORMAPs

彩色地图名称 说明
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 Viridis 彩色地图
cv::COLORMAP_CIVIDIS Cividis 彩色地图
cv::COLORMAP_TWILIGHT 黄昏彩色地图
cv::COLORMAP_TWILIGHT_SHIFTED 偏移的曙光色彩图
cv::COLORMAP_TURBO 涡轮颜色图
cv::COLORMAP_DEEPGREEN 深绿色彩图

这些颜色图通常用于用不同的颜色表示可视化数据。

常见问题

Ultralytics YOLOv8 如何生成热图及其优势是什么?

Ultralytics YOLOv8 通过将复杂数据转换为彩色编码矩阵,不同色调代表数据强度,从而生成热图。热图更容易直观地显示数据中的模式、相关性和异常情况。较暖的色调表示较高的数值,而较冷的色调表示较低的数值。其主要优点包括直观可视化数据分布、高效模式检测和增强决策空间分析。有关详细信息和配置选项,请参阅热图配置部分。

能否使用Ultralytics YOLOv8 同时执行对象跟踪和生成热图?

是的,Ultralytics YOLOv8 支持同时进行对象跟踪和热图生成。这可以通过其 Heatmap 解决方案集成了对象跟踪模型。为此,您需要初始化热图对象并使用YOLOv8 的跟踪功能。下面是一个简单的示例:

python 复制代码
import cv2
from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
heatmap_obj = solutions(colormap=cv2.COLORMAP_PARULA, view_img=True, shape="circle", names=model.names)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        break
    tracks = model.track(im0, persist=True, show=False)
    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    cv2.imshow("Heatmap", im0)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

如需进一步指导,请查看跟踪模式页面。

Ultralytics YOLOv8 热图与 OpenCV 或 Matplotlib 等其他数据可视化工具有何不同?

Ultralytics YOLOv8 热图专为与其对象检测和跟踪模型集成而设计,为实时数据分析提供了端到端的解决方案。与 OpenCV 或 Matplotlib 等通用可视化工具不同,YOLOv8 热图针对性能和自动处理进行了优化,支持持续跟踪、衰减系数调整和实时视频叠加等功能。有关YOLOv8 独特功能的更多信息,请访问Ultralytics YOLOv8 简介。

如何使用Ultralytics YOLOv8 在热图中只显示特定对象类别?

您可以通过在 track() 方法中设置 classes 参数来实现这一点。例如,如果您只想可视化汽车和人(假设它们的类指数分别为 0 和 2),您可以设置 classes 参数。

python 复制代码
import cv2
from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
heatmap_obj = solutions.(colormap=cv2.COLORMAP_PARULA, view_img=True, shape="circle", names=model.names)

classes_for_heatmap = [0, 2]  # Classes to visualize
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        break
    tracks = model.track(im0, persist=True, show=False, classes=classes_for_heatmap)
    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    cv2.imshow("Heatmap", im0)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()
相关推荐
i查拉图斯特拉如是16 分钟前
基于MindSpore NLP的PEFT微调
人工智能·自然语言处理
mahuifa21 分钟前
QtCreator配置github copilot实现AI辅助编程
人工智能·ai编程·github copilot·qtcreator
千穹凌帝25 分钟前
基于深度学习多图像融合的屏幕缺陷检测方案
人工智能·深度学习·数码相机
张叔zhangshu2 小时前
TensorFlow 的基本概念和使用场景
人工智能·python·tensorflow
深度学习lover6 小时前
[项目代码] YOLOv8 遥感航拍飞机和船舶识别 [目标检测]
python·yolo·目标检测·计算机视觉·遥感航拍飞机和船舶识别
云起无垠6 小时前
【论文速读】| FirmRCA:面向 ARM 嵌入式固件的后模糊测试分析,并实现高效的基于事件的故障定位
人工智能·自动化
学习BigData8 小时前
【使用PyQt5和YOLOv11开发电脑屏幕区域的实时分类GUI】——选择检测区域
qt·yolo·分类
Leweslyh9 小时前
物理信息神经网络(PINN)八课时教案
人工智能·深度学习·神经网络·物理信息神经网络
love you joyfully9 小时前
目标检测与R-CNN——pytorch与paddle实现目标检测与R-CNN
人工智能·pytorch·目标检测·cnn·paddle
该醒醒了~9 小时前
PaddlePaddle推理模型利用Paddle2ONNX转换成onnx模型
人工智能·paddlepaddle