Đế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ợ |
|---|---|
![]() | ![]() |
| Đế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:
# 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ểu | Mặc định | Mô tả |
|---|---|---|---|
model | str | None | Đường dẫn đến file model Ultralytics YOLO. |
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. |
Giải pháp RegionCounter cho phép sử dụng các tham số tracking đối tượng:
| Đố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 cài đặt trực quan hóa sau đây cũng được hỗ trợ:
| Đố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. |
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:
- 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 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
- 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ố
regiondướ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 dictionaryregion_countsánh xạ tên vùng với số lượng tương ứng, cùng vớiplot_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ố
classescù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ủaRegionCounter().RegionCounterhiể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ụngRegionCounterđể 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ỉObjectCounterhỗ trợ các vùng dạng đường.

