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