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