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

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

Nombre Tipo Por defecto Descripción
source str 'ultralytics/assets' directorio fuente de imágenes o vídeos
conf float 0.25 umbral de confianza del objeto para la detección
iou float 0.7 umbral de intersección sobre unión (IoU) para NMS
imgsz int or tuple 640 tamaño de la imagen como escalar o lista (h, w), por ejemplo (640, 480)
half bool False utiliza media precisión (FP16)
device None or str None dispositivo en el que se va a ejecutar, es decir, cuda device=0/1/2/3 o device=cpu
max_det int 300 número máximo de detecciones por imagen
vid_stride bool False velocidad de fotogramas de vídeo
stream_buffer bool False almacenar en la memoria intermedia todos los fotogramas de la transmisión (Verdadero) o devolver el fotograma más reciente (Falso)
visualize bool False visualizar las características del modelo
augment bool False aplicar el aumento de imagen a las fuentes de predicción
agnostic_nms bool False NMS de clase agnóstica
classes list[int] None filtrar los resultados por clase, es decir, classes=0, o classes=[0,2,3]
retina_masks bool False utilizar máscaras de segmentación de alta resolución
embed list[int] None devuelve vectores/incrustaciones de características de las capas dadas


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

Comentarios