Skip to content

Visualisation avancée des données : Cartes thermiques à l'aide de Ultralytics YOLOv8 🚀

Introduction aux cartes thermiques

Une carte thermique générée avec Ultralytics YOLOv8 transforme des données complexes en une matrice vibrante, codée par couleur. Cet outil visuel utilise un spectre de couleurs pour représenter les valeurs variables des données, les teintes plus chaudes indiquant des intensités plus élevées et les tons plus froids des valeurs plus faibles. Les cartes thermiques excellent dans la visualisation de modèles de données complexes, de corrélations et d'anomalies, offrant une approche accessible et attrayante de l'interprétation des données dans divers domaines.



Regarde : Cartes thermiques utilisant Ultralytics YOLOv8

Pourquoi choisir les cartes thermiques pour l'analyse des données ?

  • Visualisation intuitive de la distribution des donnĂ©es : Les cartes thermiques simplifient la comprĂ©hension de la concentration et de la distribution des donnĂ©es, en convertissant des ensembles de donnĂ©es complexes en formats visuels faciles Ă  comprendre.
  • DĂ©tection efficace des tendances : En visualisant les donnĂ©es sous forme de carte thermique, il devient plus facile de repĂ©rer les tendances, les grappes et les valeurs aberrantes, ce qui facilite une analyse et des idĂ©es plus rapides.
  • AmĂ©lioration de l'analyse spatiale et de la prise de dĂ©cision : les cartes thermiques permettent d'illustrer les relations spatiales et de faciliter les processus de prise de dĂ©cision dans des secteurs tels que l'intelligence Ă©conomique, les Ă©tudes environnementales et l'urbanisme.

Applications dans le monde réel

Transport Vente au détail
Ultralytics YOLOv8 Carte thermique des transports Ultralytics YOLOv8 Carte thermique du commerce de détail
Ultralytics YOLOv8 Carte thermique des transports Ultralytics YOLOv8 Carte thermique du commerce de détail

Configuration de la carte thermique

  • heatmap_alpha: Assure-toi que cette valeur est comprise dans la plage (0,0 - 1,0).
  • decay_factor: UtilisĂ© pour supprimer la carte thermique après qu'un objet n'est plus dans le cadre, sa valeur doit Ă©galement ĂŞtre comprise dans la plage (0,0 - 1,0).

Cartes thermiques Ă  l'aide de Ultralytics YOLOv8 Exemple

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

Arguments set_args

Nom Type DĂ©faut Description
view_img bool False Affiche le cadre avec la carte thermique
colormap cv2.COLORMAP None cv2.COLORMAP pour la carte thermique
imw int None Largeur de la carte thermique
imh int None Hauteur de la carte thermique
line_thickness int 2 Augmente les boîtes de délimitation et compte l'épaisseur du texte
view_in_counts bool True Afficher les entrées uniquement sur l'image vidéo
view_out_counts bool True Afficher les décomptes uniquement sur l'image vidéo
classes_names dict model.model.names Dictionnaire des noms de classe
heatmap_alpha float 0.5 Valeur alpha de la carte thermique
count_reg_pts list None Points de la région de comptage d'objets
count_txt_color RGB Color (0, 0, 0) Couleur de premier plan pour le texte des comptes d'objets
count_reg_color RGB Color (255, 0, 255) Couleur de la région de comptage
region_thickness int 5 Valeur de l'épaisseur de la région de comptage
decay_factor float 0.99 Facteur de décroissance pour la suppression de la zone de la carte thermique après un certain temps
shape str circle Forme de la carte thermique pour l'affichage "rect" ou "cercle" pris en charge
line_dist_thresh int 15 Seuil de la distance euclidienne pour le compteur de lignes
count_bg_color RGB Color (255, 255, 255) Compte la couleur du surligneur
cls_txtdisplay_gap int 50 Afficher l'Ă©cart entre chaque comptage de classe

Arguments model.track

Nom Type DĂ©faut Description
source im0 None répertoire source pour les images ou les vidéos
persist bool False persistance des pistes entre les images
tracker str botsort.yaml MĂ©thode de suivi 'bytetrack' ou 'botsort'
conf float 0.3 Seuil de confiance
iou float 0.5 Seuil de reconnaissance de dette
classes list None filtre les résultats par classe, c'est-à-dire classes=0, ou classes=[0,2,3]

Carte thermique COLORMAPs

Nom de la carte de couleurs Description
cv::COLORMAP_AUTUMN Carte des couleurs d'automne
cv::COLORMAP_BONE Carte des couleurs des os
cv::COLORMAP_JET Carte des couleurs du jet
cv::COLORMAP_WINTER Carte des couleurs de l'hiver
cv::COLORMAP_RAINBOW Carte des couleurs de l'arc-en-ciel
cv::COLORMAP_OCEAN Carte des couleurs de l'océan
cv::COLORMAP_SUMMER Carte des couleurs de l'été
cv::COLORMAP_SPRING Carte des couleurs du printemps
cv::COLORMAP_COOL Superbe carte des couleurs
cv::COLORMAP_HSV Carte de couleurs HSV (teinte, saturation, valeur)
cv::COLORMAP_PINK Carte en couleur rose
cv::COLORMAP_HOT Carte des couleurs chaudes
cv::COLORMAP_PARULA Carte des couleurs de Parula
cv::COLORMAP_MAGMA Carte des couleurs du magma
cv::COLORMAP_INFERNO Carte des couleurs d'Inferno
cv::COLORMAP_PLASMA Carte des couleurs du plasma
cv::COLORMAP_VIRIDIS Carte des couleurs de Viridis
cv::COLORMAP_CIVIDIS Carte des couleurs de Cividis
cv::COLORMAP_TWILIGHT Carte couleur du crépuscule
cv::COLORMAP_TWILIGHT_SHIFTED Carte des couleurs du crépuscule décalé
cv::COLORMAP_TURBO Carte des couleurs du turbo
cv::COLORMAP_DEEPGREEN Carte des couleurs du vert profond

Ces cartes de couleurs sont couramment utilisées pour visualiser les données avec des représentations de couleurs différentes.



Créé le 2023-12-07, Mis à jour le 2024-04-05
Auteurs : RizwanMunawar (8), glenn-jocher (7), AyushExel (1), 1579093407@qq.com (1)

Commentaires