YOLOv8 ile Nesne Takibi | Object Tracking

1. Giriş

Nesne Takibi veya Object Tracking işlemi YOLOv8 teknolojisi ile oldukça yüksek doğruluklu bir biçimde gerçekleştirilebilmektedir. Nesne takibi işlemine başlamadan önce ilk olarak Ultralytics ve OpenCV kütüphanesini aşağıdaki komutlarla indirmelisiniz:

pip install ultralytics
pip install opencv-python

Çalışma boyunca kullanacağımız dosyaları blog yazımın başındaki bağlantıdan bilgisayarınıza indirebilirsiniz.

Şimdi dosya düzenini ayarlayalım. Boş bir klasör içerisinde object_tracking.py adında bir dosya oluşturalım. Ardından test videomuzuda yine aynı dizine koyalım. Çalışmada kullanacağımız model yolov8n.pt olacak. bunu dizine indirmemize gerek yok. object_tracking.py içerisinde bunu indirecek kodu yazacağız.

Tüm bu işlemler size karmaşık gelmeye başladıysa yukarıdaki videoyu da takip ederek yapabilirsiniz.

2. Nesne Takibi

Kodlarımızı yazmaya başlamak için object_tracking.py dosyamızı açıp kütüphaneleri ekleyelim:

import os
os.environ ["KMP_DUPLICATE_LIB_OK"] = "TRUE" 

import cv2
import imutils
import numpy as np
from ultralytics import YOLO
from collections import defaultdict

Kütüphaneler hatasız bir şekilde eklendikten sonra video ve modeli okumalıyız:

video_path = "test.mp4"
cap = cv2.VideoCapture(video_path)

model_name = "yolov8n.pt"
model = YOLO(model_name)

Burada 2 değişken tanımlayacağız:

vehicle_id = 2
track_history = defaultdict(lambda: [])

vehicle_id değişkeni takibini yapacağımız sınıfı ifade ediyor. track_history ise takip kuyruğu oluşturmamızda yardımcı olacak. Artık bir while döngüsü kurarak videodaki görüntüleri tek tek işlemeye başlayabiliriz. Aşadıdaki kod bloğu videoki kareleri tek tek işler, araba sınıfındaki nesnelerin takibini gerçekleştirir:

while True:
    ret, frame = cap.read()
    if ret == False:
        break
    frame = imutils.resize(frame, width=1280) # pip install imutils

    results = model.track(frame, persist=True, verbose=False)[0]
    bboxes = np.array(results.boxes.data.tolist(), dtype="int") # 2.0 -> 2

    for box in bboxes:
        x1, y1, x2, y2, track_id, score, class_id = box
        cx = int((x1+x2)/2)
        cy = int((y1+y2)/2)

        if class_id == vehicle_id:
            cv2.rectangle(frame, (x1,y1), (x2,y2), (0,255,0), 2)

            text = "ID:{} CAR".format(track_id)
            cv2.putText(frame, text, (x1, y1-5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 2)

            track = track_history[track_id]
            track.append((cx, cy))
            if len(track) > 15:
                track.pop(0)
            
            points = np.hstack(track).astype("int32").reshape((-1,1,2))
            cv2.polylines(frame, [points], isClosed=False, color=(0,255,0), thickness=2)

    cv2.imshow("Object Tracking", frame)
    if cv2.waitKey(10) & 0xFF == ord("q"):
        break

Bunun ardından çıkış kodu yazarak çalışmamızı tamamlayabiliriz:

cap.release()
cv2.destroyAllWindows()

3. Endüstriyel Uygulamalar

Bu blog yazısı, nesne takibi işleminin YOLOv8 ile nasıl yapıldığını sizlere anlatmak amacıyla oluşturulmuştur. Buna benzer çalışmaları geliştirmenizi ve benimle paylaşmanızı dört gözle bekliyorum.

Son olarak, burada paylaşılan kodlar temel seviyede çalışmaları ifade etmektedir. Endüstriyel çalışmalara uygun algoritmalar geliştirmek ve sorunlarınıza hızlı bir şekilde çözüm üretmek için iletişim formu üzerinden benimle iletişime geçebilirsiniz.

Oğuzhan Gürbüz

Oğuzhan Gürbüz

Merhabalar,
Görsel Analiz'in kurucusuyum.
İnsansız kara araçları üzerine çalışıyorum. Görüntü işleme, derin öğrenme ve ROS gibi alanlarda danışmanlıklar ve eğitimler veriyorum. Şirketlere ve araştırmacılara bu tip sistemleri geliştirmelerinde yardımcı oluyorum.

2 Comments

  1. Hocam çok güzel bir yazı olmuş, başka bir yazınızda da nesne sayımı konusuna değinebilir misiniz ?

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Ücretsiz Bilgisayarlı Görü eğitimlerini kaçırmamak için hemen abone ol !