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

تصور البيانات المتقدم: خرائط الحرارة باستخدام 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",
    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()

الحجج Heatmap()

اسم نوع افتراضي وصف
names list 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 خريطة اللون الأخضر العميق

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

الأسئلة المتداولة

كيف يقوم الموقع الإلكتروني Ultralytics YOLOv8 بتوليد الخرائط الحرارية وما هي فوائدها؟

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

هل يمكنني استخدام Ultralytics YOLOv8 لإجراء تتبع الكائنات وإنشاء خريطة حرارية في نفس الوقت؟

نعم، يدعم Ultralytics YOLOv8 تتبع الكائنات وتوليد الخريطة الحرارية في آن واحد. يمكن تحقيق ذلك من خلال Heatmap حل متكامل مع نماذج تتبع الكائنات. للقيام بذلك، تحتاج إلى تهيئة كائن الخريطة الحرارية واستخدام إمكانيات التتبع YOLOv8. إليك مثال بسيط:

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

لمزيد من الإرشادات، راجع صفحة وضع التتبع.

ما الذي يجعل الخرائط الحرارية Ultralytics YOLOv8 مختلفة عن غيرها من أدوات تصور البيانات الأخرى مثل تلك الموجودة في OpenCV أو Matplotlib؟

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

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

يمكنك تصور فئات كائنات معينة عن طريق تحديد الفئات المطلوبة في track() لنموذج YOLO . على سبيل المثال، إذا كنت ترغب فقط في تصور السيارات والأشخاص (بافتراض أن مؤشرات فئتهم هي 0 و2)، يمكنك تعيين classes المتغير وفقًا لذلك.

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

لماذا يجب أن تختار الشركات Ultralytics YOLOv8 لتوليد الخرائط الحرارية في تحليل البيانات؟

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



تم الإنشاء 2023-12-07، تم التحديث 2024-07-14
المؤلفون: RizwanMunawar (8), glenn-jocher (13), IvorZhu331 (1), AyushExel (1), 1579093407@qq.com (1)

التعليقات