Zum Inhalt springen

Objektverwischung mit Ultralytics YOLOv8 🚀

Was ist ObjektunschÀrfe?

ObjektunschÀrfe mit Ultralytics YOLOv8 ist die Anwendung eines UnschÀrfeeffekts auf bestimmte erkannte Objekte in einem Bild oder Video. Dies kann mit Hilfe der YOLOv8 ModellfÀhigkeiten erreicht werden, um Objekte in einer bestimmten Szene zu identifizieren und zu manipulieren.

Vorteile der Objektverwischung?

  • Schutz der PrivatsphĂ€re: Die UnschĂ€rfe von Objekten ist ein wirksames Mittel zum Schutz der PrivatsphĂ€re, indem sensible oder persönlich identifizierbare Informationen in Bildern oder Videos verborgen werden.
  • Selektive Fokussierung: YOLOv8 ermöglicht eine selektive UnschĂ€rfe, mit der die Nutzer/innen bestimmte Objekte anvisieren können, um ein Gleichgewicht zwischen PrivatsphĂ€re und dem Erhalt relevanter visueller Informationen zu gewĂ€hrleisten.
  • Verarbeitung in Echtzeit: YOLOv8 Die Effizienz der Software ermöglicht die Verwischung von Objekten in Echtzeit und eignet sich daher fĂŒr Anwendungen, die eine sofortige Verbesserung der PrivatsphĂ€re in dynamischen Umgebungen erfordern.

Objektverwischung mit YOLOv8 Beispiel

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

Argumente model.predict

Name Typ Standard Beschreibung
source str 'ultralytics/assets' Quellverzeichnis fĂŒr Bilder oder Videos
conf float 0.25 Objektkonfidenzschwelle fĂŒr die Erkennung
iou float 0.7 intersection over union (IoU) Schwelle fĂŒr NMS
imgsz int or tuple 640 BildgrĂ¶ĂŸe als Skalar oder (h, w) Liste, z.B. (640, 480)
half bool False halbe Genauigkeit verwenden (FP16)
device None or str None GerÀt, auf dem es laufen soll, d.h. cuda device=0/1/2/3 oder device=cpu
max_det int 300 maximale Anzahl von Erkennungen pro Bild
vid_stride bool False Video-Frame-Rate-Schritt
stream_buffer bool False alle Streaming-Frames puffern (True) oder den letzten Frame zurĂŒckgeben (False)
visualize bool False Modelleigenschaften visualisieren
augment bool False BildvergrĂ¶ĂŸerung auf Vorhersagequellen anwenden
agnostic_nms bool False klassenunabhÀngige NMS
classes list[int] None Ergebnisse nach Klassen filtern, d.h. classes=0, oder classes=[0,2,3]
retina_masks bool False hochauflösende Segmentierungsmasken verwenden
embed list[int] None Feature-Vektoren/Embeddings aus den gegebenen Schichten zurĂŒckgeben


Erstellt am 2024-01-09, Aktualisiert am 2024-01-15
Autoren: glenn-jocher (2), AyushExel (1), RizwanMunawar (1)

Kommentare