Heatmap theo dõi đối tượng bằng Ultralytics YOLO26#
Giải pháp Heatmap trong Ultralytics YOLO26 theo dõi các đối tượng qua nhiều khung hình video và phủ cường độ chuyển động tích lũy lên từng khung hình, khiến khu vực đông đúc hiển thị bằng màu nóng còn khu vực yên tĩnh hiển thị bằng màu lạnh. Được xây dựng trên nền tả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 lưu lại chỉ bằng một lệnh gọi Python hoặc lệnh CLI.
Xem: Cách tạo heatmap bằng Ultralytics YOLO26 | Trực quan hóa hoạt động của đối tượng | VisionAI trong bán lẻ 🚀
Vì sao nên dùng heatmap để phân tích video?#
- Nhận biết nhanh các kiểu hoạt động: Cường độ tích lũy tại những nơi đối tượng được theo dõi lưu lại, giúp dễ dàng nhận ra làn đường đông đúc, kệ hàng được ưa chuộng hoặc điểm ùn tắc của đám đông mà không cần xem lại từng khung hình.
- Tích hợp sẵn tracking: Giải pháp tự chạy quá trình phát hiện và tracking bằng YOLO26, vì vậy không cần kết nối riêng một pipeline tracking.
- Đế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 tạo, 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 bằng Ultralytics YOLO | Heatmap bán lẻ bằng Ultralytics YOLO |
Cách tạo heatmap bằng Ultralytics YOLO#
Chạy giải pháp Heatmap trên nguồn video bằng CLI hoặc Python. Ví dụ Python ghi các khung hình đã xử lý vào 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 đối số của Heatmap()#
Dưới đây là bảng các đối số của Heatmap:
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
model | str | None | Đường dẫn đến tệp model Ultralytics YOLO. |
colormap | int | cv2.COLORMAP_DEEPGREEN | Bảng màu dùng cho heatmap. |
show_in | bool | True | Flag điều khiển việc hiển thị số lượt đi vào trên luồng video. |
show_out | bool | True | Flag điều khiển việc hiển thị số lượt đi ra trên luồng video. |
region | list hoặc dict | None | Các điểm xác định vùng quan tâm, dưới dạng danh sách tuple (x, y) hoặc từ điển ánh xạ tên vùng với danh sách điểm cho nhiều vùng (chỉ dùng RegionCounter). Khi là None, các giải pháp cần vùng sẽ dùng vùng mặc định được xác định trước. |
line_width | int | 2 | Độ dày đường viền của box, keypoint và số đếm mà giải pháp vẽ. |
verbose | bool | True | Bật nhật ký theo từng frame của giải pháp, gồm shape đầu vào, số lượng class và tốc độ xử lý. Bản thân lệnh gọi tracking luôn không ghi nhật ký. |
Bạn cũng có thể áp dụng các đối số track khác nhau trong giải pháp Heatmap.
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
tracker | str | 'tracktrack.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 | Đặt ngưỡng confidence cho các đối tượng được phát hiện; 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ả kết quả dương tính giả. |
iou | float | 0.7 | Đặt ngưỡng Intersection over Union (IoU) để lọc các đối tượng phát hiện bị chồng lấn. |
classes | list | None | Lọc kết quả theo chỉ mục 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 để suy luận (ví dụ: cpu, cuda:0 hoặc 0). Cho phép người dùng chọn CPU, một GPU cụ thể hoặc thiết bị tính toán khác để chạy model. |
imgsz | int or tuple | 640 | Kích thước ảnh suy luận mục tiêu: số nguyên cho ảnh vuông hoặc cặp (height, width). Kích thước sẽ được điều chỉnh theo stride của model. |
max_det | int | 300 | Số lượng đối tượng phát hiện tối đa được giữ lại trong mỗi khung hình trước khi theo dõi, giới hạn số đối tượng mà một giải pháp xử lý trong các cảnh dày đặc. |
quantize | int or str | None | Độ chính xác suy luận: 16 (FP16) hoặc 32/unset (FP32) cho model PyTorch và TorchScript khi chạy ngoài CPU; các định dạng khác sử dụng độ chính xác do artifact và runtime của chúng lựa chọn. Thay thế đối số half đã lỗi thời. |
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ị ảnh hoặc video đã được chú thích 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 phát triển hoặc kiểm thử. |
show_conf | bool | True | Hiển thị điểm confidence bên cạnh nhãn của mỗi detection. Cho biết mức độ chắc chắn của model đối với từng detection. |
show_labels | bool | True | Hiển thị nhãn cho mỗi detection trong đầu ra trực quan. Giúp nhận biết ngay các đối tượng được phát hiện. |
Bảng màu heatmap#
Đối số colormap chấp nhận mọi bảng màu 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 mùa thu |
cv2.COLORMAP_BONE | Bảng màu xương |
cv2.COLORMAP_JET | Bản đồ màu Jet |
cv2.COLORMAP_WINTER | Bản đồ màu Winter |
cv2.COLORMAP_RAINBOW | Bản đồ màu Rainbow |
cv2.COLORMAP_OCEAN | Bản đồ màu Ocean |
cv2.COLORMAP_SUMMER | Bản đồ màu Summer |
cv2.COLORMAP_SPRING | Bản đồ màu Spring |
cv2.COLORMAP_COOL | Bản đồ màu Cool |
cv2.COLORMAP_HSV | Bản đồ màu HSV (Sắc độ, Độ bão hòa, Giá trị) |
cv2.COLORMAP_PINK | Bản đồ màu Pink |
cv2.COLORMAP_HOT | Bản đồ màu Hot |
cv2.COLORMAP_PARULA | Bản đồ màu Parula |
cv2.COLORMAP_MAGMA | Bản đồ màu Magma |
cv2.COLORMAP_INFERNO | Bản đồ màu Inferno |
cv2.COLORMAP_PLASMA | Bản đồ màu Plasma |
cv2.COLORMAP_VIRIDIS | Bản đồ màu Viridis |
cv2.COLORMAP_CIVIDIS | Bản đồ màu Cividis |
cv2.COLORMAP_TWILIGHT | Bản đồ màu Twilight |
cv2.COLORMAP_TWILIGHT_SHIFTED | Bản đồ màu Twilight dịch chuyển |
cv2.COLORMAP_TURBO | Bản đồ màu Turbo |
cv2.COLORMAP_DEEPGREEN | Bản đồ màu Deep Green |
Cách hoạt động của heatmap#
Giải pháp Heatmap mở rộng lớp ObjectCounter. Ở khung hình đầu tiên được xử lý, giải pháp tạo một lớp cường độ trống có kích thước khớp với khung hình. Sau đó, mỗi khung hình được xử lý qua hai bước:
- YOLO26 tracking phát hiện và theo dõi 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 lên trong một vùng tròn có tâm tại bounding box của đối tượng đó
Mỗi khung hình một lần, lớp cường độ tích lũy được chuẩn hóa, tô màu bằng color map đã chọn rồi trộn với khung hình gốc. Lớp phủ chỉ xuất hiện sau khi ít nhất một đối tượng được theo dõi; trước đó, các khung hình được hiển thị mà không có lớp phủ heatmap.
Kết quả là một hình ảnh trực quan động được tích lũy theo thời gian, cho thấy các mô hình giao thông, chuyển động của đám đông hoặc những hành vi không gian khác trong dữ liệu video. Khi đặt region, giải pháp cũng đếm đối tượng đi vào và đi ra khỏi vùng đó trong khi heatmap được tích lũy.
Kết luận#
Giải pháp Heatmap Ultralytics YOLO26 chuyển kết quả tracking đố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 thêm, hãy kết hợp giải pháp với đếm đối tượng, khám phá các Ultralytics Solutions khác hoặc tìm hiểu về chế độ tracking nền tảng.
Câu hỏi thường gặp#
Ultralytics YOLO26 tạo heatmap bằng cách theo dõi đối tượng qua các khung hình video và tích lũy giá trị cường độ tại vị trí của từng đối tượng được theo dõi, sau đó tô màu kết quả và trộn với khung hình gốc. Những vùng có đố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à hiển thị bằng màu ấm hơn. Để xem các tùy chọn cấu hình, hãy tham khảo phần
Heatmap()Arguments.Dùng
cv2.VideoWritercủa OpenCV và ghiresults.plot_imcho mọi khung hình đã xử lý, như minh họa trong ví dụ chính. Thuộc tínhplot_imchứa khung hình đã được áp dụng lớp phủ heatmap.Có. Truyền đối số
regionvàoHeatmap()cùng các điểm xác định đường thẳng, hình chữ nhật hoặc đa giác; giải pháp sẽ đếm đối tượng đi vào và đi ra khỏi vùng đó trong khi heatmap được tích lũy. 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ỉ tạo 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 phát hiện đối tượng, tracking, 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ụ đa dụng như OpenCV hoặc Matplotlib yêu cầu bạn tự xây dựng pipeline đó. Giải pháp xử lý luồng video theo thời gian thực và hỗ trợ tracking liên tục cùng color map tùy chỉnh ngay từ đầu. Để biết chi tiết về model nền tảng, hãy xem trang model YOLO26.

