Ultralytics YOLO27:

Heatmap theo dõi đối tượng với Ultralytics YOLO26#

Open Heatmaps In Colab

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

Heatmap sử dụ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 argument của Heatmap()#

Dưới đây là bảng các tham số của Heatmap:

Đối sốKiểuMặc địnhMô tả
modelstrNoneĐường dẫn đến file model Ultralytics YOLO.
colormapintcv2.COLORMAP_DEEPGREENColormap dùng cho heatmap.
show_inboolTrueCờ điều khiển việc hiển thị số lượng vào trên luồng video.
show_outboolTrueCờ điều khiển việc hiển thị số lượng ra trên luồng video.
regionlist hoặc dictNoneCá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_widthint2Độ dày đường kẻ cho các box, keypoint và số lượng mà solution vẽ.
verboseboolTrueBậ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ểuMặc địnhMô tả
trackerstr'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.
conffloat0.25Thiế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.
ioufloat0.7Thiết lập ngưỡng Intersection over Union (IoU) để lọc các detection chồng lấn.
classeslistNoneLọc kết quả theo chỉ số class. Ví dụ, classes=[0, 2, 3] chỉ theo dõi các class được chỉ định.
devicestrNoneChỉ đị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.
imgszint or tuple640Kí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_detint300Số 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.
quantizeint or strNoneĐộ 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ểuMặc địnhMô tả
showboolFalseNế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_confboolTrueHiể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_labelsboolTrueHiể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àuMô tả
cv2.COLORMAP_AUTUMNBảng màu Autumn
cv2.COLORMAP_BONEBảng màu Bone
cv2.COLORMAP_JETBảng màu Jet
cv2.COLORMAP_WINTERBảng màu Winter
cv2.COLORMAP_RAINBOWBảng màu Rainbow
cv2.COLORMAP_OCEANBảng màu Ocean
cv2.COLORMAP_SUMMERBảng màu Summer
cv2.COLORMAP_SPRINGBảng màu Spring
cv2.COLORMAP_COOLBảng màu Cool
cv2.COLORMAP_HSVBảng màu HSV (Sắc độ, Độ bão hòa, Giá trị)
cv2.COLORMAP_PINKBảng màu Pink
cv2.COLORMAP_HOTBảng màu Hot
cv2.COLORMAP_PARULABảng màu Parula
cv2.COLORMAP_MAGMABảng màu Magma
cv2.COLORMAP_INFERNOBảng màu Inferno
cv2.COLORMAP_PLASMABảng màu Plasma
cv2.COLORMAP_VIRIDISBảng màu Viridis
cv2.COLORMAP_CIVIDISBảng màu Cividis
cv2.COLORMAP_TWILIGHTBảng màu Twilight
cv2.COLORMAP_TWILIGHT_SHIFTEDBảng màu Twilight dịch chuyển
cv2.COLORMAP_TURBOBảng màu Turbo
cv2.COLORMAP_DEEPGREENBả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:

  1. 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
  2. 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.VideoWriter của OpenCV và ghi results.plot_im cho mỗi khung hình được 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 sẵn lớp phủ heatmap.

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

Bình luận