К содержимому
MoranaLabs
Промышленная безопасность — 18 апр. 2026 г.

Real-time трекинг на тепловизоре для периметра объекта 

У тепловизора нет цвета и текстуры: стандартный прием опознания цели по внешности здесь не работает. Собрали трекинг на геометрии движения и уложили 48 потоков в один Raspberry Pi 5, который в шкафу нагревается до троттлинга.

12,4 мс
на кадр: декод, детекция, трекинг, правила
48 камер
на один узел в реальном времени
0
облачных вызовов
стенд · запускается здесь

Стенд: сколько камер держит один узел

Бюджет кадра расписан по стадиям. Добавляйте камеры и смотрите, где узел перестает успевать и что он делает вместо того, чтобы копить очередь.

счет на узле ожидание очередь под нагрузкой
бюджет одной единицы: 12,4 мс счета + 12,9 мс ожидания в очереди · красная черта — предел 40 мс
на входе 288 кадров в секунду · потолок узла 323 · узкое место: Детектор INT8
  • Декод RTSP2,1 мс

    аппаратный декодер, кадр не копируется лишний раз

    слот узла · узел
  • Препроцесс1,4 мс

    нормализация температурной шкалы, ресайз под вход сети

    слот узла · узел
  • Детектор INT86,2 мс

    квантованная сеть на ускорителе, самая дорогая стадия

    слот узла · узел
  • Трекер1,9 мс

    сопоставление с предыдущим кадром, сглаживание

    слот узла · узел
  • Правила и журнал0,8 мс

    зоны, пороги, запись события

    слот узла · узел

Загрузка 89 % — рабочий потолок. Дальше очередь начинает расти быстрее нагрузки: следующие десять процентов стоят больше, чем все предыдущие.

25,3 мс
сквозная задержка, бюджет 40 мс
89 %
загрузка узла
0
сброшено: сброс устаревших кадров, трек продолжается по предсказанию
50
камер на узел в бюджете
Весь бюджет тут занимает счет на узле, ожидания в конвейере нет. Значит, потолок двигается только двумя способами: удешевить самую дорогую стадию (Детектор INT8) или добавить слотов обработки. Третьего не будет, и это надо говорить до договора, а не после того, как на узел повесили вдвое больше источников.

Тайминги стадий синтетические, порядок — тепловизионный поток на промышленном edge-узле. Политика сброса устаревших кадров та же, что в работе.

Тепло — это не картинка

Инженер, который пришел в тепловизионное видео из обычного CV, первым делом теряет половину привычных инструментов. На тепловой картинке нет цвета одежды, нет рисунка на куртке, нет лица, нет текстуры. Человек — это светлое пятно с размытыми краями, и второй человек рядом выглядит точно так же.

Именно поэтому на объекте нельзя было применить обычный рецепт устойчивого трекинга: держать для каждой цели описание внешности и опознавать ее заново после потери. Опознавать нечего. Два охранника в пятидесяти метрах от камеры различаются между собой хуже, чем один и тот же человек утром и в полдень, — потому что тепловой контраст меняется вместе с фоном.

На чем тогда держится трек

Мы построили сопровождение на геометрии и физике движения. Работает связка из трех вещей: предсказание следующего положения цели по ее скорости, сопоставление отметок между кадрами по расстоянию и площади пятна, и правило времени жизни трека — цель, пропавшая на несколько кадров, не считается новой при появлении в предсказанной точке.

Этого достаточно, пока траектории не пересекаются. Когда пересекаются — трек может обменяться идентификаторами, и мы об этом честно предупредили заказчика. Для задачи периметра это приемлемо: охране важно, что в зоне есть цели и куда они движутся, а не то, что цель номер три была раньше целью номер четыре.

Бюджет кадра: откуда 12,4 миллисекунды

Цифра латентности на кадр становится осмысленной, только когда разложена по статьям расхода. На узле это выглядит так: забор кадра с сенсора, приведение к формату модели, инференс детектора, сопоставление с существующими треками, публикация событий. Инференс занимает большую часть, но ощутимую долю съедают преобразования вокруг него — на слабом железе именно они убивают производительность у тех, кто считает только время работы модели.

Отсюда решения: детектор сжат под целочисленную арифметику, преобразования кадра выполняются без лишних копий памяти, а демон сбора написан на Rust и не держит очередь дольше нескольких кадров.

48 потоков на одну плату — как это вообще влезает

Ключ не в мощности, а в расфазировке. Камеры отдают кадры не одновременно: узел разносит опрос потоков по времени так, чтобы пики нагрузки не складывались. Ровный поток работы вместо волн — и плата, которая захлебывалась на двадцати потоках при наивной схеме, спокойно тянет сорок восемь.

Вторая часть — приоритет свежести. Если узел не успевает, устаревшие кадры выбрасываются, а не встают в очередь. Система охраны, показывающая позицию цели с задержкой в две секунды, хуже, чем система, которая честно пропустила пару кадров.

Уличный шкаф летом

Самая недооцененная проблема edge-железа — не вычислительная мощность, а температура. Металлический шкаф на солнце превращается в духовку, а одноплатный компьютер под полной нагрузкой греется сам. Дальше процессор снижает частоту, и производительность падает ровно в тот момент, когда объект нужнее всего охранять.

В прошивку добавлен сторож: он следит за температурой и при подходе к порогу плавно снижает частоту обработки — реже опрашивает потоки, увеличивает интервал между кадрами по неактивным зонам. Система деградирует управляемо и предсказуемо. Молчаливый отказ узла в жару — это то, за что снимают голову.

Почему ни одного вызова в облако

Причин три, и все скучные. Канал на периметре узкий и часто спутниковый — видео туда не отдать. Задержка на круг до облака и обратно превышает весь бюджет реакции. И режимный объект просто не выпускает видеопоток наружу по внутренним требованиям.

Наружу уходят события: время, камера, координаты цели, направление движения. Это позволяет держать всю картинку периметра в диспетчерской и не гонять терабайты.

Границы честно

  • Сильный дождь и туман съедают дальность: тепловой контраст падает, дальняя зона слепнет.
  • Прогретая солнцем стена дает засветку, на фоне которой человек теряется. Лечится ракурсом камеры, не моделью.
  • Крупные животные на тепле похожи на человека. Разделение по размеру и характеру движения работает, но не идеально.
  • Классификация «кто именно идет» — не наша задача. Мы отвечаем на вопрос «есть движущаяся тепловая цель и куда она движется».

Разбор задач такого класса — в edge-направлении, смежная тема обнаружения воздушных целей — в детекции БПЛА.

12,4 мс
на кадр: декод, детекция, трекинг, правила
  • Edge AI
  • RPi 5
  • thermal
  • tracking
СтендПроверить расчет руками ↑

Те же цифры, но с ручками: порог, нагрузка, объем.

НаправлениеEdge AI и АПК

Что мы делаем в этом направлении и сколько это стоит.

Комментарий инженера

Классический рецепт на случай, когда траектории пересекаются, — вторая нейросеть, которая заново узнает цель по внешности. Коллеги ее и предлагали. Но у нас тепловизор: узнавать нечего, там нет ни цвета, ни текстуры. И Raspberry Pi, на который садятся десятки потоков, — каждая лишняя модель ест запас, а его в обрез. Обошлись легким сопоставлением по движению и честно сказали заказчику, что при пересечении траекторий номера целей могут поменяться местами. Для периметра это оказалось неважно.
ведущий инженер edge CV · MoranaLabs
Другие кейсы
— заявка

Опишите задачу  ответим как инженеры. 

Оставьте имя и Telegram — остальное обсудим. Без брифов на 40 слайдов и звонков по три раза.

Отвечаем за пару часовотвечает инженер, а не отдел продажNDA до передачи данных

Любой один канал — куда удобнее, туда и ответим

Или сразу написать в Telegram

Без спама и звонков-роботов. Нажимая кнопку, вы соглашаетесь с политикой конфиденциальности и обработкой персональных данных.