Перейти к содержимому

Продвинутая визуализация данных: Тепловые карты с помощью Ultralytics YOLOv8 🚀.

Знакомство с тепловыми картами

Тепловая карта, созданная с помощью Ultralytics 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))

# Init heatmap
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    classes_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()
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))

line_points = [(20, 400), (1080, 404)]  # line for object counting

# Init heatmap
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    count_reg_pts=line_points,
    classes_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()
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.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    count_reg_pts=region_points,
    classes_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()
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 region points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

# Init heatmap
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    count_reg_pts=region_points,
    classes_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()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8s.pt")  # YOLOv8 custom/pretrained model

im0 = cv2.imread("path/to/image.png")  # path to image file
h, w = im0.shape[:2]  # image height and width

# Heatmap Init
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    classes_names=model.names,
)

results = model.track(im0, persist=True)
im0 = heatmap_obj.generate_heatmap(im0, tracks=results)
cv2.imwrite("ultralytics_output.png", im0)
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))

classes_for_heatmap = [0, 2]  # classes for heatmap

# Init heatmap
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    classes_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, classes=classes_for_heatmap)

    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    video_writer.write(im0)

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

Аргументы Heatmap()

Имя Тип По умолчанию Описание
classes_names dict None Словарь имен классов.
imw int 0 Ширина изображения.
imh int 0 Высота изображения.
colormap int cv2.COLORMAP_JET Цветовая карта, которую нужно использовать для тепловой карты.
heatmap_alpha float 0.5 Значение альфа-смешивания для наложения тепловой карты.
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" Форма блобов тепловой карты ("круг" или "прямоугольник").

Аргументы model.track

Имя Тип По умолчанию Описание
source im0 None исходный каталог для изображений или видео
persist bool False Сохранение треков между кадрами
tracker str botsort.yaml Метод отслеживания 'bytetrack' или 'botsort'
conf float 0.3 Порог доверия
iou float 0.5 Порог IOU
classes list None Фильтруй результаты по классам, то есть classes=0, или classes=[0,2,3]

Тепловая карта 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 (Hue, Saturation, Value)
cv::COLORMAP_PINK Карта розового цвета
cv::COLORMAP_HOT Карта горячих цветов
cv::COLORMAP_PARULA Цветная карта Паруля
cv::COLORMAP_MAGMA Карта цвета магмы
cv::COLORMAP_INFERNO Карта цвета инферно
cv::COLORMAP_PLASMA Карта цветов плазмы
cv::COLORMAP_VIRIDIS Цветная карта Виридиса
cv::COLORMAP_CIVIDIS Цветная карта Сивидиса
cv::COLORMAP_TWILIGHT Сумеречная цветная карта
cv::COLORMAP_TWILIGHT_SHIFTED Цветовая карта "Сдвинутые сумерки
cv::COLORMAP_TURBO Карта цветов турбо
cv::COLORMAP_DEEPGREEN Карта цвета глубокого зеленого

Эти колормапы обычно используются для визуализации данных с помощью различных цветовых представлений.



Created 2023-12-07, Updated 2024-06-10
Authors: glenn-jocher (11), IvorZhu331 (1), RizwanMunawar (8), AyushExel (1), 1579093407@qq.com (1)

Комментарии