Навіщо потрібен трекінг об'єктів?
При підрахунку потоку відвідувачів у торговельному центрі камера фіксує кожну людину, але без трекінгу ви не дізнаєтеся, скільки унікальних відвідувачів пройшло через зону. Це класичне завдання Object Tracking — утримувати ідентичність об'єкта на всьому шляху його руху по кадру. Ми, команда AI-інженерів, вирішуємо такі завдання з 2018 року. Запустили понад 20 проєктів трекінгу для рітейлу, логістики та спорту, і готові побудувати рішення під ключ для вашого кейсу. Помилка у виборі алгоритму може коштувати до 30% точності підрахунку, тому важливий правильний підхід.
Який алгоритм трекінгу обрати?
Трекінг — завдання слідування за конкретним об'єктом через послідовність кадрів зі збереженням ідентичності. Якщо детекція відповідає на питання «що і де на кадрі», то трекінг додає «це той самий об'єкт, що й у попередніх кадрах». Застосування: підрахунок людей, що перетинають лінію, аналіз траєкторій у магазині, керування в системах автономного водіння, спортивна аналітика.
SORT (Simple Online and Realtime Tracking) — базовий алгоритм: фільтр Калмана для передбачення положення + IoU matching для асоціації. Швидкий, але втрачає об'єкт при перекриттях.
DeepSORT — SORT + ReID (Re-Identification): deep appearance features для асоціації за зовнішнім виглядом, не тільки за просторовим положенням. Краще справляється з перекриттями.
Чому ByteTrack — найкращий вибір для продакшену?
ByteTrack — поточний state-of-the-art для загальних завдань. Використовує всі детекції (включно з низько впевненими) для асоціації. Ми впровадили його в 15 проєктах і переконалися: він дає HOTA 77.3 на MOT17 benchmark при низьких затримках. Код інтеграції простий:
from ultralytics import YOLO model = YOLO('yolov8l.pt') # Трекінг вбудований в Ultralytics results = model.track( source='video.mp4', tracker='bytetrack.yaml', persist=True, # зберігати трек-IDs між кадрами conf=0.3, iou=0.5 ) for result in results: boxes = result.boxes for box in boxes: track_id = box.id.item() # унікальний ID об'єкта x1, y1, x2, y2 = box.xyxy[0] BoT-SORT — ByteTrack + camera motion compensation + ReID. Найкращі результати на MOT17 benchmark: HOTA 77.8.
StrongSORT — ще більш агресивна ReID інтеграція, краще для завдань з тривалими перекриттями.
ReID моделі: як не втратити об'єкт при перекритті?
ReID-модель вилучає embedding зовнішнього вигляду об'єкта. При втраті треку система шукає його за similarity в embeddings:
import torchreid # Завантаження ReID моделі model = torchreid.models.build_model( name='osnet_x1_0', num_classes=751, # Market-1501 pretrained=True ) def extract_appearance_features(crop: np.ndarray) -> np.ndarray: tensor = preprocess_crop(crop) with torch.no_grad(): features = model(tensor) return features.cpu().numpy() Метрика ReID: mAP і Rank-1 на Market-1501 / DukeMTMC. OSNet-x1.0: Rank-1 94.8%, mAP 84.9% на Market-1501.
Аналіз траєкторій і метрики
Після трекінгу будуємо аналітику за траєкторіями:
class TrajectoryAnalyzer: def __init__(self): self.tracks = {} # track_id -> list of (frame, x, y) def update(self, track_id, frame_num, cx, cy): if track_id not in self.tracks: self.tracks[track_id] = [] self.tracks[track_id].append((frame_num, cx, cy)) def count_line_crossings(self, line: tuple, direction='both') -> int: """Підрахунок перетинів віртуальної лінії""" count = 0 for track in self.tracks.values(): if self._crosses_line(track, line, direction): count += 1 return count Метрики якості трекінгу:
- HOTA (Higher Order Tracking Accuracy) — основна метрика, балансує Detection і Association accuracy
- MOTA (Multiple Object Tracking Accuracy) — враховує FP, FN, ID switches
- IDF1 — ID F1 score: наскільки добре зберігаються ID через час
- ID Switches — кількість змін ID у одного об'єкта
| Алгоритм | HOTA MOT17 | MOTA | ID Switches |
|---|---|---|---|
| SORT | 55.1 | 63.3 | 4852 |
| DeepSORT | 61.2 | 71.4 | 1821 |
| ByteTrack | 77.3 | 80.3 | 2196 |
| BoT-SORT | 77.8 | 80.5 | 1871 |
Процес роботи над проєктом
- Discovery — аналіз завдання, відео-датасету, вимог до точності та швидкості.
- Вибір моделі — тестуємо ByteTrack, DeepSORT, BoT-SORT на ваших даних.
- Оптимізація — квантування (INT8), обрізання графа, налаштування hyperparams для latency p99 < 30 ms на Jetson.
- Розгортання — контейнеризація, інтеграція з відеопотоком (RTSP, HLS), деплой на GPU/CPU.
- Аналітика — особистий кабінет з heatmaps, лічильниками, треками.
Терміни та обсяг робіт
| Масштаб системи | Термін |
|---|---|
| Трекінг 1 класу, 1–4 камери | 2–3 тижні |
| Мультиклас, аналіз траєкторій | 4–6 тижнів |
| Довгостроковий ReID трекінг (re-enter) | 6–10 тижнів |
Вартість розраховується індивідуально, виходячи з кількості камер, типів об'єктів та необхідної точності. Зв'яжіться з нами — ми безкоштовно оцінимо складність.
Що входить у результат
- Навчена та оптимізована модель трекінгу (ByteTrack або BoT-SORT).
- Docker-образ з REST API для інтеграції.
- Інтерактивний дашборд для аналітики.
- Технічна документація (опис архітектури, метрики, інструкція з запуску).
- Підтримка протягом 12 місяців.
Досвід і гарантії
Наша команда має сертифікованих ML-інженерів з досвідом роботи над системами відеоаналітики протягом багатьох років. Реалізовано 25+ проєктів для рітейлу, логістики та безпеки. Надаємо гарантію на коректну роботу трекінгу в межах узгоджених метрик (HOTA ≥ 70). Пишіть — обговоримо ваш проєкт і підготуємо пропозицію. Замовте консультацію, щоб отримати індивідуальне рішення під вашу задачу.







