Bölüm 7 · Görüntü işleme · Ders 29
Nesne takibi ve hız ihlali
Tepeden bakan kamerayla AGV kimlikleri, izleri ve hızları
Veri. Fabrikanın iç yolunu tavandaki bir kamera tepeden görüyor: 26 m × 15 m, 25 piksel = 1 metre, saniyede 10 kare. 12 saniyede beş otonom forklift (AGV) geçiyor; kurallara göre hız sınırı 2 m/s. Dedektör her karede yalnız kutular verir: hangisinin hangi araç olduğunu bilmez, sırası her karede karışıktır, konum ±2 piksel titrer ve kutuların %4'ü kaçırılır. Takipçi kimlikleri korumalı ve hız sınırını aşanı bulmalı.
import numpy as nprng = np.random.default_rng(7)PX_M, FPS, LIMIT, GATE = 25, 10, 2.0, 20 # px/m, kare/s, m/s, pxv = np.array([[1.4, 0], [-2.7, 0], [0, 2.3]]) # gerçek hızlar (m/s)p0 = np.array([[1.0, 5], [25, 9.5], [13, 1]]) * PX_M # başlangıç (px)T = [] # izler: konum listelerifor t in range(60):det = p0 + v * PX_M * t / FPS # gerçek merkezlerdet += rng.normal(0, 2, det.shape) # ölçüm gürültüsüdet = det[rng.permutation(len(det))] # sıra bilinmezpr = [2*p[-1] - p[-2] if p[1:] else p[-1] for p in T] # sabit hız tahminipairs = sorted((np.hypot(*(d - q)), i, j) # tüm uzaklıklar, küçüktenfor i, q in enumerate(pr) for j, d in enumerate(det))ut, ud = set(), set() # kullanılan iz / tespitfor c, i, j in pairs:if c < GATE and i not in ut and j not in ud: # eşik içinde mi?T[i].append(det[j]); ut.add(i); ud.add(j) # kimliğe bağlafor j in set(range(len(det))) - ud: T.append([det[j]]) # yeni kimlikfor i, pts in enumerate(T):P = np.array(pts)vel = np.polyfit(np.arange(len(P)), P, 1)[0] # eğim: px/kares = np.hypot(*vel) * FPS / PX_M # m/sprint(f'ID {i}: {s:.2f} m/s, ihlal: {s > LIMIT}')
Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.
Veri seti
Tüm veri setleri →Bu dersin kodu verisini kendi içinde üretir; indirilecek dosya yok. Kodu yine de aşağıda tarayıcında çalıştırabilirsin.
Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide
Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.
Çıktı
Çıktı burada görünecek.Nasıl çalışır
- Her iz için bir sonraki konum tahmin edilir: son iki konumdan sabit hızla bir adım ileri.
- Tahminlerle yeni kutuların merkezleri arasındaki tüm uzaklıklar sıralanır; en yakın çift önce eşleşir, eşikten uzak olanlar eşleşmez.
- Eşleşmeyen kutu yeni bir kimlik alır. Eşleşmeyen iz 5 kare daha bekletilir (kaçırılan tespitler için), sonra silinir.
- Hız: son 20 konuma en küçük karelerle doğru oturtulur, eğimi piksel/kare; × 10 kare/s ÷ 25 piksel/m = m/s. 2 m/s'yi geçen iz kırmızıya döner.
- Şunu dene: gürültüyü 6 piksele çıkar; 20 piksellik eşik yetmez, araçlar yeni kimlik alır. Eşiği büyütünce düzelir; ama çok geniş eşik, bir tespit kaçınca izin yanından geçen başka bir aracın kutusunu kapmasına kapı açar.
Neden önemli
Trafik kameralarında hız ve şerit ihlali, depolarda forklift güvenliği, mağazalarda müşteri akışı ve sporda oyuncu takibi aynı iki adımla çalışır: önce tespit, sonra kimlik bağlama. Mobil robotlar da çevrelerindeki insanları ve araçları böyle takip eder; SORT ve DeepSORT bu fikre Kalman filtresi ve görünüm benzerliği ekler.
ESOF 323, 11. hafta: robotlarda derin öğrenme →