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.



Observa: Object Cropping using Ultralytics YOLOv8

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

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

Argumentos model.predict

Argumenta Tipo Predefinição Descrição
source str 'ultralytics/assets' Especifica a fonte de dados para inferência. Pode ser um caminho de imagem, ficheiro de vídeo, diretório, URL ou ID de dispositivo para feeds em direto. Suporta uma vasta gama de formatos e fontes, permitindo uma aplicação flexível em diferentes tipos de entrada.
conf float 0.25 Define o limite mínimo de confiança para as detecções. Os objectos detectados com confiança abaixo deste limite serão ignorados. Ajustar este valor pode ajudar a reduzir os falsos positivos.
iou float 0.7 Limiar de Intersecção sobre União (IoU) para Supressão Não Máxima (NMS). Valores mais baixos resultam em menos detecções, eliminando caixas sobrepostas, o que é útil para reduzir duplicados.
imgsz int or tuple 640 Define o tamanho da imagem para inferência. Pode ser um único número inteiro 640 para redimensionamento quadrado ou uma tupla (altura, largura). O dimensionamento correto pode melhorar a precisão da deteção e a velocidade de processamento.
half bool False Permite a inferência de meia-precisão (FP16), que pode acelerar a inferência de modelos em GPUs compatíveis com um impacto mínimo na precisão.
device str None Especifica o dispositivo para inferência (por exemplo, cpu, cuda:0 ou 0). Permite que os usuários selecionem entre CPU, uma GPU específica ou outros dispositivos de computação para a execução do modelo.
max_det int 300 Número máximo de detecções permitidas por imagem. Limita o número total de objectos que o modelo pode detetar numa única inferência, evitando saídas excessivas em cenas densas.
vid_stride int 1 Avanço de fotogramas para entradas de vídeo. Permite saltar fotogramas em vídeos para acelerar o processamento à custa da resolução temporal. Um valor de 1 processa cada fotograma, valores mais altos saltam fotogramas.
stream_buffer bool False Determina se todos os quadros devem ser armazenados em buffer ao processar fluxos de vídeo (True), ou se o modelo deve retornar o quadro mais recente (False). Útil para aplicações em tempo real.
visualize bool False Ativa a visualização dos recursos do modelo durante a inferência, fornecendo informações sobre o que o modelo está "vendo". Útil para depuração e interpretação do modelo.
augment bool False Permite o aumento do tempo de teste (TTA) para previsões, melhorando potencialmente a robustez da deteção à custa da velocidade de inferência.
agnostic_nms bool False Permite a supressão não máxima (NMS) independente de classe, que mescla caixas sobrepostas de classes diferentes. Útil em cenários de deteção de várias classes em que a sobreposição de classes é comum.
classes list[int] None Filtra as previsões para um conjunto de IDs de classe. Apenas as detecções pertencentes às classes especificadas serão retornadas. Útil para se concentrar em objetos relevantes em tarefas de deteção de várias classes.
retina_masks bool False Usa máscaras de segmentação de alta resolução, se disponíveis no modelo. Isso pode melhorar a qualidade da máscara para tarefas de segmentação, fornecendo detalhes mais finos.
embed list[int] None Especifica as camadas a partir das quais se extraem vectores de características ou incorporações. Útil para tarefas a jusante como o agrupamento ou a pesquisa de semelhanças.


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

Comentários