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

اقتصاص الكائن باستخدام Ultralytics YOLOv8 🚀

ما هو اقتصاص الكائن؟

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



شاهد: Object Cropping using Ultralytics YOLOv8

مزايا اقتصاص الكائن؟

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

صور

أمتعة المطار
الحزام الناقل في حقائب المطار الاقتصاص باستخدام Ultralytics YOLOv8
حقائب الاقتصاص في الحزام الناقل المطار باستخدام Ultralytics YOLOv8

اقتصاص الكائن باستخدام YOLOv8 مثل

import os

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

crop_dir_name = "ultralytics_crop"
if not os.path.exists(crop_dir_name):
    os.mkdir(crop_dir_name)

# Video writer
video_writer = cv2.VideoWriter("object_cropping_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

idx = 0
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):
            idx += 1
            annotator.box_label(box, color=colors(int(cls), True), label=names[int(cls)])

            crop_obj = im0[int(box[1]) : int(box[3]), int(box[0]) : int(box[2])]

            cv2.imwrite(os.path.join(crop_dir_name, str(idx) + ".png"), crop_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' يحدد مصدر البيانات للاستدلال. يمكن أن يكون مسار صورة أو ملف فيديو أو دليل أو عنوان URL أو معرف جهاز للخلاصات المباشرة. يدعم مجموعة واسعة من التنسيقات والمصادر ، مما يتيح التطبيق المرن عبر أنواع مختلفة من المدخلات.
conf float 0.25 يعين الحد الأدنى للثقة للاكتشافات. سيتم تجاهل الكائنات المكتشفة بثقة أقل من هذا الحد. يمكن أن يساعد ضبط هذه القيمة في تقليل الإيجابيات الخاطئة.
iou float 0.7 عتبة التقاطع فوق الاتحاد (IoU) للقمع غير الأقصى (NMS). تؤدي القيم المنخفضة إلى عدد أقل من الاكتشافات عن طريق إزالة المربعات المتداخلة ، وهو أمر مفيد لتقليل التكرارات.
imgsz int or tuple 640 يحدد حجم الصورة للاستدلال. يمكن أن يكون عددا صحيحا واحدا 640 لتغيير حجم المربع أو مجموعة (الارتفاع والعرض). يمكن أن يؤدي التحجيم المناسب إلى تحسين دقة الكشف وسرعة المعالجة.
half bool False تمكين الاستدلال بنصف الدقة (FP16) ، والذي يمكنه تسريع استدلال النموذج على وحدات معالجة الرسومات المدعومة بأقل تأثير على الدقة.
device str None يحدد جهاز الاستدلال (على سبيل المثال ، cpu, cuda:0 أو 0). يسمح للمستخدمين بالاختيار بين وحدة المعالجة المركزية أو وحدة معالجة رسومات معينة أو أجهزة حوسبة أخرى لتنفيذ النموذج.
max_det int 300 الحد الأقصى لعدد الاكتشافات المسموح بها لكل صورة. يحد من العدد الإجمالي للكائنات التي يمكن للنموذج اكتشافها في استدلال واحد، مما يمنع المخرجات الزائدة في المشاهد الكثيفة.
vid_stride int 1 خطوة الإطار لمدخلات الفيديو. يسمح بتخطي الإطارات في مقاطع الفيديو لتسريع المعالجة على حساب الدقة الزمنية. قيمة 1 تعالج كل إطار ، القيم الأعلى تتخطى الإطارات.
stream_buffer bool False يحدد ما إذا كان يجب تخزين كل الإطارات مؤقتا عند معالجة تدفقات الفيديو (True)، أو إذا كان يجب أن يعيد النموذج أحدث إطار (False). مفيد للتطبيقات في الوقت الحقيقي.
visualize bool False ينشط تصور ميزات النموذج أثناء الاستدلال ، مما يوفر رؤى حول ما "يراه" النموذج. مفيد لتصحيح الأخطاء وتفسير النموذج.
augment bool False يتيح زيادة وقت الاختبار (TTA) للتنبؤات ، مما قد يؤدي إلى تحسين متانة الكشف على حساب سرعة الاستدلال.
agnostic_nms bool False تمكين منع عدم الحد الأقصى (NMS) اللاأدري للفئة ، والذي يدمج المربعات المتداخلة لفئات مختلفة. مفيد في سيناريوهات الكشف متعددة الفئات حيث يكون تداخل الفئة شائعا.
classes list[int] None تصفية التوقعات إلى مجموعة من معرفات الفئة. سيتم إرجاع الاكتشافات التي تنتمي إلى الفئات المحددة فقط. مفيد للتركيز على الكائنات ذات الصلة في مهام الكشف متعددة الفئات.
retina_masks bool False يستخدم أقنعة تجزئة عالية الدقة إذا كانت متوفرة في النموذج. يمكن أن يؤدي ذلك إلى تحسين جودة القناع لمهام التجزئة ، مما يوفر تفاصيل أدق.
embed list[int] None يحدد الطبقات التي سيتم استخراج متجهات المعالم أو الدمجات منها. مفيد للمهام النهائية مثل التجميع أو البحث عن التشابه.


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

التعليقات