Segmenteren en volgen van instanties met behulp van Ultralytics YOLOv8 🚀
Wat is Instance Segmentatie?
Ultralytics YOLOv8 Bij segmentatie worden individuele objecten in een afbeelding geïdentificeerd en omlijnd, waardoor een gedetailleerd inzicht wordt verkregen in de ruimtelijke verdeling. In tegenstelling tot semantische segmentatie wordt elk object uniek gelabeld en nauwkeurig afgebakend, wat cruciaal is voor taken als objectdetectie en medische beeldvorming.
Er zijn twee soorten instance segmentation tracking beschikbaar in het Ultralytics pakket:
-
Segmentatie van instanties met klasseobjecten: Elk klasseobject krijgt een unieke kleur voor een duidelijke visuele scheiding.
-
Segmentatie van instanties met objectsporen: Elk spoor wordt weergegeven door een aparte kleur, waardoor identificatie en tracering eenvoudiger worden.
Kijken: Segmentatie van instanties met objecttracering met behulp van Ultralytics YOLOv8
Monsters
Instance segmentatie | Segmentatie van instanties + volgen van objecten |
---|---|
Ultralytics Instance segmentatie 😍 | Ultralytics Segmentatie van instanties met volgen van objecten 🔥 |
Segmentatie en tracering van instanties
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
Argumenten
Naam | Type | Standaard | Beschrijving |
---|---|---|---|
mask |
array |
None |
Coördinaten segmentatiemasker |
mask_color |
tuple |
(255, 0, 255) |
Maskerkleur voor elk gesegmenteerd vak |
det_label |
str |
None |
Label voor gesegmenteerd object |
track_label |
str |
None |
Label voor gesegmenteerd en gevolgd object |
Opmerking
Als je vragen hebt, voel je dan vrij om deze te stellen in de Ultralytics Issue Section of in de discussiesectie hieronder.