İçeriğe geç

Ultralytics YOLOv8 kullanarak Örnek Segmentasyonu ve Takibi 🚀

Örnek Segmentasyonu Nedir?

Ultralytics YOLOv8 Örnek segmentasyonu, bir görüntüdeki tek tek nesnelerin tanımlanmasını ve ana hatlarının belirlenmesini içerir ve uzamsal dağılımın ayrıntılı bir şekilde anlaşılmasını sağlar. Anlamsal segmentasyondan farklı olarak, her nesneyi benzersiz bir şekilde etiketler ve kesin olarak tanımlar, bu da nesne algılama ve tıbbi görüntüleme gibi görevler için çok önemlidir.

Ultralytics paketinde iki tür örnek segmentasyon takibi mevcuttur:

  • Sınıf Nesneleri ile Örnek Segmentasyonu: Net bir görsel ayrım için her sınıf nesnesine benzersiz bir renk atanır.

  • Nesne İzleri ile Örnek Segmentasyonu: Her iz farklı bir renkle temsil edilir, bu da kolay tanımlama ve izlemeyi kolaylaştırır.



İzle: Nesne Takibi ile Örnek Segmentasyonu Ultralytics YOLOv8

Örnekler

Örnek Segmentasyonu Örnek Segmentasyonu + Nesne Takibi
Ultralytics Örnek Segmentasyonu Ultralytics Nesne Takibi ile Örnek Segmentasyonu
Ultralytics Örnek Segmentasyonu 😍 Ultralytics Nesne Takibi ile Örnek Segmentasyonu 🔥

Örnek Segmentasyonu ve İzleme

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 Argümanlar

İsim Tip Varsayılan Açıklama
mask array None Segmentasyon maskesi koordinatları
mask_color tuple (255, 0, 255) Her bölümlenmiş kutu için maske rengi
det_label str None Bölümlere ayrılmış nesne için etiket
track_label str None Segmente edilen ve izlenen nesne için etiket

Not

Sorularınız için Ultralytics Sorun Bölümüne veya aşağıda belirtilen tartışma bölümüne sorularınızı göndermekten çekinmeyin.



Oluşturma 2023-12-18, Güncelleme 2024-03-03
Yazarlar: glenn-jocher (6), RizwanMunawar (2)

Yorumlar