Bỏ để qua phần nội dung

Cắt xén đối tượng bằng cách sử dụng Ultralytics YOLOv8 🚀

Cắt xén đối tượng là gì?

Cắt xén đối tượng với Ultralytics YOLOv8 liên quan đến việc cô lập và trích xuất các đối tượng được phát hiện cụ thể từ hình ảnh hoặc video. Các YOLOv8 Khả năng mô hình được sử dụng để xác định và phân định chính xác các đối tượng, cho phép cắt xén chính xác để phân tích hoặc thao tác thêm.

Ưu điểm của việc cắt xén đối tượng?

  • Phân tích tập trung: YOLOv8 Tạo điều kiện thuận lợi cho việc cắt xén đối tượng được nhắm mục tiêu, cho phép kiểm tra chuyên sâu hoặc xử lý các mục riêng lẻ trong một cảnh.
  • Giảm khối lượng dữ liệu: Bằng cách chỉ trích xuất các đối tượng có liên quan, cắt xén đối tượng giúp giảm thiểu kích thước dữ liệu, làm cho nó hiệu quả cho việc lưu trữ, truyền tải hoặc các tác vụ tính toán tiếp theo.
  • Độ chính xác nâng cao: YOLOv8Độ chính xác phát hiện đối tượng của đối tượng đảm bảo rằng các đối tượng bị cắt duy trì mối quan hệ không gian của chúng, bảo toàn tính toàn vẹn của thông tin hình ảnh để phân tích chi tiết.

Hình ảnh

Hành lý sân bay
Băng tải tại sân bay Vali Cắt xén bằng cách sử dụng Ultralytics YOLOv8
Vali Cắt xén tại băng chuyền sân bay bằng cách sử dụng Ultralytics YOLOv8

Cắt xén đối tượng bằng cách sử dụng YOLOv8 Ví dụ

import os

import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

model = YOLO("yolov8n.pt")
names = model.names

cap = cv2.VideoCapture("path/to/video/file.mp4")
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))

crop_dir_name = "ultralytics_crop"
if not os.path.exists(crop_dir_name):
    os.mkdir(crop_dir_name)

# Video writer
video_writer = cv2.VideoWriter("object_cropping_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

idx = 0
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    results = model.predict(im0, show=False)
    boxes = results[0].boxes.xyxy.cpu().tolist()
    clss = results[0].boxes.cls.cpu().tolist()
    annotator = Annotator(im0, line_width=2, example=names)

    if boxes is not None:
        for box, cls in zip(boxes, clss):
            idx += 1
            annotator.box_label(box, color=colors(int(cls), True), label=names[int(cls)])

            crop_obj = im0[int(box[1]) : int(box[3]), int(box[0]) : int(box[2])]

            cv2.imwrite(os.path.join(crop_dir_name, str(idx) + ".png"), crop_obj)

    cv2.imshow("ultralytics", im0)
    video_writer.write(im0)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
video_writer.release()
cv2.destroyAllWindows()

Lập luận model.predict

Lý lẽ Kiểu Mặc định Sự miêu tả
source str 'ultralytics/assets' Chỉ định nguồn dữ liệu để suy luận. Có thể là đường dẫn hình ảnh, tệp video, thư mục, URL hoặc ID thiết bị cho nguồn cấp dữ liệu trực tiếp. Hỗ trợ nhiều định dạng và nguồn, cho phép ứng dụng linh hoạt trên các loại đầu vào khác nhau.
conf float 0.25 Đặt ngưỡng tin cậy tối thiểu để phát hiện. Các đối tượng được phát hiện với độ tin cậy dưới ngưỡng này sẽ bị bỏ qua. Điều chỉnh giá trị này có thể giúp giảm dương tính giả.
iou float 0.7 Ngưỡng giao nhau trên công đoàn (IoU) cho triệt tiêu không tối đa (NMS). Giá trị thấp hơn dẫn đến ít phát hiện hơn bằng cách loại bỏ các hộp chồng chéo, hữu ích để giảm trùng lặp.
imgsz int or tuple 640 Xác định kích thước hình ảnh để suy luận. Có thể là một số nguyên duy nhất 640 để thay đổi kích thước hình vuông hoặc bộ (chiều cao, chiều rộng). Kích thước phù hợp có thể cải thiện độ chính xác phát hiện và tốc độ xử lý.
half bool False Cho phép suy luận nửa chính xác (FP16), có thể tăng tốc độ suy luận mô hình trên các GPU được hỗ trợ với tác động tối thiểu đến độ chính xác.
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, GPU cụ thể hoặc các thiết bị điện toán khác để thực thi mô hình.
max_det int 300 Số lần phát hiện tối đa được phép cho mỗi hình ảnh. Giới hạn tổng số đối tượng mà mô hình có thể phát hiện trong một suy luận duy nhất, ngăn chặn đầu ra quá mức trong các cảnh dày đặc.
vid_stride int 1 Sải chân khung hình cho đầu vào video. Cho phép bỏ qua các khung hình trong video để tăng tốc độ xử lý với chi phí phân giải tạm thời. Giá trị 1 xử lý mọi khung, giá trị cao hơn bỏ qua khung.
stream_buffer bool False Xác định xem tất cả các khung hình có nên được lưu vào bộ đệm khi xử lý luồng video hay không (True), hoặc nếu mô hình sẽ trả về khung hình gần đây nhất (False). Hữu ích cho các ứng dụng thời gian thực.
visualize bool False Kích hoạt trực quan hóa các tính năng của mô hình trong quá trình suy luận, cung cấp thông tin chi tiết về những gì mô hình đang "nhìn thấy". Hữu ích cho việc gỡ lỗi và giải thích mô hình.
augment bool False Cho phép tăng thời gian kiểm tra (TTA) cho các dự đoán, có khả năng cải thiện độ mạnh phát hiện với chi phí là tốc độ suy luận.
agnostic_nms bool False Cho phép ngăn chặn không tối đa bất khả tri lớp (NMS), kết hợp các hộp chồng chéo của các lớp khác nhau. Hữu ích trong các tình huống phát hiện nhiều lớp trong đó sự chồng chéo lớp là phổ biến.
classes list[int] None Lọc các dự đoán cho một tập hợp ID lớp. Chỉ những phát hiện thuộc các lớp được chỉ định mới được trả về. Hữu ích để tập trung vào các đối tượng có liên quan trong các nhiệm vụ phát hiện nhiều lớp.
retina_masks bool False Sử dụng mặt nạ phân đoạn có độ phân giải cao nếu có sẵn trong mô hình. Điều này có thể nâng cao chất lượng mặt nạ cho các nhiệm vụ phân đoạn, cung cấp chi tiết tốt hơn.
embed list[int] None Chỉ định các lớp để trích xuất các vectơ tính năng hoặc nhúng. Hữu ích cho các tác vụ xuôi dòng như phân cụm hoặc tìm kiếm tương tự.


Created 2024-01-09, Updated 2024-06-10
Authors: glenn-jocher (7), IvorZhu331 (1), RizwanMunawar (2), AyushExel (1)

Ý kiến