Ultralytics YOLO27:

Đếm đối tượng trong các vùng bằng Ultralytics YOLO26#

Giải pháp RegionCounter trong Ultralytics YOLO26 theo dõi các đối tượng qua từng khung hình video và ở mỗi khung hình sẽ đếm những đối tượng có tâm của bounding box nằm bên trong từng vùng do bạn xác định. Mỗi vùng được vẽ trên khung hình cùng với số lượng cập nhật trực tiếp riêng, giúp bạn giám sát nhiều khu vực như lối đi trong cửa hàng, làn đường hoặc khu vực sản xuất chỉ bằng một lệnh gọi Python hoặc lệnh CLI.



Watch: Object Counting in Different Regions using Ultralytics YOLO | Ultralytics Solutions

Tại sao nên sử dụng tính năng đếm trong vùng?#

  • Nhiều vùng trong một lượt xử lý: Truyền vào một dictionary gồm các polygon được đặt tên, mỗi vùng sẽ có số lượng độc lập được vẽ trên khung hình, nhờ đó một luồng video có thể bao quát mọi khu vực bạn quan tâm.
  • Tích hợp sẵn tính năng tracking: Giải pháp này tự chạy YOLO26 detection và tracking đối tượng bên trong, vì vậy bạn không cần kết nối một pipeline tracking riêng.
  • Có thể đọc số lượng bằng chương trình: Mỗi khung hình được xử lý trả về một results object với dictionary chứa số lượng của các vùng, sẵn sàng cho dashboard, cảnh báo hoặc ghi log.

Ứng dụng thực tế#

Bán lẻĐường phố khu chợ
Ultralytics YOLO đếm người bên trong các vùng polygon được vẽ trong một cửa hàng bán lẻSố lượng vùng của Ultralytics YOLO được phủ lên hình ảnh một đường phố khu chợ đông đúc
Đếm người trong vùng bằng Ultralytics YOLOĐếm đám đông trong vùng bằng Ultralytics YOLO

Cách đếm đối tượng trong các vùng bằng Ultralytics YOLO#

Chạy giải pháp RegionCounter trên một nguồn video từ CLI hoặc Python. Một vùng có thể là một danh sách các điểm (một zone duy nhất) hoặc một dictionary ánh xạ tên zone với các danh sách điểm. Ví dụ Python dưới đây đếm đối tượng trong hai vùng được đặt tên và ghi các khung hình đã xử lý vào một file video đầu ra:

Đếm trong vùng bằng Ultralytics YOLO
# Run a region counting example
yolo solutions region show=True

# Pass a source video
yolo solutions region source="path/to/video.mp4"

# Pass a custom region
yolo solutions region region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"

Các argument của RegionCounter()#

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

Đối sốKiểuMặc địnhMô tả
modelstrNoneĐường dẫn đến file model Ultralytics YOLO.
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.

Giải pháp RegionCounter cho phép sử dụng các tham số tracking đối tượng:

Đố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 cài đặt trực quan hóa sau đây cũng được hỗ trợ:

Đố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.

Cách thức hoạt động của tính năng đếm trong vùng#

Giải pháp RegionCounter chuyển mỗi vùng bạn truyền vào thành một polygon, với tối thiểu ba điểm cho mỗi vùng. Một danh sách điểm thuần túy sẽ trở thành một zone duy nhất có tên Region#01, còn dictionary sẽ giữ nguyên tên zone do bạn đặt; mỗi zone được vẽ bằng một màu riêng từ bảng màu Ultralytics. Sau đó, mỗi khung hình được xử lý qua ba 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 tracking, giải pháp tính tâm của bounding box và kiểm tra đối tượng nằm trong những polygon vùng nào
  3. Số lượng của mỗi vùng được vẽ tại tâm vùng, và các số lượng được đặt lại trước khung hình tiếp theo

Vì số lượng được bắt đầu lại ở mỗi khung hình, con số hiển thị trên một vùng là số đối tượng hiện đang có trong vùng đó, tức số đối tượng đang ở bên trong tại thời điểm hiện tại, không phải tổng tích lũy. Để đếm tích lũy các đối tượng vượt qua một ranh giới, hãy sử dụng giải pháp ObjectCounter thay thế.

Mỗi lần gọi cũng trả về một results object, trong đó thuộc tính plot_im chứa khung hình đã được chú thích và dictionary region_counts ánh xạ tên vùng với số lượng tương ứng, để bạn có thể đưa các số liệu này vào logic ứng dụng của riêng mình.

Kết luận#

Giải pháp RegionCounter của Ultralytics YOLO26 giám sát số lượng đối tượng trực tiếp trong bao nhiêu zone được đặt tên tùy nhu cầu, chỉ với vài dòng code. Để mở rộng thêm, hãy đếm các đối tượng vượt qua ranh giới bằng tính năng đếm đối tượng, theo dõi các đối tượng bên trong một zone duy nhất với TrackZone, hoặc khám phá các Ultralytics Solutions khác.

FAQ#

  • Ultralytics YOLO26 đếm đối tượng trong các vùng bằng cách tracking mọi đối tượng trong khung hình và kiểm tra xem tâm bounding box của đối tượng có nằm bên trong từng polygon do người dùng xác định hay không. Số lượng hiển thị trên một vùng là số đối tượng hiện có trong vùng ở khung hình đó, không phải tổng tích lũy. Các tùy chọn cấu hình được liệt kê trong phần Arguments của RegionCounter().

  • Truyền đối số region dưới dạng dictionary ánh xạ tên zone với các danh sách điểm, như trong ví dụ chính:

    from ultralytics import solutions
    
    region_points = {
        "region-01": [(50, 50), (250, 50), (250, 250), (50, 250)],
        "region-02": [(640, 640), (780, 640), (780, 720), (640, 720)],
    }
    regioncounter = solutions.RegionCounter(region=region_points, model="yolo26n.pt", show=True)

    Mỗi zone được đặt tên sẽ được vẽ bằng một màu riêng và có số lượng độc lập.

  • Đối tượng được trả về bởi mỗi lần gọi regioncounter(im0) chứa một dictionary region_counts ánh xạ tên vùng với số lượng tương ứng, cùng với plot_im (khung hình đã được chú thích) và total_tracks (số đối tượng được tracking). In results object để kiểm tra tất cả các trường hiện có.

  • Có. Truyền đối số classes cùng với các chỉ số lớp cần giữ lại, ví dụ classes=[0] để chỉ đếm người bằng model được pretrain trên COCO. Danh sách đầy đủ các đối số liên quan đến tracking nằm trong phần Arguments của RegionCounter().

  • RegionCounter hiển thị số đối tượng bên trong mỗi zone dạng polygon ở khung hình hiện tại, trong khi ObjectCounter đếm tích lũy các đối tượng khi chúng vượt qua một đường hoặc ranh giới vùng, đồng thời tracking tổng số đi vào và đi ra. Sử dụng RegionCounter để theo dõi số đối tượng hiện có trong một hoặc nhiều zone và ObjectCounter để đếm lượt đi vào và đi ra; chỉ ObjectCounter hỗ trợ các vùng dạng đường.

Bình luận