Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

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ı.

kare 0: dedektör yalnız kutular verireşik 20 px · gürültü σ = 2,0 px · sınır 2 m/s
1 / 128
takip.pypython
  1. import numpy as np
  2. rng = np.random.default_rng(7)
  3. PX_M, FPS, LIMIT, GATE = 25, 10, 2.0, 20 # px/m, kare/s, m/s, px
  4. v = np.array([[1.4, 0], [-2.7, 0], [0, 2.3]]) # gerçek hızlar (m/s)
  5. p0 = np.array([[1.0, 5], [25, 9.5], [13, 1]]) * PX_M # başlangıç (px)
  6. T = [] # izler: konum listeleri
  7. for t in range(60):
  8. det = p0 + v * PX_M * t / FPS # gerçek merkezler
  9. det += rng.normal(0, 2, det.shape) # ölçüm gürültüsü
  10. det = det[rng.permutation(len(det))] # sıra bilinmez
  11. pr = [2*p[-1] - p[-2] if p[1:] else p[-1] for p in T] # sabit hız tahmini
  12. pairs = sorted((np.hypot(*(d - q)), i, j) # tüm uzaklıklar, küçükten
  13. for i, q in enumerate(pr) for j, d in enumerate(det))
  14. ut, ud = set(), set() # kullanılan iz / tespit
  15. for c, i, j in pairs:
  16. if c < GATE and i not in ut and j not in ud: # eşik içinde mi?
  17. T[i].append(det[j]); ut.add(i); ud.add(j) # kimliğe bağla
  18. for j in set(range(len(det))) - ud: T.append([det[j]]) # yeni kimlik
  19. for i, pts in enumerate(T):
  20. P = np.array(pts)
  21. vel = np.polyfit(np.arange(len(P)), P, 1)[0] # eğim: px/kare
  22. s = np.hypot(*vel) * FPS / PX_M # m/s
  23. print(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.

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.

takip.pypython

Çıktı

Çıktı burada görünecek.

Nasıl çalışır

  1. Her iz için bir sonraki konum tahmin edilir: son iki konumdan sabit hızla bir adım ileri.
  2. 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.
  3. 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.
  4. 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.
  5. Ş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 →
Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç