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