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