Задача
Прямая трансляция матча: нужно вести всех игроков и мяч по связке из десятка камер и накладывать графику — скорости, зоны, офсайд-линии — прямо в эфир. Бюджет на всё — broadcast-задержка, доли секунды; опоздал — графика приехала к следующему эпизоду.
Сложность не в одиночном детекторе, а в том, чтобы сшить разные ракурсы в одну сцену: камеры с разным зумом и положением, перекрытия игроков, мяч, который то и дело пропадает за телами.
Подход
Свели камеры в единую систему координат поля: калибровка по разметке, привязка всех источников к одному монотонному часу. Трекинг ведём в координатах поля, а не кадра — это держит идентичность игроков при переходе между ракурсами и при перекрытиях. Мяч, пропавший на одной камере, подхватывается с другой.
Инференс распараллелен по камерам: тяжёлая детекция — на GPU, ассоциация треков — лёгкая и быстрая. На пиках работает backpressure и приоритет свежего кадра: лучше пропустить устаревший, чем копить лаг и сорвать эфир. Авто-хайлайты собираются из событий трекинга без оператора.
Стек
multi-view calibration · TensorRT · ByteTrack (field coords) · CUDA video decode · Rust (синхронизация потоков)
Результат
- 0.9 с сквозная задержка до графики в эфире.
- 12 камер сведены в единую сцену поля.
- 96.4% непрерывность трека игрока при смене ракурса и перекрытиях.
- Авто-хайлайты собираются из событий трекинга без ручной нарезки.