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

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

Имя Тип По умолчанию Описание
names list 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 Карта цвета глубокого зеленого

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

ВОПРОСЫ И ОТВЕТЫ

Как Ultralytics YOLOv8 генерирует тепловые карты и в чем их преимущества.

Ultralytics YOLOv8 генерирует тепловые карты, преобразуя сложные данные в матрицу с цветовой кодировкой, где разные оттенки представляют интенсивность данных. Тепловые карты облегчают визуализацию закономерностей, корреляций и аномалий в данных. Более теплые оттенки обозначают более высокие значения, а более холодные - более низкие. К основным преимуществам относятся интуитивная визуализация распределения данных, эффективное обнаружение закономерностей и улучшенный пространственный анализ для принятия решений. Более подробную информацию и варианты конфигурации ты найдешь в разделе " Конфигурация тепловой карты ".

Могу ли я использовать Ultralytics YOLOv8 для одновременного отслеживания объектов и создания тепловой карты?

Да, Ultralytics YOLOv8 поддерживает отслеживание объектов и одновременное создание тепловых карт. Этого можно достичь благодаря Heatmap решение, интегрированное с моделями отслеживания объектов. Для этого тебе нужно инициализировать объект heatmap и использовать возможности отслеживания YOLOv8. Вот простой пример:

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
heatmap_obj = solutions.Heatmap(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() метод модели YOLO . Например, если ты хочешь визуализировать только автомобили и людей (предполагается, что индексы их классов равны 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.Heatmap(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()

Почему предприятиям стоит выбрать Ultralytics YOLOv8 для создания тепловых карт при анализе данных?

Ultralytics YOLOv8 предлагает бесшовную интеграцию расширенного обнаружения объектов и создания тепловых карт в реальном времени, что делает его идеальным выбором для компаний, стремящихся к более эффективной визуализации данных. Среди ключевых преимуществ - интуитивно понятная визуализация распределения данных, эффективное обнаружение закономерностей и улучшенный пространственный анализ для принятия более эффективных решений. Кроме того, такие передовые функции YOLOv8, как постоянное отслеживание, настраиваемые цветовые карты и поддержка различных форматов экспорта, делают его лучше других инструментов, таких как TensorFlow и OpenCV, для комплексного анализа данных. Узнай больше о бизнес-приложениях на сайте Ultralytics Plans.



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

Комментарии