انتقل إلى المحتوى

تعتيم الكائن باستخدام Ultralytics YOLOv8 🚀

ما هو تعتيم الكائن؟

تعتيم الكائن باستخدام Ultralytics YOLOv8 يتضمن تطبيق تأثير تمويه على كائنات محددة تم اكتشافها في صورة أو فيديو. يمكن تحقيق ذلك باستخدام YOLOv8 قدرات نموذجية لتحديد الكائنات ومعالجتها داخل مشهد معين.



شاهد: Object Blurring using Ultralytics YOLOv8

مزايا طمس الكائن؟

  • حماية الخصوصية: يعد تعتيم الكائن أداة فعالة لحماية الخصوصية عن طريق إخفاء المعلومات الحساسة أو الشخصية في الصور أو مقاطع الفيديو.
  • التركيز الانتقائي: YOLOv8 يسمح بالتعتيم الانتقائي ، مما يمكن المستخدمين من استهداف كائنات محددة ، مما يضمن التوازن بين الخصوصية والاحتفاظ بالمعلومات المرئية ذات الصلة.
  • المعالجة في الوقت الحقيقي: YOLOv8، تتيح الكفاءة تعتيم الكائن في الوقت الفعلي، مما يجعله مناسبا للتطبيقات التي تتطلب تحسينات خصوصية سريعة في البيئات الديناميكية.

تعتيم الكائن باستخدام YOLOv8 مثل

import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

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

الحجج model.predict

اسم نوع افتراضي وصف
source str 'ultralytics/assets' الدليل المصدر للصور أو مقاطع الفيديو
conf float 0.25 عتبة ثقة الكائن للكشف
iou float 0.7 التقاطع على عتبة الاتحاد (IoU) ل NMS
imgsz int or tuple 640 حجم الصورة كعدد قياسي أو قائمة (H ، W) ، أي (640 ، 480)
half bool False استخدام نصف الدقة (FP16)
device None or str None جهاز للتشغيل ، أي جهاز cuda = 0/1/2/3 أو الجهاز = وحدة المعالجة المركزية
max_det int 300 الحد الأقصى لعدد الاكتشافات لكل صورة
vid_stride bool False خطوة معدل إطارات الفيديو
stream_buffer bool False التخزين المؤقت لجميع إطارات البث (صواب) أو إرجاع أحدث إطار (خطأ)
visualize bool False تصور ميزات النموذج
augment bool False تطبيق تكبير الصورة على مصادر التنبؤ
agnostic_nms bool False NMS اللاأدري الطبقي
classes list[int] None تصفية النتائج حسب الفئة ، أي الفئات = 0 ، أو الفئات = [0،2،3]
retina_masks bool False استخدام أقنعة تجزئة عالية الدقة
embed list[int] None إرجاع متجهات / تضمينات المعالم من طبقات معينة


Created 2024-01-09, Updated 2024-06-13
Authors: RizwanMunawar (1), glenn-jocher (5), IvorZhu331 (1), AyushExel (1)

التعليقات