Heatmap theo dõi đối tượng với Ultralytics YOLO26#
Giải pháp Heatmap trong Ultralytics YOLO26 theo dõi các đối tượng qua từng khung hình video và phủ cường độ chuyển động tích lũy lên mỗi khung hình, để các khu vực đông hoạt động phát sáng bằng màu ấm trong khi các khu vực yên tĩnh vẫn có màu lạnh. Được xây dựng trên tính năng theo dõi đối tượng của YOLO26, giải pháp này biến mọi video thành bản đồ hoạt động không gian, cho thấy luồng giao thông, chuyển động của đám đông và các khu vực dừng lại chỉ bằng một lệnh gọi Python hoặc lệnh CLI.
Watch: Heatmaps using Ultralytics YOLO26
Tại sao nên sử dụng heatmap cho phân tích video?#
- Nhận biết các mẫu hoạt động trong nháy mắt: Cường độ tích lũy tại nơi các đối tượng được theo dõi lưu lại lâu, giúp các làn đường có lưu lượng cao, kệ hàng phổ biến hoặc điểm nghẽn đám đông nổi bật mà không cần xem xét thủ công từng khung hình.
- Tích hợp sẵn tính năng theo dõi: Giải pháp này chạy tính năng phát hiện và theo dõi của YOLO26 nội bộ, vì vậy không cần kết nối một pipeline theo dõi riêng.
- Đếm trong cùng một lượt xử lý: Truyền
regionđể đếm các đối tượng đi vào và đi ra khỏi một vùng trong khi heatmap được xây dựng, kết hợp hai tác vụ phân tích trong một lần chạy.
Ứng dụng thực tế#
| Giao thông vận tải | Bán lẻ |
|---|---|
![]() | ![]() |
| Heatmap giao thông vận tải Ultralytics YOLO | Heatmap bán lẻ Ultralytics YOLO |
Cách tạo heatmap với Ultralytics YOLO#
Chạy giải pháp Heatmap trên nguồn video từ CLI hoặc Python. Ví dụ Python ghi các khung hình đã xử lý vào một tệp video đầu ra:
# Run a heatmap example
yolo solutions heatmap show=True
# Pass a source video
yolo solutions heatmap source="path/to/video.mp4"
# Pass a custom colormap
yolo solutions heatmap colormap=cv2.COLORMAP_INFERNO
# Heatmaps + object counting
yolo solutions heatmap region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"Các argument của Heatmap()#
Dưới đây là bảng các tham số của Heatmap:
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
model | str | None | Đường dẫn đến file model Ultralytics YOLO. |
colormap | int | cv2.COLORMAP_DEEPGREEN | Colormap dùng cho heatmap. |
show_in | bool | True | Cờ điều khiển việc hiển thị số lượng vào trên luồng video. |
show_out | bool | True | Cờ điều khiển việc hiển thị số lượng ra trên luồng video. |
region | list hoặc dict | None | Các điểm xác định vùng quan tâm, có thể là một list các tuple (x, y) hoặc một dictionary ánh xạ tên vùng với list điểm cho nhiều vùng (chỉ dành cho RegionCounter). Khi None, các solution yêu cầu vùng sẽ sử dụng vùng mặc định được định nghĩa sẵn. |
line_width | int | 2 | Độ dày đường kẻ cho các box, keypoint và số lượng mà solution vẽ. |
verbose | bool | True | Bật log theo từng frame của solution, gồm kích thước input, số lượng class và tốc độ xử lý. Riêng lệnh tracking luôn ở chế độ im lặng. |
Bạn cũng có thể áp dụng các đối số track khác trong giải pháp Heatmap.
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
tracker | str | 'botsort.yaml' | Chỉ định thuật toán theo dõi cần sử dụng. Các tùy chọn tích hợp sẵn: botsort.yaml, bytetrack.yaml, ocsort.yaml, deepocsort.yaml, fasttrack.yaml, tracktrack.yaml. |
conf | float | 0.25 | Thiết lập ngưỡng độ tin cậy cho các detection; giá trị thấp hơn cho phép theo dõi nhiều đối tượng hơn nhưng có thể bao gồm các false positive. |
iou | float | 0.7 | Thiết lập ngưỡng Intersection over Union (IoU) để lọc các detection chồng lấn. |
classes | list | None | Lọc kết quả theo chỉ số class. Ví dụ, classes=[0, 2, 3] chỉ theo dõi các class được chỉ định. |
device | str | None | Chỉ định thiết bị dùng cho inference (ví dụ: cpu, cuda:0 hoặc 0). Cho phép người dùng lựa chọn giữa CPU, một GPU cụ thể hoặc các thiết bị tính toán khác để thực thi model. |
imgsz | int or tuple | 640 | Kích thước ảnh inference mục tiêu: một số nguyên cho ảnh vuông hoặc một cặp (height, width). Các hình dạng được điều chỉnh theo stride của model. |
max_det | int | 300 | Số lượng detection tối đa được giữ lại trên mỗi frame trước khi tracking, giới hạn các đối tượng mà một solution xử lý trong các scene đông đúc. |
quantize | int or str | None | Độ chính xác inference: 16 (FP16) hoặc 32/không thiết lập (FP32) đối với các model PyTorch và TorchScript; các định dạng khác tính toán ở độ chính xác mà artifact và runtime của chúng chọn. Thay thế cờ half đã bị loại bỏ. |
Ngoài ra, các đối số trực quan hóa được hỗ trợ được liệt kê bên dưới:
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
show | bool | False | Nếu True, hiển thị image hoặc video đã được annotate trong một cửa sổ. Hữu ích để nhận phản hồi trực quan ngay lập tức trong quá trình development hoặc testing. |
show_conf | bool | True | Hiển thị score confidence cho mỗi detection bên cạnh label. Cung cấp thông tin về mức độ chắc chắn của model đối với từng detection. |
show_labels | bool | True | Hiển thị label cho mỗi detection trong output trực quan. Cung cấp nhận biết tức thì về các object được phát hiện. |
Bảng màu heatmap#
Đối số colormap chấp nhận mọi bảng màu của OpenCV. Truyền hằng số từ module cv2, chẳng hạn như colormap=cv2.COLORMAP_INFERNO:
| Tên bảng màu | Mô tả |
|---|---|
cv2.COLORMAP_AUTUMN | Bảng màu Autumn |
cv2.COLORMAP_BONE | Bảng màu Bone |
cv2.COLORMAP_JET | Bảng màu Jet |
cv2.COLORMAP_WINTER | Bảng màu Winter |
cv2.COLORMAP_RAINBOW | Bảng màu Rainbow |
cv2.COLORMAP_OCEAN | Bảng màu Ocean |
cv2.COLORMAP_SUMMER | Bảng màu Summer |
cv2.COLORMAP_SPRING | Bảng màu Spring |
cv2.COLORMAP_COOL | Bảng màu Cool |
cv2.COLORMAP_HSV | Bảng màu HSV (Sắc độ, Độ bão hòa, Giá trị) |
cv2.COLORMAP_PINK | Bảng màu Pink |
cv2.COLORMAP_HOT | Bảng màu Hot |
cv2.COLORMAP_PARULA | Bảng màu Parula |
cv2.COLORMAP_MAGMA | Bảng màu Magma |
cv2.COLORMAP_INFERNO | Bảng màu Inferno |
cv2.COLORMAP_PLASMA | Bảng màu Plasma |
cv2.COLORMAP_VIRIDIS | Bảng màu Viridis |
cv2.COLORMAP_CIVIDIS | Bảng màu Cividis |
cv2.COLORMAP_TWILIGHT | Bảng màu Twilight |
cv2.COLORMAP_TWILIGHT_SHIFTED | Bảng màu Twilight dịch chuyển |
cv2.COLORMAP_TURBO | Bảng màu Turbo |
cv2.COLORMAP_DEEPGREEN | Bảng màu Deep Green |
Cách heatmap hoạt động#
Giải pháp Heatmap mở rộng lớp ObjectCounter. Trên khung hình đầu tiên được xử lý, giải pháp tạo một lớp cường độ trống có cùng kích thước với khung hình. Sau đó, mỗi khung hình được xử lý theo hai bước:
- Tính năng theo dõi YOLO26 phát hiện và bám theo mọi đối tượng trong khung hình
- Với mỗi đối tượng được theo dõi, cường độ heatmap tăng trong một vùng hình tròn có tâm tại bounding box của đối tượng
Một lần trong mỗi khung hình, lớp cường độ tích lũy được chuẩn hóa, tô màu bằng bảng màu đã chọn và trộn với khung hình gốc. Lớp phủ xuất hiện ngay khi có ít nhất một đối tượng được theo dõi; các khung hình không có đối tượng được theo dõi sẽ được hiển thị mà không có lớp phủ heatmap.
Kết quả là một trực quan hóa động được xây dựng theo thời gian, cho thấy các mẫu giao thông, chuyển động của đám đông hoặc các hành vi không gian khác trong dữ liệu video. Khi đặt region, giải pháp cũng đếm các đối tượng đi vào và đi ra khỏi vùng đó trong khi heatmap được xây dựng.
Kết luận#
Giải pháp Heatmap Ultralytics YOLO26 biến kết quả theo dõi đối tượng thành lớp phủ hoạt động trực quan chỉ với vài dòng code. Để mở rộng hơn, hãy kết hợp giải pháp với tính năng đếm đối tượng, khám phá các Giải pháp Ultralytics khác hoặc đọc về chế độ theo dõi bên dưới.
FAQ#
Ultralytics YOLO26 tạo heatmap bằng cách theo dõi các đối tượng qua từng khung hình video và tích lũy một giá trị cường độ tại vị trí của mỗi đối tượng được theo dõi, sau đó tô màu kết quả và trộn với khung hình gốc. Các khu vực nơi đối tượng xuất hiện thường xuyên hoặc lưu lại lâu sẽ tích lũy cường độ cao hơn và được hiển thị bằng màu ấm hơn. Để biết các tùy chọn cấu hình, hãy tham khảo phần Các đối số của
Heatmap().Sử dụng
cv2.VideoWritercủa OpenCV và ghiresults.plot_imcho mỗi khung hình được xử lý, như minh họa trong ví dụ chính. Thuộc tínhplot_imchứa khung hình đã được áp dụng sẵn lớp phủ heatmap.Có. Truyền đối số
regionvàoHeatmap()cùng các điểm của đường thẳng, hình chữ nhật hoặc đa giác, và giải pháp sẽ đếm các đối tượng đi vào và đi ra khỏi vùng đó trong khi heatmap được xây dựng. Kết quả trả về bao gồmin_count,out_countvà số lượng theo từng lớp. Xem hướng dẫn đếm đối tượng để biết chi tiết cấu hình vùng.Truyền đối số
classesvàoHeatmap()cùng các chỉ số lớp bạn muốn giữ lại. Ví dụ:classes=[0, 2]chỉ xây dựng heatmap từ người và ô tô (chỉ số lớp COCO là 0 và 2):import cv2 from ultralytics import solutions cap = cv2.VideoCapture("path/to/video.mp4") heatmap = solutions.Heatmap(show=True, model="yolo26n.pt", classes=[0, 2]) while cap.isOpened(): success, im0 = cap.read() if not success: break results = heatmap(im0) cap.release() cv2.destroyAllWindows()Heatmap Ultralytics YOLO26 tích hợp tính năng phát hiện đối tượng, theo dõi, tích lũy cường độ và kết xuất lớp phủ trong một lệnh gọi duy nhất, trong khi các công cụ tổng quát như OpenCV hoặc Matplotlib yêu cầu bạn tự xây dựng pipeline đó. Giải pháp xử lý các luồng video theo thời gian thực, đồng thời hỗ trợ theo dõi liên tục và các bảng màu có thể tùy chỉnh ngay từ đầu. Để biết chi tiết về model nền tảng, hãy xem trang model YOLO26.

