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

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

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

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

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

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

صور

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

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

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

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' الدليل المصدر للصور أو مقاطع الفيديو
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 إرجاع متجهات / تضمينات المعالم من طبقات معينة


تم النشر في 2024-01-09, اخر تحديث 2024-03-03
المؤلفون: جلين جوشر (2) ، رضوان منور (2) ، أيوشكسيل (1)

التعليقات