Salta para o conteúdo

Recorte de objectos utilizando Ultralytics YOLOv8 🚀

O que é o Recorte de objectos?

O recorte de objectos com Ultralytics YOLOv8 envolve o isolamento e a extração de objectos específicos detectados de uma imagem ou vídeo. As capacidades do modelo YOLOv8 são utilizadas para identificar e delinear com precisão os objectos, permitindo um recorte preciso para análise ou manipulação posterior.

Vantagens do corte de objectos?

  • Análise focada: YOLOv8 facilita o recorte de objectos específicos, permitindo um exame ou processamento aprofundado de itens individuais numa cena.
  • Reduz o volume de dados: Ao extrair apenas objectos relevantes, o recorte de objectos ajuda a minimizar o tamanho dos dados, tornando-os eficientes para armazenamento, transmissão ou tarefas computacionais subsequentes.
  • Precisão melhorada: A precisão da deteção de objectos do YOLOv8 assegura que os objectos recortados mantêm as suas relações espaciais, preservando a integridade da informação visual para uma análise detalhada.

Visuais

Bagagem de aeroporto
Tapete rolante no aeroporto Malas a serem cortadas usando Ultralytics YOLOv8
Recolha de malas no tapete rolante do aeroporto utilizando Ultralytics YOLOv8

Recorte de objectos utilizando YOLOv8 Exemplo

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

Argumentos model.predict

Nome Tipo Predefinição Descrição
source str 'ultralytics/assets' diretório de origem para imagens ou vídeos
conf float 0.25 limiar de confiança do objeto para deteção
iou float 0.7 limiar de intersecção sobre a união (IoU) para os NMS
imgsz int or tuple 640 tamanho da imagem como escalar ou lista (h, w), ou seja, (640, 480)
half bool False utiliza meia precisão (FP16)
device None or str None dispositivo para execução, ou seja, dispositivo cuda=0/1/2/3 ou dispositivo=cpu
max_det int 300 número máximo de detecções por imagem
vid_stride bool False taxa de fotogramas do vídeo
stream_buffer bool False guarda todos os fotogramas de transmissão (True) ou devolve o fotograma mais recente (False)
visualize bool False visualiza as características do modelo
augment bool False aplica o aumento de imagem a fontes de previsão
agnostic_nms bool False NMS com diagnóstico de classe
classes list[int] None filtra os resultados por classe, ou seja, classes=0, ou classes=[0,2,3]
retina_masks bool False utiliza máscaras de segmentação de alta resolução
embed list[int] None devolve vectores de características/embeddings de determinadas camadas


Criado em 2024-01-09, Atualizado em 2024-03-03
Autores: glenn-jocher (2), RizwanMunawar (2), AyushExel (1)

Comentários