Overslaan naar inhoud

Objecten vervagen met Ultralytics YOLOv8 🚀

Wat is objectvervaging?

Objecten vervagen met Ultralytics YOLOv8 Hierbij wordt een vervagingseffect toegepast op specifieke gedetecteerde objecten in een afbeelding of video. Dit kan worden bereikt door gebruik te maken van de mogelijkheden van het YOLOv8 model om objecten in een bepaalde scène te identificeren en te manipuleren.

Voordelen van objectvervaging?

  • Privacybescherming: Objectvervaging is een effectief hulpmiddel om privacy te beschermen door gevoelige of persoonlijk identificeerbare informatie in afbeeldingen of video's te verbergen.
  • Selectieve focus: YOLOv8 maakt selectieve vervaging mogelijk, zodat gebruikers zich kunnen richten op specifieke objecten, zodat er een balans is tussen privacy en het behouden van relevante visuele informatie.
  • Real-time verwerking: YOLOv8 De efficiëntie maakt objectvervaging in realtime mogelijk, waardoor het geschikt is voor toepassingen die direct privacyverbeteringen vereisen in dynamische omgevingen.

Object vervagen met YOLOv8 Voorbeeld

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

Argumenten model.predict

Naam Type Standaard Beschrijving
source str 'ultralytics/assets' bronmap voor afbeeldingen of video's
conf float 0.25 objectbetrouwbaarheidsdrempel voor detectie
iou float 0.7 intersectie over unie (IoU) drempel voor NMS
imgsz int or tuple 640 afbeeldingsgrootte als scalair of (h, w) lijst, bijv. (640, 480)
half bool False gebruik halve precisie (FP16)
device None or str None apparaat om op te draaien, bijvoorbeeld cuda device=0/1/2/3 of device=cpu
max_det int 300 maximum aantal detecties per afbeelding
vid_stride bool False video frame-rate stap
stream_buffer bool False buffer alle streaming frames (True) of retourneer het meest recente frame (False)
visualize bool False modeleigenschappen visualiseren
augment bool False beeldvergroting toepassen op voorspellingsbronnen
agnostic_nms bool False klassennagnostische NMS
classes list[int] None filter resultaten op klasse, d.w.z. classes=0, of classes=[0,2,3]
retina_masks bool False segmentatiemaskers met hoge resolutie gebruiken
embed list[int] None retourneer kenmerkvectoren/embeddingen van gegeven lagen


Gemaakt op 2024-01-09, Bijgewerkt op 2024-01-15
Auteurs: glenn-jocher (2), AyushExel (1), RizwanMunawar (1)

Reacties