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)