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

Продвинутая визуализация данных: Тепловые карты с помощью 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

from ultralytics import YOLO
from ultralytics.solutions import heatmap
import cv2

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 = heatmap.Heatmap()
heatmap_obj.set_args(colormap=cv2.COLORMAP_PARULA,
                     imw=w,
                     imh=h,
                     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()
from ultralytics import YOLO
from ultralytics.solutions import heatmap
import cv2

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 = heatmap.Heatmap()
heatmap_obj.set_args(colormap=cv2.COLORMAP_PARULA,
                     imw=w,
                     imh=h,
                     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()
from ultralytics import YOLO
import heatmap
import cv2

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 = heatmap.Heatmap()
heatmap_obj.set_args(colormap=cv2.COLORMAP_PARULA,
                     imw=w,
                     imh=h,
                     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()
from ultralytics import YOLO
from ultralytics.solutions import heatmap
import cv2

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 = heatmap.Heatmap()
heatmap_obj.set_args(colormap=cv2.COLORMAP_PARULA,
                     imw=w,
                     imh=h,
                     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()
from ultralytics import YOLO
from ultralytics.solutions import heatmap
import cv2

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 = heatmap.Heatmap()
heatmap_obj.set_args(colormap=cv2.COLORMAP_PARULA,
                     imw=w,
                     imh=h,
                     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)
from ultralytics import YOLO
from ultralytics.solutions import heatmap
import cv2

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 = heatmap.Heatmap()
heatmap_obj.set_args(colormap=cv2.COLORMAP_PARULA,
                     imw=w,
                     imh=h,
                     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()

Аргументы set_args

Имя Тип По умолчанию Описание
view_img bool False Отображение кадра с тепловой картой
colormap cv2.COLORMAP None cv2.COLORMAP для тепловой карты
imw int None Ширина тепловой карты
imh int None Высота тепловой карты
line_thickness int 2 Увеличьте ограничительные рамки и подсчитайте толщину текста
view_in_counts bool True Отображайте счетчики только на видеокадре
view_out_counts bool True Отображайте выходы только на видеокадре
classes_names dict model.model.names Словарь названий классов
heatmap_alpha float 0.5 Альфа-значение тепловой карты
count_reg_pts list None Объект подсчета точек области
count_txt_color RGB Color (0, 0, 0) Цвет переднего плана для текста подсчета объектов
count_reg_color RGB Color (255, 0, 255) Цвет области подсчета
region_thickness int 5 Значение толщины области подсчета
decay_factor float 0.99 Коэффициент затухания для удаления области тепловой карты через определенное время
shape str circle Поддерживается форма тепловой карты для отображения "прямоугольник" или "круг"
line_dist_thresh int 15 Порог евклидова расстояния для счетчика линий
count_bg_color RGB Color (255, 255, 255) Подсчитай цвет хайлайтера
cls_txtdisplay_gap int 50 Отображение промежутка между каждым классом

Аргументы 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 Карта цвета глубокого зеленого

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



Создано 2023-12-07, Обновлено 2024-04-05
Авторы: RizwanMunawar (8), glenn-jocher (7), AyushExel (1), 1579093407@qq.com (1)

Комментарии