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

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

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

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

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

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

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



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

العينات

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

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

import cv2

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

model = YOLO("yolov8n-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()
from collections import defaultdict

import cv2

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

track_history = defaultdict(lambda: [])

model = YOLO("yolov8n-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 YOLOv8 ؟

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

مثل

import cv2

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

model = YOLO("yolov8n-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 YOLOv8 .

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

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

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

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

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

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

مثل

from collections import defaultdict

import cv2

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

track_history = defaultdict(lambda: [])

model = YOLO("yolov8n-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 مناسبة لتدريب نماذج YOLOv8 على سبيل المثال التجزئة والتتبع؟

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



تم الإنشاء 2023-12-18، تم التحديث 2024-07-14
المؤلفون: RizwanMunawar (2)، Glenn-jocher (10)، IvorZhu331 (1)

التعليقات