Тепло — это не картинка
Инженер, который пришел в тепловизионное видео из обычного CV, первым делом теряет половину привычных инструментов. На тепловой картинке нет цвета одежды, нет рисунка на куртке, нет лица, нет текстуры. Человек — это светлое пятно с размытыми краями, и второй человек рядом выглядит точно так же.
Именно поэтому на объекте нельзя было применить обычный рецепт устойчивого трекинга: держать для каждой цели описание внешности и опознавать ее заново после потери. Опознавать нечего. Два охранника в пятидесяти метрах от камеры различаются между собой хуже, чем один и тот же человек утром и в полдень, — потому что тепловой контраст меняется вместе с фоном.
На чем тогда держится трек
Мы построили сопровождение на геометрии и физике движения. Работает связка из трех вещей: предсказание следующего положения цели по ее скорости, сопоставление отметок между кадрами по расстоянию и площади пятна, и правило времени жизни трека — цель, пропавшая на несколько кадров, не считается новой при появлении в предсказанной точке.
Этого достаточно, пока траектории не пересекаются. Когда пересекаются — трек может обменяться идентификаторами, и мы об этом честно предупредили заказчика. Для задачи периметра это приемлемо: охране важно, что в зоне есть цели и куда они движутся, а не то, что цель номер три была раньше целью номер четыре.
Бюджет кадра: откуда 12,4 миллисекунды
Цифра латентности на кадр становится осмысленной, только когда разложена по статьям расхода. На узле это выглядит так: забор кадра с сенсора, приведение к формату модели, инференс детектора, сопоставление с существующими треками, публикация событий. Инференс занимает большую часть, но ощутимую долю съедают преобразования вокруг него — на слабом железе именно они убивают производительность у тех, кто считает только время работы модели.
Отсюда решения: детектор сжат под целочисленную арифметику, преобразования кадра выполняются без лишних копий памяти, а демон сбора написан на Rust и не держит очередь дольше нескольких кадров.
48 потоков на одну плату — как это вообще влезает
Ключ не в мощности, а в расфазировке. Камеры отдают кадры не одновременно: узел разносит опрос потоков по времени так, чтобы пики нагрузки не складывались. Ровный поток работы вместо волн — и плата, которая захлебывалась на двадцати потоках при наивной схеме, спокойно тянет сорок восемь.
Вторая часть — приоритет свежести. Если узел не успевает, устаревшие кадры выбрасываются, а не встают в очередь. Система охраны, показывающая позицию цели с задержкой в две секунды, хуже, чем система, которая честно пропустила пару кадров.
Уличный шкаф летом
Самая недооцененная проблема edge-железа — не вычислительная мощность, а температура. Металлический шкаф на солнце превращается в духовку, а одноплатный компьютер под полной нагрузкой греется сам. Дальше процессор снижает частоту, и производительность падает ровно в тот момент, когда объект нужнее всего охранять.
В прошивку добавлен сторож: он следит за температурой и при подходе к порогу плавно снижает частоту обработки — реже опрашивает потоки, увеличивает интервал между кадрами по неактивным зонам. Система деградирует управляемо и предсказуемо. Молчаливый отказ узла в жару — это то, за что снимают голову.
Почему ни одного вызова в облако
Причин три, и все скучные. Канал на периметре узкий и часто спутниковый — видео туда не отдать. Задержка на круг до облака и обратно превышает весь бюджет реакции. И режимный объект просто не выпускает видеопоток наружу по внутренним требованиям.
Наружу уходят события: время, камера, координаты цели, направление движения. Это позволяет держать всю картинку периметра в диспетчерской и не гонять терабайты.
Границы честно
- Сильный дождь и туман съедают дальность: тепловой контраст падает, дальняя зона слепнет.
- Прогретая солнцем стена дает засветку, на фоне которой человек теряется. Лечится ракурсом камеры, не моделью.
- Крупные животные на тепле похожи на человека. Разделение по размеру и характеру движения работает, но не идеально.
- Классификация «кто именно идет» — не наша задача. Мы отвечаем на вопрос «есть движущаяся тепловая цель и куда она движется».
Разбор задач такого класса — в edge-направлении, смежная тема обнаружения воздушных целей — в детекции БПЛА.