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 |
---|
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 |