Geavanceerde visualisatie van gegevens: Heatmaps met Ultralytics YOLOv8 🚀
Inleiding tot Heatmaps
Een heatmap gegenereerd met Ultralytics YOLOv8 transformeert complexe gegevens in een levendige, kleurgecodeerde matrix. Dit visuele hulpmiddel gebruikt een spectrum van kleuren om verschillende gegevenswaarden weer te geven, waarbij warmere tinten hogere intensiteiten aangeven en koelere tinten lagere waarden. Heatmaps blinken uit in het visualiseren van ingewikkelde gegevenspatronen, correlaties en anomalieën en bieden een toegankelijke en boeiende benadering voor het interpreteren van gegevens in verschillende domeinen.
Kijken: Heatmaps met Ultralytics YOLOv8
Waarom Heatmaps kiezen voor gegevensanalyse?
- Intuïtieve visualisatie van gegevensverdeling: Heatmaps vereenvoudigen het begrip van gegevensconcentratie en -verdeling door complexe datasets om te zetten in eenvoudig te begrijpen visuele formaten.
- Efficiënte patroonherkenning: Door gegevens te visualiseren in de vorm van een heatmap wordt het eenvoudiger om trends, clusters en uitschieters te ontdekken, waardoor analyses en inzichten sneller gaan.
- Verbeterde ruimtelijke analyse en besluitvorming: Heatmaps zijn nuttig bij het illustreren van ruimtelijke relaties en helpen bij besluitvormingsprocessen in sectoren zoals bedrijfsinformatie, milieustudies en stadsplanning.
Toepassingen in de echte wereld
Vervoer | Detailhandel |
---|---|
Ultralytics YOLOv8 Transport Heatmap | Ultralytics YOLOv8 Heatmap detailhandel |
Configuratie heatmap
heatmap_alpha
: Zorg ervoor dat deze waarde binnen het bereik (0,0 - 1,0) ligt.decay_factor
: Wordt gebruikt voor het verwijderen van de heatmap nadat een object niet langer in het frame is, de waarde moet ook in het bereik (0,0 - 1,0) liggen.
Heatmaps met Ultralytics YOLOv8 Voorbeeld
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()
Argumenten set_args
Naam | Type | Standaard | Beschrijving |
---|---|---|---|
view_img |
bool |
False |
Het frame met heatmap weergeven |
colormap |
cv2.COLORMAP |
None |
cv2.COLORMAP voor heatmap |
imw |
int |
None |
Breedte van Heatmap |
imh |
int |
None |
Hoogte van Heatmap |
line_thickness |
int |
2 |
Vergroot bounding boxes en tel tekstdikte |
view_in_counts |
bool |
True |
In-tellingen alleen op videoframe weergeven |
view_out_counts |
bool |
True |
Buitentellingen alleen op videoframe weergeven |
classes_names |
dict |
model.model.names |
Woordenboek van klassenamen |
heatmap_alpha |
float |
0.5 |
Heatmap alfa-waarde |
count_reg_pts |
list |
None |
Objecten tellen regiopunten |
count_txt_color |
RGB Color |
(0, 0, 0) |
Voorgrondkleur voor tekst Objecttelling |
count_reg_color |
RGB Color |
(255, 0, 255) |
Kleur telgebied |
region_thickness |
int |
5 |
Waarde telgebieddikte |
decay_factor |
float |
0.99 |
Vervalfactor voor verwijderen heatmapgebied na specifieke tijd |
shape |
str |
circle |
Heatmapvorm voor weergave "rect" of "circle" ondersteund |
line_dist_thresh |
int |
15 |
Euclidische afstandsdrempel voor lijnteller |
count_bg_color |
RGB Color |
(255, 255, 255) |
Kleur markeerstift tellen |
cls_txtdisplay_gap |
int |
50 |
De afstand tussen elke klassentelling weergeven |
Argumenten model.track
Naam | Type | Standaard | Beschrijving |
---|---|---|---|
source |
im0 |
None |
bronmap voor afbeeldingen of video's |
persist |
bool |
False |
Blijvende sporen tussen frames |
tracker |
str |
botsort.yaml |
Volgmethode 'bytetrack' of 'botsort' |
conf |
float |
0.3 |
Vertrouwensdrempel |
iou |
float |
0.5 |
Drempel IOU |
classes |
list |
None |
filter resultaten op klasse, d.w.z. classes=0, of classes=[0,2,3] |
Hittemap COLORMAPs
Naam kleurenkaart | Beschrijving |
---|---|
cv::COLORMAP_AUTUMN |
Herfst kleurenkaart |
cv::COLORMAP_BONE |
Kleurkaart botten |
cv::COLORMAP_JET |
Jet kleurenkaart |
cv::COLORMAP_WINTER |
Winter kleurenkaart |
cv::COLORMAP_RAINBOW |
Regenboog kleurenkaart |
cv::COLORMAP_OCEAN |
Oceaan kleurenkaart |
cv::COLORMAP_SUMMER |
Zomer kleurenkaart |
cv::COLORMAP_SPRING |
Lente kleurenkaart |
cv::COLORMAP_COOL |
Coole kleurenkaart |
cv::COLORMAP_HSV |
HSV (kleurtoon, verzadiging, waarde) kleurenkaart |
cv::COLORMAP_PINK |
Roze kleurenkaart |
cv::COLORMAP_HOT |
Hete kleurenkaart |
cv::COLORMAP_PARULA |
Parula kleurenkaart |
cv::COLORMAP_MAGMA |
Magma kleurenkaart |
cv::COLORMAP_INFERNO |
Inferno kleurenkaart |
cv::COLORMAP_PLASMA |
Plasmakleurkaart |
cv::COLORMAP_VIRIDIS |
Viridis kleurenkaart |
cv::COLORMAP_CIVIDIS |
Cividis kleurenkaart |
cv::COLORMAP_TWILIGHT |
Schemering kleurenkaart |
cv::COLORMAP_TWILIGHT_SHIFTED |
Verschoven schemeringskleurenkaart |
cv::COLORMAP_TURBO |
Turbo kleurenkaart |
cv::COLORMAP_DEEPGREEN |
Diepgroene kleurenkaart |
Deze colormaps worden vaak gebruikt voor het visualiseren van gegevens met verschillende kleurweergaven.
Gemaakt op 2023-12-07, Bijgewerkt op 2024-04-05
Auteurs: RizwanMunawar (8), glenn-jocher (7), AyushExel (1), 1579093407@qq.com (1)