即插即用 | 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()
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
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 | list 或 None | 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.yaml 或 botsort.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 的跟踪功能。下面是一个简单的示例:
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()