Trực quan hóa dữ liệu nâng cao: Bản đồ nhiệt sử dụng Ultralytics YOLOv8 🚀
Giới thiệu về Heatmaps
Bản đồ nhiệt được tạo bằng Ultralytics YOLOv8 Chuyển đổi dữ liệu phức tạp thành một ma trận được mã hóa màu sắc sống động. Công cụ trực quan này sử dụng một phổ màu sắc để đại diện cho các giá trị dữ liệu khác nhau, trong đó màu sắc ấm hơn cho thấy cường độ cao hơn và tông màu lạnh hơn biểu thị giá trị thấp hơn. Bản đồ nhiệt vượt trội trong việc trực quan hóa các mẫu dữ liệu, mối tương quan và sự bất thường phức tạp, cung cấp một cách tiếp cận dễ tiếp cận và hấp dẫn để giải thích dữ liệu trên các lĩnh vực khác nhau.
Xem: Bản đồ nhiệt sử dụng Ultralytics YOLOv8
Tại sao chọn bản đồ nhiệt để phân tích dữ liệu?
- Trực quan hóa phân phối dữ liệu trực quan: Bản đồ nhiệt đơn giản hóa việc hiểu tập trung và phân phối dữ liệu, chuyển đổi các bộ dữ liệu phức tạp thành các định dạng trực quan dễ hiểu.
- Phát hiện mẫu hiệu quả: Bằng cách trực quan hóa dữ liệu ở định dạng bản đồ nhiệt, việc phát hiện xu hướng, cụm và ngoại lệ trở nên dễ dàng hơn, tạo điều kiện phân tích và hiểu biết nhanh hơn.
- Tăng cường phân tích không gian và ra quyết định: Bản đồ nhiệt là công cụ minh họa các mối quan hệ không gian, hỗ trợ quá trình ra quyết định trong các lĩnh vực như kinh doanh thông minh, nghiên cứu môi trường và quy hoạch đô thị.
Ứng dụng trong thế giới thực
Giao thông vận tải | Bán lẻ |
---|---|
Ultralytics YOLOv8 Bản đồ nhiệt giao thông | Ultralytics YOLOv8 Bản đồ nhiệt bán lẻ |
Cấu hình bản đồ nhiệt
heatmap_alpha
: Đảm bảo giá trị này nằm trong phạm vi (0.0 - 1.0).decay_factor
: Được sử dụng để loại bỏ heatmap sau khi một đối tượng không còn trong khung, giá trị của nó cũng phải nằm trong phạm vi (0.0 - 1.0).
Bản đồ nhiệt sử dụng Ultralytics YOLOv8 Ví dụ
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()
Lập luận Heatmap()
Tên | Kiểu | Mặc định | Sự miêu tả |
---|---|---|---|
names |
list |
None |
Từ điển tên lớp. |
imw |
int |
0 |
Chiều rộng hình ảnh. |
imh |
int |
0 |
Chiều cao hình ảnh. |
colormap |
int |
cv2.COLORMAP_JET |
Bản đồ màu để sử dụng cho bản đồ nhiệt. |
heatmap_alpha |
float |
0.5 |
Giá trị pha trộn alpha cho lớp phủ bản đồ nhiệt. |
view_img |
bool |
False |
Có hiển thị hình ảnh với lớp phủ bản đồ nhiệt hay không. |
view_in_counts |
bool |
True |
Có hiển thị số lượng đối tượng đi vào khu vực hay không. |
view_out_counts |
bool |
True |
Có hiển thị số lượng đối tượng thoát khỏi khu vực hay không. |
count_reg_pts |
list hoặc None |
None |
Các điểm xác định vùng đếm (một đường thẳng hoặc đa giác). |
count_txt_color |
tuple |
(0, 0, 0) |
Màu văn bản để hiển thị số lượng. |
count_bg_color |
tuple |
(255, 255, 255) |
Màu nền để hiển thị số lượng. |
count_reg_color |
tuple |
(255, 0, 255) |
Màu sắc cho vùng đếm. |
region_thickness |
int |
5 |
Độ dày của đường vùng. |
line_dist_thresh |
int |
15 |
Ngưỡng khoảng cách để đếm theo dòng. |
line_thickness |
int |
2 |
Độ dày của các đường được sử dụng trong bản vẽ. |
decay_factor |
float |
0.99 |
Hệ số phân rã cho bản đồ nhiệt để giảm cường độ theo thời gian. |
shape |
str |
"circle" |
Hình dạng của các đốm màu bản đồ nhiệt ('vòng tròn' hoặc 'rect'). |
Lập luận model.track
Tên | Kiểu | Mặc định | Sự miêu tả |
---|---|---|---|
source |
im0 |
None |
Thư mục nguồn cho hình ảnh hoặc video |
persist |
bool |
False |
Các rãnh liên tục giữa các khung hình |
tracker |
str |
botsort.yaml |
Phương pháp theo dõi 'bytetrack' hoặc 'botsort' |
conf |
float |
0.3 |
Ngưỡng tin cậy |
iou |
float |
0.5 |
Ngưỡng IOU |
classes |
list |
None |
Lọc kết quả theo lớp, tức là lớp = 0 hoặc lớp = [0,2,3] |
Bản đồ nhiệt COLORMAPs
Tên bản đồ màu | Sự miêu tả |
---|---|
cv::COLORMAP_AUTUMN |
Bản đồ màu mùa thu |
cv::COLORMAP_BONE |
Bản đồ màu xương |
cv::COLORMAP_JET |
Bản đồ màu máy bay phản lực |
cv::COLORMAP_WINTER |
Bản đồ màu mùa đông |
cv::COLORMAP_RAINBOW |
Bản đồ màu cầu vồng |
cv::COLORMAP_OCEAN |
Bản đồ màu đại dương |
cv::COLORMAP_SUMMER |
Bản đồ màu mùa hè |
cv::COLORMAP_SPRING |
Bản đồ màu mùa xuân |
cv::COLORMAP_COOL |
Bản đồ màu sắc mát mẻ |
cv::COLORMAP_HSV |
Bản đồ màu HSV (Hue, Saturation, Value) |
cv::COLORMAP_PINK |
Bản đồ màu hồng |
cv::COLORMAP_HOT |
Bản đồ màu nóng |
cv::COLORMAP_PARULA |
Bản đồ màu Parula |
cv::COLORMAP_MAGMA |
Bản đồ màu magma |
cv::COLORMAP_INFERNO |
Bản đồ màu địa ngục |
cv::COLORMAP_PLASMA |
Bản đồ màu plasma |
cv::COLORMAP_VIRIDIS |
Bản đồ màu Viridis |
cv::COLORMAP_CIVIDIS |
Bản đồ màu Cividis |
cv::COLORMAP_TWILIGHT |
Bản đồ màu hoàng hôn |
cv::COLORMAP_TWILIGHT_SHIFTED |
Bản đồ màu Chạng vạng thay đổi |
cv::COLORMAP_TURBO |
Bản đồ màu Turbo |
cv::COLORMAP_DEEPGREEN |
Bản đồ màu xanh lá cây đậm |
Các bản đồ màu này thường được sử dụng để trực quan hóa dữ liệu với các biểu diễn màu khác nhau.
FAQ
Làm thế nào Ultralytics YOLOv8 Tạo bản đồ nhiệt và lợi ích của chúng là gì?
Ultralytics YOLOv8 Tạo bản đồ nhiệt bằng cách chuyển đổi dữ liệu phức tạp thành ma trận được mã hóa màu, trong đó các màu sắc khác nhau đại diện cho cường độ dữ liệu. Bản đồ nhiệt giúp dễ dàng hình dung các mẫu, mối tương quan và sự bất thường trong dữ liệu. Màu sắc ấm hơn cho thấy giá trị cao hơn, trong khi tông màu lạnh hơn thể hiện giá trị thấp hơn. Các lợi ích chính bao gồm trực quan hóa trực quan phân phối dữ liệu, phát hiện mẫu hiệu quả và phân tích không gian nâng cao để ra quyết định. Để biết thêm chi tiết và tùy chọn cấu hình, hãy tham khảo phần Cấu hình bản đồ nhiệt .
Tôi có thể sử dụng không Ultralytics YOLOv8 Để thực hiện theo dõi đối tượng và tạo bản đồ nhiệt đồng thời?
Có Ultralytics YOLOv8 Hỗ trợ theo dõi đối tượng và tạo bản đồ nhiệt đồng thời. Điều này có thể đạt được thông qua Heatmap
Giải pháp tích hợp với các mô hình theo dõi đối tượng. Để làm như vậy, bạn cần khởi tạo đối tượng heatmap và sử dụng YOLOv8'khả năng theo dõi. Đây là một ví dụ đơn giản:
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()
Để được hướng dẫn thêm, hãy kiểm tra trang Chế độ theo dõi .
Điều gì làm cho Ultralytics YOLOv8 bản đồ nhiệt khác với các công cụ trực quan hóa dữ liệu khác như OpenCV hoặc Matplotlib?
Ultralytics YOLOv8 Bản đồ nhiệt được thiết kế đặc biệt để tích hợp với các mô hình phát hiện và theo dõi đối tượng của nó, cung cấp giải pháp đầu cuối để phân tích dữ liệu thời gian thực. Không giống như các công cụ trực quan hóa chung chung như OpenCV hoặc Matplotlib, YOLOv8 Bản đồ nhiệt được tối ưu hóa cho hiệu suất và xử lý tự động, hỗ trợ các tính năng như theo dõi liên tục, điều chỉnh hệ số phân rã và lớp phủ video thời gian thực. Để biết thêm thông tin về YOLOv8Các tính năng độc đáo của nó, hãy truy cập Ultralytics YOLOv8 Giới thiệu.
Làm thế nào tôi có thể hình dung chỉ các lớp đối tượng cụ thể trong bản đồ nhiệt bằng cách sử dụng Ultralytics YOLOv8?
Bạn có thể hình dung các lớp đối tượng cụ thể bằng cách chỉ định các lớp mong muốn trong track()
Phương pháp của YOLO mẫu. Ví dụ: nếu bạn chỉ muốn hình dung ô tô và người (giả sử chỉ số lớp của họ là 0 và 2), bạn có thể đặt classes
tham số cho phù hợp.
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()
Tại sao doanh nghiệp nên chọn Ultralytics YOLOv8 Để tạo bản đồ nhiệt trong phân tích dữ liệu?
Ultralytics YOLOv8 Cung cấp tích hợp liền mạch phát hiện đối tượng tiên tiến và tạo bản đồ nhiệt thời gian thực, làm cho nó trở thành lựa chọn lý tưởng cho các doanh nghiệp muốn trực quan hóa dữ liệu hiệu quả hơn. Những ưu điểm chính bao gồm trực quan hóa phân phối dữ liệu trực quan, phát hiện mẫu hiệu quả và phân tích không gian nâng cao để ra quyết định tốt hơn. Ngoài ra YOLOv8Các tính năng tiên tiến của nó như theo dõi liên tục, bản đồ màu có thể tùy chỉnh và hỗ trợ các định dạng xuất khác nhau làm cho nó vượt trội so với các công cụ khác như TensorFlow và OpenCV để phân tích dữ liệu toàn diện. Tìm hiểu thêm về các ứng dụng kinh doanh tại Ultralytics Kế hoạch.
Đã tạo 2023-12-07, Cập nhật 2024-07-14
Tác giả: RizwanMunawar (8), glenn-jocher (13), IvorZhu331 (1), AyushExel (1), 1579093407@qq.com (1)