Ultralytics YOLO27:
Get Started

Heatmap theo dõi đối tượng bằng Ultralytics YOLO26#

Open Heatmaps In Colab

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ảiBán lẻ
Lớp phủ heatmap Ultralytics YOLO thể hiện mật độ giao thông của phương tiệnLớp phủ heatmap Ultralytics YOLO thể hiện chuyển động của khách hàng trong cửa hàng bán lẻ
Heatmap giao thông bằng Ultralytics YOLOHeatmap 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:

Tạo heatmap bằng Ultralytics YOLO
# 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ểuMặc địnhMô tả
modelstrNoneĐường dẫn đến tệp model Ultralytics YOLO.
colormapintcv2.COLORMAP_DEEPGREENBảng màu dùng cho heatmap.
show_inboolTrueFlag điều khiển việc hiển thị số lượt đi vào trên luồng video.
show_outboolTrueFlag điều khiển việc hiển thị số lượt đi ra trên luồng video.
regionlist hoặc dictNoneCá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_widthint2Độ dày đường viền của box, keypoint và số đếm mà giải pháp vẽ.
verboseboolTrueBậ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ểuMặc địnhMô tả
trackerstr'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.
conffloat0.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ả.
ioufloat0.7Đặt ngưỡng Intersection over Union (IoU) để lọc các đối tượng phát hiện bị chồng lấn.
classeslistNoneLọ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.
devicestrNoneChỉ đị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.
imgszint or tuple640Kí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_detint300Số 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.
quantizeint or strNoneĐộ 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ểuMặc địnhMô tả
showboolFalseNế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_confboolTrueHiể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_labelsboolTrueHiể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àuMô tả
cv2.COLORMAP_AUTUMNBảng màu mùa thu
cv2.COLORMAP_BONEBảng màu xương
cv2.COLORMAP_JETBản đồ màu Jet
cv2.COLORMAP_WINTERBản đồ màu Winter
cv2.COLORMAP_RAINBOWBản đồ màu Rainbow
cv2.COLORMAP_OCEANBản đồ màu Ocean
cv2.COLORMAP_SUMMERBản đồ màu Summer
cv2.COLORMAP_SPRINGBản đồ màu Spring
cv2.COLORMAP_COOLBản đồ màu Cool
cv2.COLORMAP_HSVBản đồ màu HSV (Sắc độ, Độ bão hòa, Giá trị)
cv2.COLORMAP_PINKBản đồ màu Pink
cv2.COLORMAP_HOTBản đồ màu Hot
cv2.COLORMAP_PARULABản đồ màu Parula
cv2.COLORMAP_MAGMABản đồ màu Magma
cv2.COLORMAP_INFERNOBản đồ màu Inferno
cv2.COLORMAP_PLASMABản đồ màu Plasma
cv2.COLORMAP_VIRIDISBản đồ màu Viridis
cv2.COLORMAP_CIVIDISBản đồ màu Cividis
cv2.COLORMAP_TWILIGHTBản đồ màu Twilight
cv2.COLORMAP_TWILIGHT_SHIFTEDBản đồ màu Twilight dịch chuyển
cv2.COLORMAP_TURBOBản đồ màu Turbo
cv2.COLORMAP_DEEPGREENBả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:

  1. YOLO26 tracking phát hiện và theo dõi mọi đối tượng trong khung hình
  2. 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.VideoWriter của OpenCV và ghi results.plot_im cho mọi khung hình đã xử lý, như minh họa trong ví dụ chính. Thuộc tính plot_im chứa khung hình đã được áp dụng lớp phủ heatmap.

  • Có. Truyền đối số region vào Heatmap() 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ồm in_count, out_count và 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ố classes vào Heatmap() 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.

Bình luận