تخطي إلى المحتوى

تجزئة المثيل وتتبعه باستخدام Ultralytics YOLO11 🚀 🚀

ما هو تجزئة المثيل؟

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

يتوفر نوعان من تتبع تجزئة المثيل في الحزمة Ultralytics :

  • تقسيم المثيل مع كائنات الفئة: يتم تعيين لون فريد لكل كائن من كائنات الفئة للفصل البصري الواضح.

  • تجزئة المثيل مع مسارات الكائنات: يتم تمثيل كل مسار بلون مميز، مما يسهل التعرف عليه وتتبعه بسهولة.



شاهد: تجزئة المثيل مع تتبع الكائنات باستخدام Ultralytics YOLO11

العينات

تجزئة المثيل تجزئة المثيل + تتبع الكائنات
Ultralytics تجزئة المثيل Ultralytics تجزئة المثيل مع تتبع الكائنات
Ultralytics تجزئة المثيل 😍 Ultralytics تجزئة المثيل مع تتبع الكائنات 🔥

تجزئة المثيل وتتبعه

import cv2

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

model = YOLO("yolo11n-seg.pt")  # segmentation model
names = model.model.names
cap = cv2.VideoCapture("path/to/video/file.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter("instance-segmentation.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

while True:
    ret, im0 = cap.read()
    if not ret:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    results = model.predict(im0)
    annotator = Annotator(im0, line_width=2)

    if results[0].masks is not None:
        clss = results[0].boxes.cls.cpu().tolist()
        masks = results[0].masks.xy
        for mask, cls in zip(masks, clss):
            color = colors(int(cls), True)
            txt_color = annotator.get_txt_color(color)
            annotator.seg_bbox(mask=mask, mask_color=color, label=names[int(cls)], txt_color=txt_color)

    out.write(im0)
    cv2.imshow("instance-segmentation", im0)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

out.release()
cap.release()
cv2.destroyAllWindows()
import cv2

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

model = YOLO("yolo11n-seg.pt")  # segmentation model
cap = cv2.VideoCapture("path/to/video/file.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter("instance-segmentation-object-tracking.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

while True:
    ret, im0 = cap.read()
    if not ret:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    annotator = Annotator(im0, line_width=2)

    results = model.track(im0, persist=True)

    if results[0].boxes.id is not None and results[0].masks is not None:
        masks = results[0].masks.xy
        track_ids = results[0].boxes.id.int().cpu().tolist()

        for mask, track_id in zip(masks, track_ids):
            color = colors(int(track_id), True)
            txt_color = annotator.get_txt_color(color)
            annotator.seg_bbox(mask=mask, mask_color=color, label=str(track_id), txt_color=txt_color)

    out.write(im0)
    cv2.imshow("instance-segmentation-object-tracking", im0)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

out.release()
cap.release()
cv2.destroyAllWindows()

seg_bbox الحجج

الاسم النوع افتراضي الوصف
mask array None إحداثيات قناع التقسيم
mask_color RGB (255, 0, 255) لون القناع لكل مربع مجزأ
label str None تسمية الكائن المجزأ
txt_color RGB None لون التسمية للكائن المجزأ والمتعقب

ملاحظة

لأية استفسارات، لا تتردد في نشر أسئلتك في قسم المشكلاتUltralytics أو قسم المناقشة المذكور أدناه.

الأسئلة الشائعة

كيف يمكنني إجراء تجزئة المثيل باستخدام Ultralytics YOLO11 ؟

لإجراء تجزئة المثيل باستخدام Ultralytics YOLO11 ، قم بتهيئة نموذج YOLO بنسخة تجزئة من YOLO11 ومعالجة إطارات الفيديو من خلاله. إليك مثال كود مبسط

مثال على ذلك

import cv2

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

model = YOLO("yolo11n-seg.pt")  # segmentation model
cap = cv2.VideoCapture("path/to/video/file.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter("instance-segmentation.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

while True:
    ret, im0 = cap.read()
    if not ret:
        break

    results = model.predict(im0)
    annotator = Annotator(im0, line_width=2)

    if results[0].masks is not None:
        clss = results[0].boxes.cls.cpu().tolist()
        masks = results[0].masks.xy
        for mask, cls in zip(masks, clss):
            annotator.seg_bbox(mask=mask, mask_color=colors(int(cls), True), det_label=model.model.names[int(cls)])

    out.write(im0)
    cv2.imshow("instance-segmentation", im0)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

out.release()
cap.release()
cv2.destroyAllWindows()

تعرف على المزيد حول تجزئة المثيل في الدليلUltralytics YOLO11 .

ما الفرق بين تجزئة المثيل وتتبع الكائن في Ultralytics YOLO11 ؟

يُحدّد تجزئة المثيل الكائنات الفردية داخل الصورة ويحددها، مع إعطاء كل كائن تسمية وقناعًا فريدًا. يعمل تتبع الكائنات على توسيع ذلك من خلال تعيين تسميات متسقة للكائنات عبر إطارات الفيديو، مما يسهل التتبع المستمر لنفس الكائنات مع مرور الوقت. تعرف على المزيد حول الفروق في وثائقUltralytics YOLO11 .

لماذا يجب أن أستخدم Ultralytics YOLO11 للتجزئة والتتبع على سبيل المثال بدلاً من النماذج الأخرى مثل Mask R-CNN أو Faster R-CNN؟

Ultralytics YOLO11 يوفر أداءً فوريًا ودقة فائقة وسهولة في الاستخدام مقارنةً بالنماذج الأخرى مثل Mask R-CNN أو Faster R-CNN. YOLO11 يوفر تكاملاً سلسًا مع Ultralytics HUB، مما يسمح للمستخدمين بإدارة النماذج ومجموعات البيانات وخطوط أنابيب التدريب بكفاءة. اكتشف المزيد حول فوائد YOLO11 في مدونةUltralytics .

كيف يمكنني تنفيذ تتبع الكائنات باستخدام Ultralytics YOLO11 ؟

لتنفيذ تتبُّع الكائنات، استخدم أداة model.track والتأكد من تعيين معرف كل كائن بشكل متسق عبر الإطارات. فيما يلي مثال بسيط:

مثال على ذلك

import cv2

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

model = YOLO("yolo11n-seg.pt")  # segmentation model
cap = cv2.VideoCapture("path/to/video/file.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter("instance-segmentation-object-tracking.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

while True:
    ret, im0 = cap.read()
    if not ret:
        break

    annotator = Annotator(im0, line_width=2)
    results = model.track(im0, persist=True)

    if results[0].boxes.id is not None and results[0].masks is not None:
        masks = results[0].masks.xy
        track_ids = results[0].boxes.id.int().cpu().tolist()

        for mask, track_id in zip(masks, track_ids):
            annotator.seg_bbox(mask=mask, mask_color=colors(track_id, True), track_label=str(track_id))

    out.write(im0)
    cv2.imshow("instance-segmentation-object-tracking", im0)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

out.release()
cap.release()
cv2.destroyAllWindows()

اكتشف المزيد في قسم تجزئة المثيل وتتبعه.

هل هناك أي مجموعات بيانات مقدمة من Ultralytics مناسبة لتدريب نماذج YOLO11 على سبيل المثال التجزئة والتتبع؟

نعم، يقدم Ultralytics العديد من مجموعات البيانات المناسبة لتدريب نماذج YOLO11 ، بما في ذلك مجموعات بيانات التجزئة والتتبع. يمكن العثور على أمثلة لمجموعات البيانات وهياكلها وتعليمات استخدامها في وثائقUltralytics Datasets.

📅 تم إنشاؤها قبل 12 شهرًا ✏️ تم التحديث منذ 10 أيام

التعليقات