Перейти к содержимому

Обрезка объектов с помощью Ultralytics YOLOv8 🚀.

Что такое обрезка объектов?

Обрезка объектов с помощью Ultralytics YOLOv8 предполагает выделение и извлечение определенных обнаруженных объектов из изображения или видео. Возможности модели YOLOv8 используются для точной идентификации и очерчивания объектов, что позволяет точно обрезать их для дальнейшего анализа или манипуляций.

Преимущества обрезки объектов?

  • Целенаправленный анализ: YOLOv8 облегчает целенаправленное обрезание объектов, позволяя углубленно изучать или обрабатывать отдельные предметы в сцене.
  • Уменьшение объема данных: Извлекая только значимые объекты, обрезка объектов помогает минимизировать размер данных, делая их эффективными для хранения, передачи или последующих вычислительных задач.
  • Повышенная точность: точность обнаружения объектов YOLOv8 гарантирует, что обрезанные объекты сохранят свои пространственные отношения, сохраняя целостность визуальной информации для детального анализа.

Визуалы

Багаж в аэропорту
Конвейерная лента в аэропорту Обрезка чемоданов с использованием Ultralytics YOLOv8
Обрезка чемоданов на конвейерной ленте в аэропорту с использованием Ultralytics YOLOv8

Обрезка объектов с помощью YOLOv8 Пример

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

Аргументы model.predict

Имя Тип По умолчанию Описание
source str 'ultralytics/assets' исходный каталог для изображений или видео
conf float 0.25 порог доверия к объекту для обнаружения
iou float 0.7 Порог пересечения над объединением (IoU) для NMS
imgsz int or tuple 640 Размер изображения в виде скаляра или списка (h, w), то есть (640, 480)
half bool False Используй половинную точность (FP16)
device None or str None Устройство, на котором будет работать, например, cuda device=0/1/2/3 или device=cpu
max_det int 300 максимальное количество обнаружений на одно изображение
vid_stride bool False частота кадров видео
stream_buffer bool False Буферизируй все потоковые кадры (True) или возвращай самый последний кадр (False).
visualize bool False визуализируй особенности модели
augment bool False Применяй увеличение изображения для источников предсказаний
agnostic_nms bool False классово-диагностический NMS
classes list[int] None Фильтруй результаты по классам, то есть classes=0, или classes=[0,2,3]
retina_masks bool False используй маски для сегментации с высоким разрешением
embed list[int] None Возвращай векторы признаков/вкрапления из заданных слоев


Создано 2024-01-09, Обновлено 2024-03-03
Авторы: glenn-jocher (2), RizwanMunawar (2), AyushExel (1)

Комментарии