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 |
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
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()
Argumentos set_args
Nombre | Tipo | Por defecto | Descripción |
---|---|---|---|
view_img |
bool |
False |
Visualizar el marco con mapa térmico |
colormap |
cv2.COLORMAP |
None |
cv2.COLORMAP para el mapa térmico |
imw |
int |
None |
Anchura del mapa térmico |
imh |
int |
None |
Altura del mapa térmico |
line_thickness |
int |
2 |
Aumentar los cuadros delimitadores y contar el grosor del texto |
view_in_counts |
bool |
True |
Mostrar recuentos de entradas sólo en el fotograma de vídeo |
view_out_counts |
bool |
True |
Mostrar recuentos de salida sólo en el fotograma de vídeo |
classes_names |
dict |
model.model.names |
Diccionario de nombres de clase |
heatmap_alpha |
float |
0.5 |
Valor alfa del mapa de calor |
count_reg_pts |
list |
None |
Puntos de la región de recuento de objetos |
count_txt_color |
RGB Color |
(0, 0, 0) |
Color de primer plano del texto del recuento de objetos |
count_reg_color |
RGB Color |
(255, 0, 255) |
Color de la región de recuento |
region_thickness |
int |
5 |
Valor del grosor de la región de recuento |
decay_factor |
float |
0.99 |
Factor de decaimiento para la eliminación del área del mapa térmico tras un tiempo específico |
shape |
str |
circle |
Forma de mapa de calor para visualización compatible con "rect" o "círculo". |
line_dist_thresh |
int |
15 |
Umbral de distancia euclidiana para el contador de líneas |
count_bg_color |
RGB Color |
(255, 255, 255) |
Cuenta el color del resaltador |
cls_txtdisplay_gap |
int |
50 |
Mostrar el espacio entre cada recuento de clases |
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-04-05
Autores: RizwanMunawar (8), glenn-jocher (7), AyushExel (1), 1579093407@qq.com (1)