当前位置: 首页 > article >正文

即插即用 | 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 示例

热图

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()

名称类型默认值说明
nameslistNone类名词典
imwint0图像宽度
imhint0图像高度
colormapintcv2.COLORMAP_JET热图使用的颜色图
heatmap_alphafloat0.5热图叠加的 Alpha 混合值
view_imgboolFalse是否使用热图叠加显示图像
view_in_countsboolTrue是否显示进入区域的对象计数
view_out_countsboolTrue是否显示退出区域的对象计数
count_reg_ptslistNoneNone定义计数区域的点(直线或多边形)
count_txt_colortuple(0, 0, 0)显示计数的文本颜色
count_bg_colortuple(255, 255, 255)显示计数的背景颜色
count_reg_colortuple(255, 0, 255)计数区域的颜色
region_thicknessint5区域线的厚度
line_dist_threshint15线性计数的距离阈值
line_thicknessint2绘画线条的粗细
decay_factorfloat0.99热图的衰减系数,用于降低随时间变化的强度
shapestr"circle"热图 Blobs 的形状("圆形"或 “矩形”)

论据 model.track

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

热图 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_HSVHSV(色调、饱和度、值)色彩图
cv::COLORMAP_PINK粉色地图
cv::COLORMAP_HOT热门彩色地图
cv::COLORMAP_PARULA帕鲁拉彩图
cv::COLORMAP_MAGMA岩浆颜色图
cv::COLORMAP_INFERNO地狱彩色地图
cv::COLORMAP_PLASMA等离子彩图
cv::COLORMAP_VIRIDISViridis 彩色地图
cv::COLORMAP_CIVIDISCividis 彩色地图
cv::COLORMAP_TWILIGHT黄昏彩色地图
cv::COLORMAP_TWILIGHT_SHIFTED偏移的曙光色彩图
cv::COLORMAP_TURBO涡轮颜色图
cv::COLORMAP_DEEPGREEN深绿色彩图

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

常见问题

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

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

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

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

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 参数。

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()

http://www.kler.cn/news/310114.html

相关文章:

  • MySQL的(DDL、DCL、DQL、DML)语言学习
  • 7.7opencv中(基于C++) 翻转图像
  • 完全解决git clone超时和git子模块无法下载问题
  • CSS学习路线
  • 11 vue3之插槽全家桶
  • 【JavaEE】多线程编程引入——认识Thread类
  • mysql怎样优化count(*) from 表名 where …… or ……这种慢sql
  • c++基础入门三
  • Java Web开发中处理Response返回值的技巧与实践
  • 1×1卷积核【super star 卷积核】
  • 【数据结构-线段树】【差分】力扣732. 我的日程安排表 III
  • 基于PHP的丽江旅游管理系统
  • VMware ESXi 7.0U3q macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025
  • STM32快速复习(十二)FLASH闪存的读写
  • [Meachines] [Medium] Bart Server Monitor+Internal Chat+UA投毒+Winlogon用户密码泄露权限提升
  • MySQL高阶1777-每家商店的产品价格
  • 文心智能体 恐怖类游戏
  • 一.Oracle每日运维操作
  • bug | pycharm社区版无sciview解决办法
  • JVM 调优篇7 调优案例1-堆空间的优化解决
  • Holynix: v1
  • 基于SSM的在线家用电器销售系统
  • 【ARM】Trustzone和安全架构
  • [SDX35+WCN6856]SDX35 + WCN6856 WiFi导致系统crash问题分析及解决方案
  • (娱乐)魔改浏览器-任务栏图标右上角加提示徽章
  • 线性链条件随机场(Linear Chain Conditional Random Field)-有监督学习方法、概率模型、生成模型、对数线性模型、参数化模型
  • 力扣(LeetCode)每日一题 1184. 公交站间的距离
  • 前后端分离Vue美容店会员信息管理系统o7grs
  • Java-使用反射来处理对象,并构建新的JSON数据结构
  • 换个手机IP地址是不是不一样?