Saltar al contenido

Visualización avanzada de datos: Mapas de calor con Ultralytics YOLOv8 🚀

Introducción a los mapas de calor

Un mapa de calor generado con Ultralytics YOLOv8 transforma datos complejos en una vibrante matriz codificada por colores. Esta herramienta visual emplea un espectro de colores para representar los distintos valores de los datos, donde los tonos más cálidos indican intensidades más altas y los tonos más fríos significan valores más bajos. Los mapas de calor destacan en la visualización de intrincados patrones de datos, correlaciones y anomalías, ofreciendo un enfoque accesible y atractivo para la interpretación de datos en diversos dominios.



Observa: Mapas de calor con Ultralytics YOLOv8

¿Por qué elegir mapas de calor para el análisis de datos?

  • Visualización intuitiva de la distribución de los datos: Los mapas de calor simplifican la comprensión de la concentración y distribución de los datos, convirtiendo conjuntos de datos complejos en formatos visuales fáciles de entender.
  • Detección eficaz de patrones: Al visualizar los datos en formato de mapa de calor, resulta más fácil detectar tendencias, agrupaciones y valores atípicos, lo que facilita un análisis y una comprensión más rápidos.
  • Mejora del análisis espacial y la toma de decisiones: Los mapas de calor son fundamentales para ilustrar las relaciones espaciales, ayudando en los procesos de toma de decisiones en sectores como la inteligencia empresarial, los estudios medioambientales y la planificación urbana.

Aplicaciones en el mundo real

Transporte Venta al por menor
Ultralytics YOLOv8 Mapa de calor del transporte Ultralytics YOLOv8 Mapa de calor del comercio minorista
Ultralytics YOLOv8 Mapa de calor del transporte Ultralytics YOLOv8 Mapa de calor del comercio minorista

Configuración del mapa de calor

  • heatmap_alpha: Asegúrate de que este valor está dentro del intervalo (0,0 - 1,0).
  • decay_factor: Se utiliza para eliminar el mapa de calor cuando un objeto ya no está en el fotograma, su valor también debe estar en el intervalo (0,0 - 1,0).

Mapas de calor utilizando Ultralytics YOLOv8 Ejemplo

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()

Argumentos Heatmap()

Nombre Tipo Por defecto Descripción
classes_names dict None Diccionario de nombres de clase.
imw int 0 Anchura de la imagen.
imh int 0 Altura de la imagen.
colormap int cv2.COLORMAP_JET Mapa de color a utilizar para el mapa de calor.
heatmap_alpha float 0.5 Valor de mezcla alfa para la superposición del mapa térmico.
view_img bool False Si mostrar la imagen con la superposición del mapa de calor.
view_in_counts bool True Si se muestra el recuento de objetos que entran en la región.
view_out_counts bool True Si se muestra el recuento de objetos que salen de la región.
count_reg_pts list o None None Puntos que definen la región de recuento (una línea o un polígono).
count_txt_color tuple (0, 0, 0) Color del texto para mostrar los recuentos.
count_bg_color tuple (255, 255, 255) Color de fondo para mostrar los recuentos.
count_reg_color tuple (255, 0, 255) Color de la región de recuento.
region_thickness int 5 Grosor de la línea de la región.
line_dist_thresh int 15 Umbral de distancia para el recuento basado en líneas.
line_thickness int 2 Grosor de las líneas utilizadas en el dibujo.
decay_factor float 0.99 Factor de decaimiento del mapa térmico para reducir la intensidad con el tiempo.
shape str "circle" Forma de las manchas del mapa térmico ("círculo" o "rect").

Argumentos model.track

Nombre Tipo Por defecto Descripción
source im0 None directorio fuente de imágenes o vídeos
persist bool False persistencia de pistas entre fotogramas
tracker str botsort.yaml Método de seguimiento 'bytetrack' o 'botsort'
conf float 0.3 Umbral de confianza
iou float 0.5 Umbral del pagaré
classes list None filtrar los resultados por clase, es decir, classes=0, o classes=[0,2,3]

Mapa térmico COLORMAPAS

Nombre del mapa de colores Descripción
cv::COLORMAP_AUTUMN Mapa de colores de otoño
cv::COLORMAP_BONE Mapa de color de los huesos
cv::COLORMAP_JET Mapa de color del chorro
cv::COLORMAP_WINTER Mapa de colores de invierno
cv::COLORMAP_RAINBOW Mapa de colores del arco iris
cv::COLORMAP_OCEAN Mapa del color del océano
cv::COLORMAP_SUMMER Mapa de colores de verano
cv::COLORMAP_SPRING Mapa de colores de primavera
cv::COLORMAP_COOL Bonito mapa de colores
cv::COLORMAP_HSV Mapa de color HSV (Tono, Saturación, Valor)
cv::COLORMAP_PINK Mapa de color rosa
cv::COLORMAP_HOT Mapa de colores calientes
cv::COLORMAP_PARULA Mapa de colores de Parula
cv::COLORMAP_MAGMA Mapa de colores del magma
cv::COLORMAP_INFERNO Mapa de colores de Inferno
cv::COLORMAP_PLASMA Mapa de colores del plasma
cv::COLORMAP_VIRIDIS Mapa de colores de Viridis
cv::COLORMAP_CIVIDIS Mapa en color de Cividis
cv::COLORMAP_TWILIGHT Mapa de colores del crepúsculo
cv::COLORMAP_TWILIGHT_SHIFTED Mapa de colores del Crepúsculo desplazado
cv::COLORMAP_TURBO Mapa de colores turbo
cv::COLORMAP_DEEPGREEN Mapa de color Verde Profundo

Estos mapas de colores se utilizan habitualmente para visualizar datos con diferentes representaciones de color.



Creado 2023-12-07, Actualizado 2024-05-18
Autores: glenn-jocher (9), RizwanMunawar (8), AyushExel (1), 1579093407@qq.com (1)

Comentarios