Ultralytics YOLO27:
Get Started

Đếm đối tượng bằng Ultralytics YOLO26#

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

Open Object Counting In Colab

Đếm đối tượng bằng Ultralytics YOLO26 bao gồm việc nhận diện và đếm chính xác các đối tượng cụ thể trong video và luồng camera. YOLO26 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 nhiều tình huống như phân tích đám đông và giám sát, nhờ các thuật toán hiện đại cùng khả năng học sâu.



Xem: Cách đếm đối tượng theo thời gian thực bằng Ultralytics YOLO26 🚀

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

  • Tối ưu hóa tài nguyên: Đếm đối tượng hỗ trợ 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 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 dựa trên thông tin: Đếm đối tượng cung cấp thông tin chuyên sâu có giá trị để ra quyết định, tối ưu hóa quy trình trong lĩnh vực bán lẻ, quản lý giao thông và nhiều lĩnh vực khác.

Ứng dụng thực tế#

LogisticsNuôi trồng thủy sản
Đếm gói hàng trên băng chuyền bằng Ultralytics YOLO26Đếm cá dưới biển bằng Ultralytics YOLO26
Đếm gói hàng trên băng chuyền bằng Ultralytics YOLO26Đếm cá dưới biển bằng Ultralytics YOLO26

Đếm đối tượng bằng YOLO26#

Xác định một region để đếm — hai điểm cho một đường thẳng hoặc ba điểm trở lên cho một đa giác — rồi truyền đối tượng đó vào giải pháp ObjectCounter. Bộ đếm theo dõi từng đối tượng qua các khung hình và thống kê số lượng IN/OUT khi các đối tượng được theo dõi cắt qua đường thẳng hoặc đi qua vùng, đồng thời trả về một khung hình đã được chú thích mà bạn có thể ghi vào video đầu ra.

Đếm đối tượng bằ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)]"

Đối số region chấp nhận hai điểm (cho đường thẳng) hoặc một đa giác có từ ba điểm trở lên. Xác định tọa độ theo thứ tự cần nối để bộ đếm biết chính xác vị trí các điểm vào và ra.

Các đối số của ObjectCounter#

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

Đối sốKiểuMặc địnhMô tả
modelstrNoneĐường dẫn đến tệp model Ultralytics YOLO.
show_inboolTrueFlag điều khiển việc hiển thị số lượt đi vào trên luồng video.
show_outboolTrueFlag điều khiển việc hiển thị số lượt đi ra trên luồng video.
regionlist hoặc dictNoneCác điểm xác định vùng quan tâm, dưới dạng danh sách tuple (x, y) hoặc từ điển ánh xạ tên vùng với danh sách điểm cho nhiều vùng (chỉ dùng RegionCounter). Khi là None, các giải pháp cần vùng sẽ dùng vùng mặc định được xác định trước.
line_widthint2Độ dày đường viền của box, keypoint và số đếm mà giải pháp vẽ.
verboseboolTrueBật nhật ký theo từng frame của giải pháp, gồm shape đầu vào, số lượng class và tốc độ xử lý. Bản thân lệnh gọi tracking luôn không ghi nhật ký.

Giải pháp ObjectCounter cho phép sử dụng một số đối số track:

Đối sốKiểuMặc địnhMô tả
trackerstr'tracktrack.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.25Đặt ngưỡng confidence cho các đối tượng đượ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ả kết quả dương tính giả.
ioufloat0.7Đặt ngưỡng Intersection over Union (IoU) để lọc các đối tượng phát hiện bị chồng lấn.
classeslistNoneLọc kết quả theo chỉ mục class. Ví dụ: classes=[0, 2, 3] chỉ theo dõi các class được chỉ định.
devicestrNoneChỉ định thiết bị dùng để suy luận (ví dụ: cpu, cuda:0 hoặc 0). Cho phép người dùng chọn CPU, một GPU cụ thể hoặc thiết bị tính toán khác để chạy model.
imgszint or tuple640Kích thước ảnh suy luận mục tiêu: số nguyên cho ảnh vuông hoặc cặp (height, width). Kích thước sẽ được điều chỉnh theo stride của model.
max_detint300Số lượng đối tượng phát hiện tối đa được giữ lại trong mỗi khung hình trước khi theo dõi, giới hạn số đối tượng mà một giải pháp xử lý trong các cảnh dày đặc.
quantizeint or strNoneĐộ chính xác suy luận: 16 (FP16) hoặc 32/không đặt (FP32) cho model PyTorch và TorchScript; các định dạng khác tính toán ở độ chính xác do artifact và runtime lựa chọn. Thay thế cờ half đã lỗi thời.

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

Đối sốKiểuMặc địnhMô tả
showboolFalseNếu True, hiển thị ảnh hoặc video đã được chú thích 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 phát triển hoặc kiểm thử.
show_confboolTrueHiển thị điểm confidence bên cạnh nhãn của mỗi detection. Cho biết mức độ chắc chắn của model đối với từng detection.
show_labelsboolTrueHiển thị nhãn cho mỗi detection trong đầu ra trực quan. Giúp nhận biết ngay các đối tượng được phát hiện.

Câu hỏi thường gặp#

  • Để đếm đối tượng trong video bằng Ultralytics YOLO26, 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 thu video và khởi tạo bộ đếm đối tượng.
    4. Xử lý từng khung hình để theo dõi và đếm đối tượng trong vùng đã xác định.

    Sau đây là ví dụ đơn giản về cách đếm đối tượng 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", "yolo26n.pt")

    Để tìm hiểu cấu hình và tùy chọn nâng cao hơn, hãy xem giải pháp RegionCounter để đếm đối tượng đồng thời trong nhiều vùng.

  • Sử dụng Ultralytics YOLO26 để đếm đối tượng mang lại một số ưu điểm:

    1. Tối ưu hóa tài nguyên: Giải pháp này hỗ trợ 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: Giải pháp này 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 dựa trên thông tin: Giải pháp này cung cấp thông tin chuyên sâu có giá trị để 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à nhiều lĩnh vực khác.
    4. Xử lý thời gian thực: Kiến trúc YOLO26 hỗ trợ suy luận thời gian thực, phù hợp với luồng video trực tiếp và các ứng dụng nhạy cảm về thời gian.

    Để xem 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 đối tượng trong các vùng cụ thể.

  • Để đếm các lớp đối tượng cụ thể bằng Ultralytics YOLO26, bạn cần chỉ định các lớp quan tâm trong giai đoạn theo dõi. Dưới đây là ví dụ 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", "yolo26n.pt", [0, 2])

    Trong ví dụ này, classes_to_count=[0, 2] có nghĩa là đếm các đối tượng thuộc lớp 0 và 2 (ví dụ: người và ô tô 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.

  • Ultralytics YOLO26 mang lại một số ưu điểm so với các model 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:

    1. Tốc độ và hiệu quả: YOLO26 hỗ trợ xử lý thời gian thực, lý tưởng cho các ứng dụng cần suy luận tốc độ cao như giám sát và lái xe tự hành.
    2. Độ chính xác: Model cung cấp độ chính xác phát hiện và theo dõi hiện đại, giảm số lượng dự đoán dương tính giả và cải thiện độ tin cậy tổng thể của hệ thống.
    3. Dễ tích hợp: YOLO26 tích hợp liền mạch với nhiều nền tảng và thiết bị, bao gồm thiết bị di động và thiết bị edge, yếu tố thiết yếu đối với các ứng dụng AI hiện đại.
    4. Tính linh hoạt: Hỗ trợ các tác vụ phát hiện và phân đoạn, kết hợp với chế độ theo dõi, cùng các model có thể cấu hình để đáp ứng yêu cầu của từng trường hợp sử dụng.

    Xem Tài liệu YOLO26 của Ultralytics để tìm hiểu sâu hơn về các tính năng và so sánh hiệu năng.

  • Có, Ultralytics YOLO26 rất phù hợp với các ứng dụng nâng cao như phân tích đám đông và quản lý giao thông nhờ khả năng phát hiện thời gian thực, khả năng mở rộng và tính linh hoạt trong tích hợp. Các tính năng nâng cao cho phép theo dõi, đếm và phân loại đối tượng với độ chính xác cao trong môi trường biến động. Một số trường hợp sử dụng gồm:

    • Phân tích đám đông: Giám sát và quản lý các đám đông lớn, đảm bảo an toàn và tối ưu hóa luồng di chuyển của đám đông bằng đếm theo vùng.
    • Quản lý giao thông: Theo dõi và đếm phương tiện, phân tích mô hình giao thông và quản lý ùn tắc theo thời gian thực nhờ 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 với sản phẩm để tối ưu hóa cách bố trí 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à 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ả.

    Để tìm hiểu các ứng dụng chuyên biệt hơn, hãy khám phá Ultralytics Solutions, bộ công cụ toàn diện được thiết kế để giải quyết các thách thức thực tế trong thị giác máy tính.

Bình luận