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)