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