Saltar al contenido

Desenfoque de objetos mediante Ultralytics YOLOv8 馃殌

驴Qu茅 es el desenfoque de objeto?

El desenfoque de objetos con Ultralytics YOLOv8 consiste en aplicar un efecto de desenfoque a determinados objetos detectados en una imagen o v铆deo. Esto puede conseguirse utilizando las capacidades del modelo YOLOv8 para identificar y manipular objetos dentro de una escena determinada.



Observa: Object Blurring using Ultralytics YOLOv8

驴Ventajas del desenfoque de objetos?

  • Protecci贸n de la intimidad: El desenfoque de objetos es una herramienta eficaz para salvaguardar la privacidad ocultando informaci贸n sensible o de identificaci贸n personal en im谩genes o v铆deos.
  • Enfoque selectivo: YOLOv8 permite el desenfoque selectivo, lo que permite a los usuarios centrarse en objetos concretos, garantizando un equilibrio entre la privacidad y la conservaci贸n de la informaci贸n visual relevante.
  • Procesamiento en tiempo real: YOLOv8 La eficacia de 's permite el desenfoque de objetos en tiempo real, por lo que es adecuado para aplicaciones que requieren mejoras de privacidad sobre la marcha en entornos din谩micos.

Desenfoque de objetos mediante YOLOv8 Ejemplo

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

# Blur ratio
blur_ratio = 50

# Video writer
video_writer = cv2.VideoWriter("object_blurring_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

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):
            annotator.box_label(box, color=colors(int(cls), True), label=names[int(cls)])

            obj = im0[int(box[1]) : int(box[3]), int(box[0]) : int(box[2])]
            blur_obj = cv2.blur(obj, (blur_ratio, blur_ratio))

            im0[int(box[1]) : int(box[3]), int(box[0]) : int(box[2])] = blur_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


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

Comentarios