Bỏ qua nội dung

Đếm đối tượng bằng cách sử dụng Ultralytics YOLO11

Đếm đối tượng là gì?

Đếm đối tượng mở trong Colab

Đếm đối tượng bằng 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 nổi 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 nhiều tình huống khác nhau như phân tích đám đông và giám sát, nhờ vào các thuật toán tiên tiến và khả năng học sâu .



Đồng hồ: Đếm đối tượng theo lớp bằng cách sử dụng Ultralytics YOLOv8

Ưu điểm của việc đếm đối tượng

  • Tối ưu hóa tài nguyên: Đếm đối tượng giúp 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 giúp tăng cường bảo mật và giám sát bằng cách theo dõi và đếm chính xác các thực thể, hỗ trợ phát hiện mối đe dọa chủ động.
  • Ra quyết định sáng suốt: Việc đếm đối tượng cung cấp thông tin chi tiết có giá trị cho việc ra quyết định, tối ưu hóa quy trình trong bán lẻ, quản lý giao thông và nhiều lĩnh vực khác.

Ứng dụng trong thế giới thực

Hậu cần Nuôi trồng thủy sản
Băng tải đếm gói sử dụng Ultralytics YOLO11 Đếm cá trong biển bằng cách sử dụng Ultralytics YOLO11
Băng tải đếm gói sử dụng Ultralytics YOLO11 Đếm cá trong biển bằng cách sử dụng Ultralytics YOLO11

Đếm đối tượng bằng cách 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 Lập luận

Đây là một bảng với ObjectCounter lập luận:

Lý lẽ Kiểu Mặc định Sự miêu tả
model str None Đường dẫn đến Ultralytics YOLO Tệp mẫu.
show_in bool True Đánh dấu để kiểm soát việc hiển thị số lượng vào luồng video hay không.
show_out bool True Đánh dấu để kiểm soát việc hiển thị số lượng đầu ra trên luồng video.
region list [(20, 400), (1260, 400)] Danh sách các điểm xác định vùng đếm.

Các ObjectCounter giải pháp cho phép sử dụng một số track lập luận:

Lý lẽ Kiểu Mặc định Sự miêu 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 việ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 Giao điểm trên Liên hợp (IoU) để lọc các phát hiện chồng chéo.
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 hình ảnh trực quan về các đối tượng được theo dõi.
device str None Chỉ định thiết bị để 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 cụ thể GPU hoặc các thiết bị tính toán khác để thực hiện mô hình.

Ngoài ra, các đối số trực quan được liệt kê dưới đây cũng được hỗ trợ:

Lý lẽ Kiểu Mặc định Sự miêu tả
show bool False Nếu như True, hiển thị hình ảnh hoặc video có chú thích trong một cửa sổ. Hữu ích cho 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 của đường đượ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õ nét hơn.

CÂU HỎI THƯỜNG GẶP

Làm thế nào để đếm các đối tượng trong video bằng cách sử dụng Ultralytics YOLO11 ?

Để đếm các đối tượng trong video bằng cách sử dụng Ultralytics YOLO11 , bạn có thể làm theo các bước sau:

  1. Nhập các thư viện cần thiết (cv2, ultralytics).
  2. Xác định vùng đếm (ví dụ: đa giác, đường thẳng, v.v.).
  3. Thiết lập chức năng ghi hình video và khởi tạo bộ đếm đối tượng.
  4. Xử lý từng khung hình để theo dõi các đối tượng và đếm chúng trong vùng đã xác định.

Sau đây là một ví dụ đơn giản về cách đếm trong một vùng:

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 cấu hình và tùy chọn nâng cao hơn, hãy xem giải pháp RegionCounter để đếm các đối tượng trong nhiều vùng cùng lúc.

Những lợi ích của việc sử dụng là gì? Ultralytics YOLO11 để đếm đồ vật?

Sử dụng Ultralytics YOLO11 để đếm đồ vật có một số lợi thế sau:

  1. Tối ưu hóa tài nguyên: Giúp 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 .
  2. Tăng cường bảo mật: Tăng cường bảo mật và giám sát bằng cách theo dõi và đếm chính xác các thực thể, hỗ trợ phát hiện mối đe dọa chủ động và hệ thống bảo mật .
  3. Ra quyết định sáng suốt: Cung cấp thông tin chi tiết có giá trị cho việc ra quyết định, tối ưu hóa quy trình trong các lĩnh vực như bán lẻ, quản lý giao thông, v.v.
  4. Xử lý thời gian thực: YOLO11 Kiến trúc của nó cho phép suy luận theo thời gian thực , phù hợp với các luồng video trực tiếp và các ứng dụng nhạy cảm với 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 vùng cụ thể.

Làm thế nào tôi có thể đếm các lớp đối tượng cụ thể bằng cách sử dụng Ultralytics YOLO11 ?

Để đếm các lớp đối tượng cụ thể bằng cách sử dụ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à Python ví dụ:

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 02 (ví dụ, người và xe trong tập dữ liệu COCO). Bạn có thể tìm thêm thông tin về chỉ số lớp trong Tài liệu tập dữ liệu COCO.

Tại sao tôi nên sử dụng YOLO11 so với 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 cung cấp 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à trước đó YOLO phiên bản:

  1. Tốc độ và hiệu quả: YOLO11 cung cấp khả năng xử lý thời gian thực, lý tưởng cho các ứng dụng yêu cầu suy luận tốc độ cao, chẳng hạn như giám sát và lái xe tự động .
  2. Độ chính xác : Cung cấp độ chính xác tiên tiến cho các nhiệm vụ phát hiện và theo dõi đối tượng, giảm số lượng báo động giả và cải thiện độ tin cậy của toàn bộ hệ thống.
  3. 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 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.
  4. Tính linh hoạt: Hỗ trợ nhiều tác vụ khác nhau như phát hiện đối tượng, phân đoạn và theo dõi với các mô hình có thể cấu hình để đáp ứng các yêu cầu sử dụng cụ thể.

Kiểm tra Ultralytics Tài liệu YOLO11 cung cấp thông tin chi tiết 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?

Đúng, 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 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: Theo dõi và quản lý các cuộc tụ tập đông người, đảm bảo an toàn và tối ưu hóa lưu lượng đám đông bằng cách đếm theo khu vực .
  • Quản lý giao thông: Theo dõi và đếm số lượng phương tiện, phân tích tình hình giao thông và quản lý tình trạng tắc nghẽn theo 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 của khách hàng.
  • Tự động hóa công nghiệp: Đếm sản phẩm trên băng tải và giám sát 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á Ultralytics Solutions để có 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.

📅 Được tạo ra cách đây 1 năm ✏️ Đã cập nhật cách đây 5 ngày

Bình luận