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ụ

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

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

Tên Kiểu Mặc định Sự miêu tả
source str 'ultralytics/assets' Thư mục nguồn cho hình ảnh hoặc video
conf float 0.25 Ngưỡng tin cậy đối tượng để phát hiện
iou float 0.7 giao điểm trên ngưỡng hợp nhất (IoU) cho NMS
imgsz int or tuple 640 Kích thước hình ảnh dưới dạng vô hướng hoặc danh sách (h, w), tức là (640, 480)
half bool False sử dụng độ chính xác một nửa (FP16)
device None or str None thiết bị để chạy, tức là thiết bị cuda = 0/1/2/3 hoặc thiết bị = CPU
max_det int 300 Số lần phát hiện tối đa trên mỗi hình ảnh
vid_stride bool False Sải bước tốc độ khung hình video
stream_buffer bool False đệm tất cả các khung hình phát trực tuyến (True) hoặc trả về khung hình gần đây nhất (False)
visualize bool False Trực quan hóa các tính năng của mô hình
augment bool False Áp dụng tăng cường hình ảnh cho các nguồn dự đoán
agnostic_nms bool False NMS bất khả tri lớp
classes list[int] None Lọc kết quả theo lớp, tức là lớp = 0 hoặc lớp = [0,2,3]
retina_masks bool False Sử dụng mặt nạ phân đoạn có độ phân giải cao
embed list[int] None Trả về các vectơ / nhúng tính năng từ các lớp đã cho


Đã tạo 2024-01-09, Cập nhật 2024-03-03
Tác giả: glenn-jocher (2), RizwanMunawar (2), AyushExel (1)

Ý kiến