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

Argumentos Heatmap()

Nombre Tipo Por defecto Descripción
names list 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.

PREGUNTAS FRECUENTES

¿Cómo genera Ultralytics YOLOv8 mapas de calor y cuáles son sus ventajas?

Ultralytics YOLOv8 genera mapas de calor transformando datos complejos en una matriz codificada por colores en la que los distintos tonos representan las intensidades de los datos. Los mapas de calor facilitan la visualización de patrones, correlaciones y anomalías en los datos. Los tonos más cálidos indican valores más altos, mientras que los tonos más fríos representan valores más bajos. Las principales ventajas son la visualización intuitiva de la distribución de los datos, la detección eficaz de patrones y la mejora del análisis espacial para la toma de decisiones. Para más detalles y opciones de configuración, consulta la sección Configuración del mapa de calor.

¿Puedo utilizar Ultralytics YOLOv8 para realizar el seguimiento de objetos y generar un mapa térmico simultáneamente?

Sí, Ultralytics YOLOv8 admite el seguimiento de objetos y la generación de mapas térmicos simultáneamente. Esto puede conseguirse mediante su Heatmap integrada con modelos de seguimiento de objetos. Para ello, tienes que inicializar el objeto mapa térmico y utilizar las funciones de seguimiento de YOLOv8. He aquí un ejemplo sencillo:

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

Para más orientación, consulta la página Modo de seguimiento.

¿Qué diferencia a Ultralytics YOLOv8 heatmaps de otras herramientas de visualización de datos como las de OpenCV o Matplotlib?

Ultralytics YOLOv8 están diseñados específicamente para integrarse con sus modelos de detección y seguimiento de objetos, proporcionando una solución integral para el análisis de datos en tiempo real. A diferencia de las herramientas de visualización genéricas como OpenCV o Matplotlib, los mapas de calor de YOLOv8 están optimizados para el rendimiento y el procesamiento automatizado, y admiten funciones como el seguimiento persistente, el ajuste del factor de decaimiento y la superposición de vídeo en tiempo real. Para más información sobre las características exclusivas de YOLOv8, visita la página Ultralytics YOLOv8 Introducción.

¿Cómo puedo visualizar sólo clases específicas de objetos en mapas térmicos utilizando Ultralytics YOLOv8 ?

Puedes visualizar clases específicas de objetos especificando las clases deseadas en el campo track() del modelo YOLO . Por ejemplo, si sólo quieres visualizar coches y personas (suponiendo que sus índices de clase sean 0 y 2), puedes establecer el método classes en consecuencia.

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

¿Por qué las empresas deberían elegir Ultralytics YOLOv8 para la generación de mapas térmicos en el análisis de datos?

Ultralytics YOLOv8 ofrece una integración perfecta de la detección avanzada de objetos y la generación de mapas térmicos en tiempo real, lo que la convierte en una opción ideal para las empresas que desean visualizar los datos de forma más eficaz. Las principales ventajas incluyen una visualización intuitiva de la distribución de los datos, una detección eficaz de patrones y un análisis espacial mejorado para una mejor toma de decisiones. Además, las funciones de vanguardia de YOLOv8, como el seguimiento persistente, los mapas de colores personalizables y la compatibilidad con varios formatos de exportación, lo hacen superior a otras herramientas como TensorFlow y OpenCV para el análisis exhaustivo de datos. Más información sobre aplicaciones empresariales en Ultralytics Planes.



Creado 2023-12-07, Actualizado 2024-07-14
Autores: RizwanMunawar (8), glenn-jocher (13), IvorZhu331 (1), AyushExel (1), 1579093407@qq.com (1)

Comentarios