تجزئة المثيل وتتبعه باستخدام Ultralytics YOLO11 🚀 🚀
ما هو تجزئة المثيل؟
Ultralytics YOLO11 يتضمن تجزئة المثيل تحديد وتحديد الكائنات الفردية في الصورة، مما يوفر فهماً مفصلاً للتوزيع المكاني. وخلافاً للتجزئة الدلالية، فإنه يقوم بتسمية كل كائن وتحديده بدقة، وهو أمر بالغ الأهمية لمهام مثل اكتشاف الكائنات والتصوير الطبي.
يتوفر نوعان من تتبع تجزئة المثيل في الحزمة Ultralytics :
-
تقسيم المثيل مع كائنات الفئة: يتم تعيين لون فريد لكل كائن من كائنات الفئة للفصل البصري الواضح.
-
تجزئة المثيل مع مسارات الكائنات: يتم تمثيل كل مسار بلون مميز، مما يسهل التعرف عليه وتتبعه بسهولة.
شاهد: تجزئة المثيل مع تتبع الكائنات باستخدام Ultralytics YOLO11
العينات
تجزئة المثيل | تجزئة المثيل + تتبع الكائنات |
---|---|
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.