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)