Saltar al contenido

Recorte de objetos con Ultralytics YOLOv8 馃殌

驴Qu茅 es el recorte de objetos?

El recorte de objetos con Ultralytics YOLOv8 consiste en aislar y extraer objetos espec铆ficos detectados de una imagen o v铆deo. Las capacidades del modelo YOLOv8 se utilizan para identificar y delinear con precisi贸n los objetos, lo que permite un recorte preciso para su posterior an谩lisis o manipulaci贸n.

驴Ventajas del recorte de objetos?

  • An谩lisis focalizado: YOLOv8 facilita el recorte focalizado de objetos, lo que permite examinar o procesar en profundidad elementos individuales de una escena.
  • Volumen de datos reducido: Al extraer s贸lo los objetos relevantes, el recorte de objetos ayuda a minimizar el tama帽o de los datos, haci茅ndolos eficientes para su almacenamiento, transmisi贸n o tareas computacionales posteriores.
  • Precisi贸n mejorada: la precisi贸n de detecci贸n de objetos de YOLOv8 garantiza que los objetos recortados mantengan sus relaciones espaciales, preservando la integridad de la informaci贸n visual para un an谩lisis detallado.

Visuales

Equipaje de aeropuerto
Cinta transportadora en el aeropuerto Recorte de maletas utilizando Ultralytics YOLOv8
Recorte de maletas en la cinta transportadora de un aeropuerto utilizando Ultralytics YOLOv8

Recorte de objetos mediante YOLOv8 Ejemplo

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

Argumento Tipo Por defecto Descripci贸n
source str 'ultralytics/assets' Especifica la fuente de datos para la inferencia. Puede ser una ruta de imagen, un archivo de v铆deo, un directorio, una URL o el ID de un dispositivo para transmisiones en directo. Admite una amplia gama de formatos y fuentes, lo que permite una aplicaci贸n flexible en distintos tipos de entrada.
conf float 0.25 Establece el umbral m铆nimo de confianza para las detecciones. Los objetos detectados con una confianza inferior a este umbral ser谩n descartados. Ajustar este valor puede ayudar a reducir los falsos positivos.
iou float 0.7 Umbral de Intersecci贸n Sobre Uni贸n (IoU) para la Supresi贸n No M谩xima (NMS). Los valores m谩s bajos dan lugar a menos detecciones al eliminar las cajas superpuestas, lo que resulta 煤til para reducir los duplicados.
imgsz int or tuple 640 Define el tama帽o de la imagen para la inferencia. Puede ser un 煤nico n煤mero entero 640 para un redimensionamiento cuadrado o una tupla (alto, ancho). Un tama帽o adecuado puede mejorar la precisi贸n de la detecci贸n y la velocidad de procesamiento.
half bool False Permite la inferencia de media precisi贸n (FP16), que puede acelerar la inferencia del modelo en las GPU compatibles con un impacto m铆nimo en la precisi贸n.
device str None Especifica el dispositivo para la inferencia (por ejemplo, cpu, cuda:0 o 0). Permite a los usuarios seleccionar entre la CPU, una GPU espec铆fica u otros dispositivos de c谩lculo para la ejecuci贸n del modelo.
max_det int 300 N煤mero m谩ximo de detecciones permitidas por imagen. Limita el n煤mero total de objetos que el modelo puede detectar en una sola inferencia, evitando salidas excesivas en escenas densas.
vid_stride int 1 Salto de fotogramas para entradas de v铆deo. Permite saltar fotogramas en los v铆deos para acelerar el procesamiento a costa de la resoluci贸n temporal. Un valor de 1 procesa cada fotograma, valores superiores omiten fotogramas.
stream_buffer bool False Determina si todos los fotogramas deben almacenarse en la memoria intermedia al procesar secuencias de v铆deo (True), o si el modelo debe devolver el fotograma m谩s reciente (False). 脷til para aplicaciones en tiempo real.
visualize bool False Activa la visualizaci贸n de las caracter铆sticas del modelo durante la inferencia, proporcionando informaci贸n sobre lo que el modelo est谩 "viendo". 脷til para la depuraci贸n y la interpretaci贸n del modelo.
augment bool False Permite el aumento del tiempo de prueba (TTA) para las predicciones, mejorando potencialmente la robustez de la detecci贸n a costa de la velocidad de inferencia.
agnostic_nms bool False Activa la Supresi贸n No M谩xima (NMS) agn贸stica de clases, que fusiona las cajas superpuestas de clases diferentes. 脷til en escenarios de detecci贸n multiclase en los que el solapamiento de clases es habitual.
classes list[int] None Filtra las predicciones a un conjunto de ID de clase. S贸lo se devolver谩n las detecciones que pertenezcan a las clases especificadas. 脷til para centrarse en objetos relevantes en tareas de detecci贸n multiclase.
retina_masks bool False Utiliza m谩scaras de segmentaci贸n de alta resoluci贸n si est谩n disponibles en el modelo. Esto puede mejorar la calidad de la m谩scara para las tareas de segmentaci贸n, proporcionando detalles m谩s finos.
embed list[int] None Especifica las capas de las que extraer vectores de caracter铆sticas o incrustaciones. 脷til para tareas posteriores como la agrupaci贸n o la b煤squeda de similitudes.


Creado 2024-01-09, Actualizado 2024-05-18
Autores: glenn-jocher (4), RizwanMunawar (2), AyushExel (1)

Comentarios