Fortgeschrittene Datenvisualisierung: Heatmaps mit Ultralytics YOLOv8 đ
EinfĂŒhrung in Heatmaps
Eine Heatmap, die mit Ultralytics YOLOv8 erstellt wird, verwandelt komplexe Daten in eine lebendige, farbcodierte Matrix. Dieses visuelle Werkzeug verwendet ein Farbspektrum, um unterschiedliche Datenwerte darzustellen, wobei wĂ€rmere Farbtöne fĂŒr höhere IntensitĂ€ten und kĂŒhlere Töne fĂŒr niedrigere Werte stehen. Heatmaps eignen sich hervorragend zur Visualisierung komplexer Datenmuster, Korrelationen und Anomalien und bieten einen zugĂ€nglichen und ansprechenden Ansatz fĂŒr die Interpretation von Daten in verschiedenen Bereichen.
Pass auf: Heatmaps mit Ultralytics YOLOv8
Warum sollten wir Heatmaps fĂŒr die Datenanalyse wĂ€hlen?
- Intuitive Visualisierung der Datenverteilung: Heatmaps vereinfachen das VerstÀndnis der Datenkonzentration und -verteilung und wandeln komplexe DatensÀtze in leicht verstÀndliche visuelle Formate um.
- Effiziente Erkennung von Mustern: Durch die Visualisierung der Daten im Heatmap-Format ist es einfacher, Trends, Cluster und AusreiĂer zu erkennen, was schnellere Analysen und Erkenntnisse ermöglicht.
- Verbesserte rÀumliche Analyse und Entscheidungsfindung: Heatmaps dienen der Veranschaulichung rÀumlicher ZusammenhÀnge und helfen bei Entscheidungsprozessen in Bereichen wie Business Intelligence, Umweltstudien und Stadtplanung.
Anwendungen in der realen Welt
Transport | Einzelhandel |
---|---|
Ultralytics YOLOv8 Transport Heatmap | Ultralytics YOLOv8 Einzelhandel Heatmap |
Heatmap-Konfiguration
heatmap_alpha
: Achte darauf, dass dieser Wert innerhalb des Bereichs (0,0 - 1,0) liegt.decay_factor
: Wird verwendet, um die Heatmap zu entfernen, wenn ein Objekt nicht mehr im Bild ist. Der Wert sollte ebenfalls im Bereich (0,0 - 1,0) liegen.
Heatmaps mit Ultralytics YOLOv8 Beispiel
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()
Argumente Heatmap()
Name | Typ | Standard | Beschreibung |
---|---|---|---|
names |
list |
None |
Wörterbuch der Klassennamen. |
imw |
int |
0 |
Bildbreite. |
imh |
int |
0 |
Bildhöhe. |
colormap |
int |
cv2.COLORMAP_JET |
Farbkarte, die fĂŒr die Heatmap verwendet werden soll. |
heatmap_alpha |
float |
0.5 |
Alpha-Blending-Wert fĂŒr die Ăberlagerung der Heatmap. |
view_img |
bool |
False |
Ob das Bild mit dem Heatmap-Overlay angezeigt werden soll. |
view_in_counts |
bool |
True |
Ob die Anzahl der Objekte angezeigt werden soll, die die Region betreten. |
view_out_counts |
bool |
True |
Ob die Anzahl der Objekte, die die Region verlassen, angezeigt werden soll. |
count_reg_pts |
list oder None |
None |
Punkte, die den ZĂ€hlbereich definieren (entweder eine Linie oder ein Polygon). |
count_txt_color |
tuple |
(0, 0, 0) |
Textfarbe fĂŒr die Anzeige der ZĂ€hlungen. |
count_bg_color |
tuple |
(255, 255, 255) |
Hintergrundfarbe fĂŒr die Anzeige der ZĂ€hlungen. |
count_reg_color |
tuple |
(255, 0, 255) |
Farbe fĂŒr die ZĂ€hlregion. |
region_thickness |
int |
5 |
Die Dicke der Regionslinie. |
line_dist_thresh |
int |
15 |
Abstandsschwelle fĂŒr die zeilenbasierte ZĂ€hlung. |
line_thickness |
int |
2 |
Dicke der beim Zeichnen verwendeten Linien. |
decay_factor |
float |
0.99 |
Abklingfaktor fĂŒr die Heatmap, um die IntensitĂ€t mit der Zeit zu verringern. |
shape |
str |
"circle" |
Form der Heatmap-Blobs ("Kreis" oder "Rechteck"). |
Argumente model.track
Name | Typ | Standard | Beschreibung |
---|---|---|---|
source |
im0 |
None |
Quellverzeichnis fĂŒr Bilder oder Videos |
persist |
bool |
False |
Spuren zwischen Frames beibehalten |
tracker |
str |
botsort.yaml |
Tracking-Methode 'bytetrack' oder 'botsort' |
conf |
float |
0.3 |
Konfidenzschwelle |
iou |
float |
0.5 |
IOU-Schwelle |
classes |
list |
None |
Ergebnisse nach Klassen filtern, d.h. classes=0, oder classes=[0,2,3] |
Heatmap COLORMAPs
Colormap Name | Beschreibung |
---|---|
cv::COLORMAP_AUTUMN |
Farbkarte Herbst |
cv::COLORMAP_BONE |
Knochen-Farbkarte |
cv::COLORMAP_JET |
Jet-Farbkarte |
cv::COLORMAP_WINTER |
Farbkarte Winter |
cv::COLORMAP_RAINBOW |
Regenbogen-Farbkarte |
cv::COLORMAP_OCEAN |
Farbkarte Ozean |
cv::COLORMAP_SUMMER |
Sommer Farbkarte |
cv::COLORMAP_SPRING |
Farbkarte FrĂŒhling |
cv::COLORMAP_COOL |
Coole Farbkarte |
cv::COLORMAP_HSV |
HSV (Farbton, SĂ€ttigung, Wert) Farbkarte |
cv::COLORMAP_PINK |
Rosa Farbkarte |
cv::COLORMAP_HOT |
HeiĂe Farbkarte |
cv::COLORMAP_PARULA |
Parula Farbkarte |
cv::COLORMAP_MAGMA |
Magma Farbkarte |
cv::COLORMAP_INFERNO |
Inferno Farbkarte |
cv::COLORMAP_PLASMA |
Plasma-Farbkarte |
cv::COLORMAP_VIRIDIS |
Viridis Farbkarte |
cv::COLORMAP_CIVIDIS |
Cividis Farbkarte |
cv::COLORMAP_TWILIGHT |
Farbkarte der DĂ€mmerung |
cv::COLORMAP_TWILIGHT_SHIFTED |
Verschobene Farbkarte der DĂ€mmerung |
cv::COLORMAP_TURBO |
Turbo Farbkarte |
cv::COLORMAP_DEEPGREEN |
Deep Green Farbkarte |
Diese Farbkarten werden hÀufig zur Visualisierung von Daten mit verschiedenen Farbdarstellungen verwendet.
FAQ
Wie erstellt Ultralytics YOLOv8 Heatmaps und was sind ihre Vorteile?
Ultralytics YOLOv8 erzeugt Heatmaps, indem es komplexe Daten in eine farbkodierte Matrix umwandelt, in der verschiedene Farbtöne die DatenintensitĂ€t darstellen. Heatmaps machen es einfacher, Muster, Korrelationen und Anomalien in den Daten zu visualisieren. WĂ€rmere Farbtöne zeigen höhere Werte an, wĂ€hrend kĂŒhlere Töne niedrigere Werte darstellen. Zu den wichtigsten Vorteilen gehören die intuitive Visualisierung der Datenverteilung, die effiziente Erkennung von Mustern und eine verbesserte rĂ€umliche Analyse fĂŒr die Entscheidungsfindung. Weitere Details und Konfigurationsoptionen findest du im Abschnitt Heatmap-Konfiguration.
Kann ich mit Ultralytics YOLOv8 gleichzeitig eine Objektverfolgung durchfĂŒhren und eine Heatmap erstellen?
Ja, Ultralytics YOLOv8 unterstĂŒtzt die gleichzeitige Verfolgung von Objekten und die Erstellung von Heatmaps. Dies kann durch seine Heatmap
Lösung mit Objektverfolgungsmodellen integriert. Dazu musst du das Heatmap-Objekt initialisieren und die Tracking-Funktionen von YOLOv8 nutzen. Hier ist ein einfaches Beispiel:
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()
Weitere Hinweise findest du auf der Seite Tracking-Modus.
Was unterscheidet Ultralytics YOLOv8 Heatmaps von anderen Datenvisualisierungstools wie denen von OpenCV oder Matplotlib?
Ultralytics YOLOv8 Heatmaps wurden speziell fĂŒr die Integration mit den Objekterkennungs- und -verfolgungsmodellen entwickelt und bieten eine Komplettlösung fĂŒr die Datenanalyse in Echtzeit. Im Gegensatz zu allgemeinen Visualisierungstools wie OpenCV oder Matplotlib sind YOLOv8 Heatmaps fĂŒr Leistung und automatisierte Verarbeitung optimiert und unterstĂŒtzen Funktionen wie persistentes Tracking, Anpassung des Abklingfaktors und Video-Overlay in Echtzeit. Weitere Informationen zu den einzigartigen Funktionen von YOLOv8 findest du in der Ultralytics YOLOv8 EinfĂŒhrung.
Wie kann ich mit Ultralytics YOLOv8 nur bestimmte Objektklassen in Heatmaps visualisieren?
Du kannst bestimmte Objektklassen visualisieren, indem du die gewĂŒnschten Klassen in der track()
Methode des YOLO Modells. Wenn du zum Beispiel nur Autos und Personen visualisieren möchtest (unter der Annahme, dass ihre Klassenindizes 0 und 2 sind), kannst du die classes
Parameter entsprechend anpassen.
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()
Warum sollten Unternehmen Ultralytics YOLOv8 fĂŒr die Erstellung von Heatmaps bei der Datenanalyse wĂ€hlen?
Ultralytics YOLOv8 bietet eine nahtlose Integration von fortschrittlicher Objekterkennung und Echtzeit-Heatmap-Generierung und ist damit die ideale Wahl fĂŒr Unternehmen, die ihre Daten effektiver visualisieren möchten. Zu den wichtigsten Vorteilen gehören die intuitive Visualisierung der Datenverteilung, die effiziente Erkennung von Mustern und die verbesserte rĂ€umliche Analyse fĂŒr bessere Entscheidungen. DarĂŒber hinaus ist YOLOv8 mit seinen innovativen Funktionen wie persistentem Tracking, anpassbaren Colormaps und der UnterstĂŒtzung verschiedener Exportformate anderen Tools wie TensorFlow und OpenCV fĂŒr umfassende Datenanalysen ĂŒberlegen. Erfahre mehr ĂŒber GeschĂ€ftsanwendungen unter Ultralytics PlĂ€ne.
Erstellt am 2023-12-07, Aktualisiert am 2024-07-14
Autoren: RizwanMunawar (8), glenn-jocher (13), IvorZhu331 (1), AyushExel (1), 1579093407@qq.com (1)