Зачем нужен трекинг объектов?
При подсчёте потока посетителей в торговом центре камера фиксирует каждого человека, но без трекинга вы не узнаете, сколько уникальных посетителей прошло через зону. Это классическая задача 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 для латенси 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). Пишите — обсудим ваш проект и подготовим предложение. Закажите консультацию, чтобы получить индивидуальное решение под вашу задачу.







