অধ্যায়Phase 4 · ভিডিও ও রিয়েল-টাইম সিস্টেম
4.4 18 মিনিট পড়া

Object Tracking (CSRT, KCF)

Single-object trackers।

🎬 গল্প দিয়ে শুরু
প্রতিটি frame-এ object detect করা ব্যয়বহুল। সমাধান — Tracker। একবার object box দিন, tracker পরের frame-গুলোতে নিজে নিজে follow করবে। CSRT, KCF, MOSSE — কিংবদন্তি tracker পরিবার।

Tracker API (legacy / contrib)

python
track.py
import cv2

cap = cv2.VideoCapture("car.mp4")
ok, frame = cap.read()
bbox = cv2.selectROI("pick", frame, False); cv2.destroyAllWindows()

tracker = cv2.TrackerCSRT_create()     # বা TrackerKCF_create()
tracker.init(frame, bbox)

while True:
    ok, frame = cap.read()
    if not ok: break
    ok, box = tracker.update(frame)
    if ok:
        x,y,w,h = [int(v) for v in box]
        cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
    else:
        cv2.putText(frame,"LOST",(20,40),
                    cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255),2)
    cv2.imshow("track", frame)
    if cv2.waitKey(1)==27: break
OpenCV 4.5.2+
পুরনো cv2.Tracker*_create API cv2.legacy-তে সরেছে। চেষ্টা করুন cv2.legacy.TrackerCSRT_create() যদি error আসে।

Tracker তুলনা

TrackerSpeedAccuracyকখন
MOSSEসবচেয়ে দ্রুত (450+ FPS)কমLow-power, fast pan
KCFদ্রুতমাঝারিGeneral real-time
CSRTধীরউচ্চProduction, accuracy critical
MIL/BoostingধীরপুরনোEducational

Multi-Object Tracking

python
import cv2

trackers = cv2.legacy.MultiTracker_create()

ok, frame = cap.read()
while True:
    box = cv2.selectROI("pick", frame, False)
    if box == (0,0,0,0): break
    trackers.add(cv2.legacy.TrackerCSRT_create(), frame, box)

while True:
    ok, frame = cap.read()
    if not ok: break
    ok, boxes = trackers.update(frame)
    for b in boxes:
        x,y,w,h = [int(v) for v in b]
        cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
    cv2.imshow("multi", frame)
    if cv2.waitKey(1)==27: break

Detect + Track hybrid (production pattern)

Real system-এ: প্রতি N frame-এ heavy detector (YOLO) চালান → bbox দিয়ে tracker init/update; মাঝে শুধু tracker। এতে accuracy + speed দুটোই।

text
Frame 1, 31, 61... → YOLO detect → re-init tracker
Frame 2-30  → tracker.update() only
যদি tracker lost → পরের frame-এ আবার detect
প্র্যাকটিস টাস্ক
  1. একটি traffic video-তে CSRT দিয়ে একটি গাড়ি ট্র্যাক করুন; lost হলে message দিন।
  2. Multi-tracker দিয়ে দুটি object একসাথে track করুন; FPS measure করুন।
  3. প্রতি ৩০ frame-এ Haar/YOLO দিয়ে re-init করার hybrid version লিখুন।

সারসংক্ষেপ

  • Tracker একটি object follow করে — detect-এর চেয়ে অনেক দ্রুত।
  • MOSSE/KCF/CSRT speed-accuracy trade-off।
  • Production system = সাময়িক detect + ধারাবাহিক track।
  • Lost detection handle করতে fallback strategy রাখুন।