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