Overslaan naar inhoud

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

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

Argumenten Heatmap()

Naam Type Standaard Beschrijving
names list None Woordenboek met klassennamen.
imw int 0 Breedte afbeelding.
imh int 0 Hoogte afbeelding.
colormap int cv2.COLORMAP_JET Kleurenkaart om te gebruiken voor de heatmap.
heatmap_alpha float 0.5 Alpha overvloei-waarde voor heatmap overlay.
view_img bool False Of de afbeelding met de heatmap-overlay moet worden weergegeven.
view_in_counts bool True Of het aantal objecten dat het gebied binnenkomt moet worden weergegeven.
view_out_counts bool True Of het aantal objecten dat het gebied verlaat moet worden weergegeven.
count_reg_pts list of None None Punten die het telgebied definiƫren (ofwel een lijn of een veelhoek).
count_txt_color tuple (0, 0, 0) Tekstkleur voor het weergeven van tellingen.
count_bg_color tuple (255, 255, 255) Achtergrondkleur voor het weergeven van tellingen.
count_reg_color tuple (255, 0, 255) Kleur voor het telgebied.
region_thickness int 5 Dikte van de regiolijn.
line_dist_thresh int 15 Afstandsdrempel voor lijntelling.
line_thickness int 2 Dikte van de lijnen die worden gebruikt bij het tekenen.
decay_factor float 0.99 Vervalfactor voor de heatmap om de intensiteit in de loop van de tijd te verminderen.
shape str "circle" Vorm van de heatmapblobs ('cirkel' of 'recht').

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.

FAQ

Hoe genereert Ultralytics YOLOv8 heatmaps en wat zijn de voordelen?

Ultralytics YOLOv8 genereert heatmaps door complexe gegevens om te zetten in een kleurgecodeerde matrix waarin verschillende tinten staan voor de intensiteit van de gegevens. Heatmaps maken het gemakkelijker om patronen, correlaties en afwijkingen in de gegevens te visualiseren. Warmere tinten geven hogere waarden aan, terwijl koelere tinten lagere waarden weergeven. De belangrijkste voordelen zijn een intuĆÆtieve visualisatie van de gegevensdistributie, efficiĆ«nte patroonherkenning en verbeterde ruimtelijke analyse voor het nemen van beslissingen. Raadpleeg het gedeelte Heatmapconfiguratie voor meer details en configuratieopties.

Kan ik Ultralytics YOLOv8 gebruiken om objecten te volgen en tegelijkertijd een heatmap te genereren?

Ja, Ultralytics YOLOv8 ondersteunt het gelijktijdig volgen van objecten en het genereren van heatmaps. Dit kan worden bereikt door zijn Heatmap oplossing geĆÆntegreerd met objectvolgmodellen. Hiervoor moet je het heatmap-object initialiseren en de tracking-mogelijkheden van YOLOv8 gebruiken. Hier is een eenvoudig voorbeeld:

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

Raadpleeg de pagina Volgmodus voor meer informatie.

Wat maakt Ultralytics YOLOv8 heatmaps anders dan andere tools voor gegevensvisualisatie, zoals die van OpenCV of Matplotlib?

Ultralytics YOLOv8 heatmaps zijn speciaal ontworpen voor integratie met de objectdetectie- en trackingmodellen en bieden een end-to-end oplossing voor real-time gegevensanalyse. In tegenstelling tot generieke visualisatiehulpmiddelen zoals OpenCV of Matplotlib, zijn YOLOv8 heatmaps geoptimaliseerd voor prestaties en geautomatiseerde verwerking, met ondersteuning voor functies als persistent tracking, aanpassing van de vervalfactor en real-time video-overlay. Ga voor meer informatie over de unieke functies van YOLOv8 naar Ultralytics YOLOv8 Introductie.

Hoe kan ik alleen specifieke objectklassen visualiseren in heatmaps met Ultralytics YOLOv8 ?

Je kunt specifieke objectklassen visualiseren door de gewenste klassen op te geven in de track() methode van het YOLO model. Als je bijvoorbeeld alleen auto's en personen wilt visualiseren (ervan uitgaande dat hun klasse-indices 0 en 2 zijn), kun je de methode classes parameter dienovereenkomstig.

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

Waarom zouden bedrijven kiezen voor Ultralytics YOLOv8 voor het genereren van heatmaps bij gegevensanalyse?

Ultralytics YOLOv8 biedt naadloze integratie van geavanceerde objectdetectie en realtime heatmapgeneratie, waardoor het een ideale keuze is voor bedrijven die gegevens effectiever willen visualiseren. De belangrijkste voordelen zijn intuĆÆtieve visualisatie van gegevensdistributie, efficiĆ«nte patroonherkenning en verbeterde ruimtelijke analyse voor betere besluitvorming. Bovendien maken de geavanceerde functies van YOLOv8, zoals persistent tracking, aanpasbare colormaps en ondersteuning voor verschillende exportformaten, het superieur aan andere tools zoals TensorFlow en OpenCV voor uitgebreide gegevensanalyse. Meer informatie over zakelijke toepassingen op Ultralytics Plans.



Gemaakt op 2023-12-07, Bijgewerkt op 2024-07-14
Auteurs: RizwanMunawar (8), glenn-jocher (13), IvorZhu331 (1), AyushExel (1), 1579093407@qq.com (1)

Reacties