انتقل إلى المحتوى

تصور البيانات المتقدم: خرائط الحرارة باستخدام Ultralytics YOLOv8 🚀

مقدمة في الخرائط الحرارية

خريطة حرارية تم إنشاؤها باستخدام Ultralytics YOLOv8 يحول البيانات المعقدة إلى مصفوفة نابضة بالحياة ومرمزة بالألوان. تستخدم هذه الأداة المرئية طيفا من الألوان لتمثيل قيم بيانات مختلفة ، حيث تشير الأشكال الأكثر دفئا إلى كثافة أعلى ودرجات اللون الأكثر برودة تشير إلى قيم أقل. تتفوق خرائط الحرارة في تصور أنماط البيانات المعقدة والارتباطات والحالات الشاذة ، مما يوفر نهجا يسهل الوصول إليه وجذابا لتفسير البيانات عبر مجالات متنوعة.



شاهد: استخدام خرائط الحرارة Ultralytics YOLOv8

لماذا تختار خرائط الحرارة لتحليل البيانات؟

  • تصور توزيع البيانات البديهي: تعمل الخرائط الحرارية على تبسيط فهم تركيز البيانات وتوزيعها ، وتحويل مجموعات البيانات المعقدة إلى تنسيقات مرئية سهلة الفهم.
  • الكشف الفعال عن الأنماط: من خلال تصور البيانات بتنسيق خريطة الحرارة ، يصبح من الأسهل تحديد الاتجاهات والمجموعات والقيم المتطرفة ، مما يسهل التحليل والرؤى بشكل أسرع.
  • تعزيز التحليل المكاني واتخاذ القرار: تلعب الخرائط الحرارية دورا أساسيا في توضيح العلاقات المكانية ، والمساعدة في عمليات صنع القرار في قطاعات مثل ذكاء الأعمال والدراسات البيئية والتخطيط الحضري.

تطبيقات العالم الحقيقي

النقل التجزئه
Ultralytics YOLOv8 خريطة النقل الحرارية Ultralytics YOLOv8 خريطة التمثيل اللوني للبيع بالتجزئة
Ultralytics YOLOv8 خريطة النقل الحرارية Ultralytics YOLOv8 خريطة التمثيل اللوني للبيع بالتجزئة

تكوين خريطة التمثيل اللوني

  • heatmap_alphaتأكد من أن هذه القيمة ضمن النطاق (0.0 - 1.0).:
  • decay_factorيستخدم لإزالة خريطة التمثيل اللوني بعد أن لم يعد الكائن في الإطار ، ويجب أن تكون قيمته أيضا في النطاق (0.0 - 1.0).:

استخدام خرائط الحرارة Ultralytics YOLOv8 مثل

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",
    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()
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,
    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()
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,
    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()
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,
    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()
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",
    classes_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",
    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()

الحجج Heatmap()

اسم نوع افتراضي وصف
classes_names dict None قاموس أسماء الطبقات.
imw int 0 عرض الصورة.
imh int 0 ارتفاع الصورة.
colormap int cv2.COLORMAP_JET خريطة ملونة لاستخدامها في الخريطة الحرارية.
heatmap_alpha float 0.5 قيمة مزج ألفا لتراكب خريطة الحرارة.
view_img bool False ما إذا كان سيتم عرض الصورة مع تراكب خريطة الحرارة.
view_in_counts bool True ما إذا كان سيتم عرض عدد الكائنات التي تدخل المنطقة.
view_out_counts bool True ما إذا كان سيتم عرض عدد الكائنات الخارجة من المنطقة.
count_reg_pts list أو None None النقاط التي تحدد منطقة العد (إما خط أو مضلع).
count_txt_color tuple (0, 0, 0) لون النص لعرض الأعداد.
count_bg_color tuple (255, 255, 255) لون الخلفية لعرض الأعداد.
count_reg_color tuple (255, 0, 255) لون منطقة العد.
region_thickness int 5 سُمك خط المنطقة.
line_dist_thresh int 15 عتبة المسافة للعد القائم على الخط.
line_thickness int 2 سماكة الخطوط المستخدمة في الرسم.
decay_factor float 0.99 عامل التضاؤل لخريطة الحرارة لتقليل الكثافة بمرور الوقت.
shape str "circle" شكل نقاط الخريطة الحرارية ("دائرة" أو "مستطيل").

الحجج model.track

اسم نوع افتراضي وصف
source im0 None الدليل المصدر للصور أو مقاطع الفيديو
persist bool False المسارات المستمرة بين الإطارات
tracker str botsort.yaml طريقة التتبع "bytetrack" أو "botsort"
conf float 0.3 عتبة الثقة
iou float 0.5 عتبة IOU
classes list None تصفية النتائج حسب الفئة ، أي الفئات = 0 ، أو الفئات = [0،2،3]

خريطة الحرارة COLORMAPs

اسم خريطة الألوان وصف
cv::COLORMAP_AUTUMN خريطة ألوان الخريف
cv::COLORMAP_BONE خريطة لون العظام
cv::COLORMAP_JET خريطة اللون النفاث
cv::COLORMAP_WINTER خريطة ألوان الشتاء
cv::COLORMAP_RAINBOW خريطة ألوان قوس قزح
cv::COLORMAP_OCEAN خريطة لون المحيط
cv::COLORMAP_SUMMER خريطة ألوان الصيف
cv::COLORMAP_SPRING خريطة ألوان الربيع
cv::COLORMAP_COOL خريطة لون بارد
cv::COLORMAP_HSV HSV (هوى ، التشبع ، القيمة) خريطة الألوان
cv::COLORMAP_PINK خريطة اللون الوردي
cv::COLORMAP_HOT خريطة ملونة ساخنة
cv::COLORMAP_PARULA خريطة ألوان بارولا
cv::COLORMAP_MAGMA خريطة ألوان الصهارة
cv::COLORMAP_INFERNO خريطة لون الجحيم
cv::COLORMAP_PLASMA خريطة ألوان البلازما
cv::COLORMAP_VIRIDIS خريطة ألوان فيريديس
cv::COLORMAP_CIVIDIS خريطة ألوان سيفيديس
cv::COLORMAP_TWILIGHT خريطة لون الشفق
cv::COLORMAP_TWILIGHT_SHIFTED خريطة لون الشفق المتحولة
cv::COLORMAP_TURBO خريطة لون توربو
cv::COLORMAP_DEEPGREEN خريطة اللون الأخضر العميق

تستخدم خرائط الألوان هذه بشكل شائع لتصور البيانات بتمثيلات ألوان مختلفة.



Created 2023-12-07, Updated 2024-06-10
Authors: glenn-jocher (11), IvorZhu331 (1), RizwanMunawar (8), AyushExel (1), 1579093407@qq.com (1)

التعليقات