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.

¿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

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
import cv2

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


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

Comentarios