Salta para o conteúdo

Desfocagem de objectos utilizando Ultralytics YOLOv8 🚀

O que é a desfocagem de objectos?

Desfocagem de objectos com Ultralytics YOLOv8 envolve a aplicação de um efeito de desfocagem a objectos específicos detectados numa imagem ou vídeo. Isto pode ser conseguido utilizando as capacidades do modelo YOLOv8 para identificar e manipular objectos numa determinada cena.

Vantagens da desfocagem de objectos?

  • Proteção da privacidade: A desfocagem de objectos é uma ferramenta eficaz para salvaguardar a privacidade, ocultando informações sensíveis ou pessoalmente identificáveis em imagens ou vídeos.
  • Focagem selectiva: YOLOv8 permite uma desfocagem selectiva, permitindo aos utilizadores visar objectos específicos, assegurando um equilíbrio entre privacidade e retenção de informação visual relevante.
  • Processamento em tempo real: YOLOv8 A eficiência do software permite a desfocagem de objectos em tempo real, tornando-o adequado para aplicações que requerem melhorias de privacidade em tempo real em ambientes dinâmicos.

Desfocagem de objectos utilizando YOLOv8 Exemplo

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

Nome Tipo Predefinição Descrição
source str 'ultralytics/assets' diretório de origem para imagens ou vídeos
conf float 0.25 limiar de confiança do objeto para deteção
iou float 0.7 limiar de intersecção sobre a união (IoU) para os NMS
imgsz int or tuple 640 tamanho da imagem como escalar ou lista (h, w), ou seja, (640, 480)
half bool False utiliza meia precisão (FP16)
device None or str None dispositivo para execução, ou seja, dispositivo cuda=0/1/2/3 ou dispositivo=cpu
max_det int 300 número máximo de detecções por imagem
vid_stride bool False taxa de fotogramas do vídeo
stream_buffer bool False guarda todos os fotogramas de transmissão (True) ou devolve o fotograma mais recente (False)
visualize bool False visualiza as características do modelo
augment bool False aplica o aumento de imagem às fontes de previsão
agnostic_nms bool False NMS com diagnóstico de classe
classes list[int] None filtra os resultados por classe, ou seja, classes=0, ou classes=[0,2,3]
retina_masks bool False utiliza máscaras de segmentação de alta resolução
embed list[int] None devolve vectores de características/embeddings de determinadas camadas


Criado em 2024-01-09, Atualizado em 2024-01-15
Autores: glenn-jocher (2), AyushExel (1), chr043416@gmail.com (1)

Comentários