Vai al contenuto

Sfocatura degli oggetti con Ultralytics YOLOv8 🚀

Che cos'è la sfocatura degli oggetti?

Sfocatura degli oggetti con Ultralytics YOLOv8 consiste nell'applicare un effetto di sfocatura a specifici oggetti rilevati in un'immagine o in un video. Questo può essere ottenuto utilizzando le funzionalità del modello YOLOv8 per identificare e manipolare gli oggetti all'interno di una determinata scena.

Vantaggi della sfocatura degli oggetti?

  • Protezione della privacy: La sfocatura degli oggetti è uno strumento efficace per salvaguardare la privacy nascondendo informazioni sensibili o di identificazione personale nelle immagini o nei video.
  • Messa a fuoco selettiva: YOLOv8 permette di sfocare in modo selettivo, consentendo agli utenti di mirare a oggetti specifici, garantendo un equilibrio tra privacy e conservazione delle informazioni visive rilevanti.
  • Elaborazione in tempo reale: YOLOv8 L'efficienza del sistema consente di sfocare gli oggetti in tempo reale, rendendolo adatto alle applicazioni che richiedono miglioramenti della privacy al volo in ambienti dinamici.

Esempio di sfocatura degli oggetti con YOLOv8

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

Argomenti model.predict

Nome Tipo Predefinito Descrizione
source str 'ultralytics/assets' directory di origine per le immagini o i video
conf float 0.25 soglia di fiducia dell'oggetto per il rilevamento
iou float 0.7 soglia di intersezione su unione (IoU) per gli NMS
imgsz int or tuple 640 dimensione dell'immagine come scalare o come elenco (h, w), ad esempio (640, 480)
half bool False usa la mezza precisione (FP16)
device None or str None dispositivo su cui eseguire, ad esempio cuda device=0/1/2/3 o device=cpu
max_det int 300 numero massimo di rilevamenti per immagine
vid_stride bool False passo della frequenza dei fotogrammi video
stream_buffer bool False bufferizza tutti i fotogrammi dello streaming (True) o restituisce il fotogramma più recente (False)
visualize bool False visualizzare le caratteristiche del modello
augment bool False applicare l'aumento dell'immagine alle fonti di predizione
agnostic_nms bool False NMS con compatibilità di classe
classes list[int] None filtrare i risultati per classe, ad esempio classi=0 o classi=[0,2,3].
retina_masks bool False utilizzare maschere di segmentazione ad alta risoluzione
embed list[int] None restituisce vettori di caratteristiche/embeddings da determinati livelli


Creato 2024-01-09, Aggiornato 2024-01-15
Autori: glenn-jocher (2), AyushExel (1), RizwanMunawar (1)

Commenti