Đếm đối tượng bằng Ultralytics YOLO11
Đếm đối tượng là gì?
Đếm đối tượng với Ultralytics YOLO11 bao gồm việc xác định và đếm chính xác các đối tượng cụ thể trong video và luồng camera. YOLO11 vượt trội trong các ứng dụng thời gian thực, cung cấp khả năng đếm đối tượng hiệu quả và chính xác cho các tình huống khác nhau như phân tích đám đông và giám sát, nhờ các thuật toán hiện đại và khả năng học sâu.
Xem: Cách Thực hiện Đếm Đối tượng theo Thời gian Thực với Ultralytics YOLO11 🍏
Ưu điểm của việc Đếm Đối tượng
- Tối ưu hóa tài nguyên: Đếm đối tượng tạo điều kiện quản lý tài nguyên hiệu quả bằng cách cung cấp số lượng chính xác, tối ưu hóa việc phân bổ tài nguyên trong các ứng dụng như quản lý hàng tồn kho.
- Tăng cường bảo mật: Đếm đối tượng tăng cường bảo mật và giám sát bằng cách theo dõi và đếm các đối tượng một cách chính xác, hỗ trợ phát hiện mối đe dọa chủ động.
- Ra quyết định dựa trên thông tin: Đếm đối tượng cung cấp những hiểu biết có giá trị để ra quyết định, tối ưu hóa các quy trình trong bán lẻ, quản lý giao thông và nhiều lĩnh vực khác.
Các ứng dụng thực tế
Logistics | Nuôi trồng thủy sản |
---|---|
![]() |
![]() |
Đếm số lượng gói hàng trên băng chuyền sử dụng Ultralytics YOLO11 | Đếm cá trên biển sử dụng Ultralytics YOLO11 |
Đếm đối tượng sử dụng Ultralytics YOLO
# Run a counting example
yolo solutions count show=True
# Pass a source video
yolo solutions count source="path/to/video.mp4"
# Pass region coordinates
yolo solutions count region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"
# region_points = [(20, 400), (1080, 400)] # line counting
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)] # rectangle region
# region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360), (20, 400)] # polygon region
# Video writer
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Initialize object counter object
counter = solutions.ObjectCounter(
show=True, # display the output
region=region_points, # pass region points
model="yolo11n.pt", # model="yolo11n-obb.pt" for object counting with OBB model.
# classes=[0, 2], # count specific classes i.e. person and car with COCO pretrained model.
# tracker="botsort.yaml", # choose trackers i.e "bytetrack.yaml"
)
# Process video
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or processing is complete.")
break
results = counter(im0)
# print(results) # access the output
video_writer.write(results.plot_im) # write the processed frame.
cap.release()
video_writer.release()
cv2.destroyAllWindows() # destroy all opened windows
ObjectCounter
Các đối số
Đây là bảng với ObjectCounter
các đối số:
Đối số | Loại | Mặc định | Mô tả |
---|---|---|---|
model |
str |
None |
Đường dẫn đến Tệp Mô hình Ultralytics YOLO. |
show_in |
bool |
True |
Cờ để kiểm soát việc có hiển thị số lượng trong luồng video hay không. |
show_out |
bool |
True |
Cờ để kiểm soát việc có hiển thị số lượng đối tượng đếm được trên luồng video hay không. |
region |
list |
'[(20, 400), (1260, 400)]' |
Danh sách các điểm xác định vùng đếm. |
Hàm ObjectCounter
giải pháp cho phép sử dụng một số track
các đối số:
Đối số | Loại | Mặc định | Mô tả |
---|---|---|---|
tracker |
str |
'botsort.yaml' |
Chỉ định thuật toán theo dõi để sử dụng, ví dụ: bytetrack.yaml hoặc botsort.yaml . |
conf |
float |
0.3 |
Đặt ngưỡng tin cậy cho cá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ác kết quả dương tính giả. |
iou |
float |
0.5 |
Đặt ngưỡng Intersection over Union (IoU) để lọc các phát hiện trùng lặp. |
classes |
list |
None |
Lọc kết quả theo chỉ số lớp. Ví dụ: classes=[0, 2, 3] chỉ theo dõi các lớp được chỉ định. |
verbose |
bool |
True |
Kiểm soát việc hiển thị kết quả theo dõi, cung cấp đầu ra trực quan về các đối tượng được theo dõi. |
device |
str |
None |
Chỉ định thiết bị cho suy luận (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 mô hình. |
Ngoài ra, các đối số hiển thị được liệt kê dưới đây được hỗ trợ:
Đối số | Loại | Mặc định | Mô tả |
---|---|---|---|
show |
bool |
False |
Nếu True , hiển thị hình ảnh hoặc video đã chú thích trong một cửa sổ. Hữu ích để có phản hồi trực quan ngay lập tức trong quá trình phát triển hoặc thử nghiệm. |
line_width |
None or int |
None |
Chỉ định độ rộng đường của hộp giới hạn. Nếu None , độ rộng đường kẻ được tự động điều chỉnh dựa trên kích thước hình ảnh. Cung cấp tùy chỉnh trực quan để rõ ràng hơn. |
show_conf |
bool |
True |
Hiển thị điểm tin cậy cho mỗi lần phát hiện cùng với nhãn. Cung cấp cái nhìn sâu sắc về độ chắc chắn của mô hình cho mỗi lần phát hiện. |
show_labels |
bool |
True |
Hiển thị nhãn cho mỗi lần phát hiện trong đầu ra trực quan. Cung cấp sự hiểu biết ngay lập tức về các đối tượng được phát hiện. |
Câu hỏi thường gặp
Làm cách nào để đếm các đối tượng trong video bằng Ultralytics YOLO11?
Để đếm các đối tượng trong video bằng Ultralytics YOLO11, bạn có thể làm theo các bước sau:
- Nhập các thư viện cần thiết (
cv2
,ultralytics
). - Xác định vùng đếm (ví dụ: đa giác, đường thẳng, v.v.).
- Thiết lập khả năng quay video và khởi tạo bộ đếm đối tượng.
- Xử lý từng khung hình để theo dõi các đối tượng và đếm chúng trong khu vực đã xác định.
Dưới đây là một ví dụ đơn giản để đếm trong một khu vực:
import cv2
from ultralytics import solutions
def count_objects_in_region(video_path, output_video_path, model_path):
"""Count objects in a specific region within a video."""
cap = cv2.VideoCapture(video_path)
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]
counter = solutions.ObjectCounter(show=True, region=region_points, model=model_path)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or processing is complete.")
break
results = counter(im0)
video_writer.write(results.plot_im)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolo11n.pt")
Để biết thêm các cấu hình và tùy chọn nâng cao, hãy xem giải pháp RegionCounter để đếm các đối tượng trong nhiều khu vực đồng thời.
Ưu điểm của việc sử dụng Ultralytics YOLO11 để đếm đối tượng là gì?
Sử dụng Ultralytics YOLO11 để đếm đối tượng mang lại một số lợi thế:
- Tối ưu hóa tài nguyên: Nó tạo điều kiện quản lý tài nguyên hiệu quả bằng cách cung cấp số lượng chính xác, giúp tối ưu hóa việc phân bổ tài nguyên trong các ngành như quản lý hàng tồn kho.
- Tăng cường bảo mật: Nó tăng cường bảo mật và giám sát bằng cách theo dõi và đếm các đối tượng một cách chính xác, hỗ trợ phát hiện mối đe dọa chủ động và hệ thống an ninh.
- Ra quyết định sáng suốt: Nó cung cấp những hiểu biết có giá trị để ra quyết định, tối ưu hóa các quy trình trong các lĩnh vực như bán lẻ, quản lý giao thông và hơn thế nữa.
- Xử lý theo thời gian thực: Kiến trúc của YOLO11 cho phép suy luận theo thời gian thực, phù hợp cho các luồng video trực tiếp và các ứng dụng nhạy cảm về thời gian.
Để biết các ví dụ triển khai và ứng dụng thực tế, hãy khám phá giải pháp TrackZone để theo dõi các đối tượng trong các khu vực cụ thể.
Làm cách nào để đếm các lớp đối tượng cụ thể bằng Ultralytics YOLO11?
Để đếm các lớp đối tượng cụ thể bằng Ultralytics YOLO11, bạn cần chỉ định các lớp bạn quan tâm trong giai đoạn theo dõi. Dưới đây là một ví dụ về Python:
import cv2
from ultralytics import solutions
def count_specific_classes(video_path, output_video_path, model_path, classes_to_count):
"""Count specific classes of objects in a video."""
cap = cv2.VideoCapture(video_path)
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
line_points = [(20, 400), (1080, 400)]
counter = solutions.ObjectCounter(show=True, region=line_points, model=model_path, classes=classes_to_count)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or processing is complete.")
break
results = counter(im0)
video_writer.write(results.plot_im)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
count_specific_classes("path/to/video.mp4", "output_specific_classes.avi", "yolo11n.pt", [0, 2])
Trong ví dụ này, classes_to_count=[0, 2]
có nghĩa là nó đếm các đối tượng của lớp 0
và 2
(ví dụ: người và xe hơi trong bộ dữ liệu COCO). Bạn có thể tìm thêm thông tin về chỉ mục lớp trong Tài liệu về bộ dữ liệu COCO.
Tại sao tôi nên sử dụng YOLO11 thay vì các mô hình phát hiện đối tượng khác cho các ứng dụng thời gian thực?
Ultralytics YOLO11 mang lại một số lợi thế so với các mô hình phát hiện đối tượng khác như Faster R-CNN, SSD và các phiên bản YOLO trước đây:
- Tốc độ và hiệu quả: YOLO11 cung cấp khả năng xử lý theo thời gian thực, khiến nó trở nên lý tưởng cho các ứng dụng đòi hỏi suy luận tốc độ cao, chẳng hạn như giám sát và lái xe tự động.
- Độ chính xác: Nó cung cấp độ chính xác hiện đại cho các tác vụ phát hiện và theo dõi đối tượng, giảm số lượng dương tính giả và cải thiện độ tin cậy tổng thể của hệ thống.
- Dễ dàng tích hợp: YOLO11 cung cấp khả năng tích hợp liền mạch với nhiều nền tảng và thiết bị khác nhau, bao gồm cả thiết bị di động và thiết bị biên, điều này rất quan trọng đối với các ứng dụng AI hiện đại.
- Linh hoạt: Hỗ trợ nhiều tác vụ như phát hiện đối tượng, phân đoạn (segmentation) và theo dõi với các mô hình có thể định cấu hình để đáp ứng các yêu cầu sử dụng cụ thể.
Xem tài liệu YOLO11 Ultralytics để tìm hiểu sâu hơn về các tính năng và so sánh hiệu suất của nó.
Tôi có thể sử dụng YOLO11 cho các ứng dụng nâng cao như phân tích đám đông và quản lý giao thông không?
Có, Ultralytics YOLO11 hoàn toàn phù hợp cho các ứng dụng nâng cao như phân tích đám đông và quản lý giao thông do khả năng phát hiện theo thời gian thực, khả năng mở rộng và tính linh hoạt tích hợp. Các tính năng nâng cao của nó cho phép theo dõi, đếm và phân loại đối tượng có độ chính xác cao trong môi trường động. Các trường hợp sử dụng ví dụ bao gồm:
- Phân tích đám đông: Giám sát và quản lý các cuộc tụ tập lớn, đảm bảo an toàn và tối ưu hóa luồng đám đông bằng đếm dựa trên khu vực.
- Quản lý giao thông: Theo dõi và đếm xe, phân tích các kiểu giao thông và quản lý tắc nghẽn trong thời gian thực với khả năng ước tính tốc độ.
- Phân tích bán lẻ: Phân tích mô hình di chuyển của khách hàng và tương tác sản phẩm để tối ưu hóa bố cục cửa hàng và cải thiện trải nghiệm khách hàng.
- Tự động hóa công nghiệp: Đếm sản phẩm trên băng chuyền và theo dõi dây chuyền sản xuất để kiểm soát chất lượng và cải thiện hiệu quả.
Đối với các ứng dụng chuyên biệt hơn, hãy khám phá Giải pháp Ultralytics để có được một bộ công cụ toàn diện được thiết kế cho các thách thức về thị giác máy tính trong thế giới thực.