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