Segmentation et suivi des instances à l'aide de Ultralytics YOLOv8 🚀
Qu'est-ce que la segmentation des instances ?
Ultralytics YOLOv8 La segmentation d'instance consiste à identifier et à délimiter des objets individuels dans une image, ce qui permet de comprendre en détail la distribution spatiale. Contrairement à la segmentation sémantique, elle étiquette de façon unique et délimite précisément chaque objet, ce qui est crucial pour des tâches telles que la détection d'objets et l'imagerie médicale.
Il existe deux types de suivi de la segmentation des instances disponibles sur le site Ultralytics :
-
Segmentation des instances à l'aide d'objets de classe : Chaque objet de classe se voit attribuer une couleur unique pour une séparation visuelle claire.
-
Segmentation des instances avec des traces d'objets : Chaque trace est représentée par une couleur distincte, ce qui facilite l'identification et le suivi.
Regarde : Segmentation d'instances avec suivi d'objets à l'aide de Ultralytics YOLOv8
Échantillons
Segmentation des instances | Segmentation des instances + suivi des objets |
---|---|
Ultralytics Segmentation des instances 😍 | Ultralytics Segmentation d'instances avec suivi d'objets 🔥 |
Segmentation et suivi des instances
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):
annotator.seg_bbox(mask=mask,
mask_color=colors(int(cls), True),
det_label=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()
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
from collections import defaultdict
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):
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()
seg_bbox
Arguments
Nom | Type | Défaut | Description |
---|---|---|---|
mask |
array |
None |
Coordonnées du masque de segmentation |
mask_color |
tuple |
(255, 0, 255) |
Couleur du masque pour chaque boîte segmentée |
det_label |
str |
None |
Étiquette pour l'objet segmenté |
track_label |
str |
None |
Étiquette pour l'objet segmenté et suivi |
Note
Pour toute demande de renseignements, n'hésite pas à poster tes questions dans la section des problèmes deUltralytics ou dans la section de discussion mentionnée ci-dessous.