Как настроить датчик вероятностей

Вероятностная карта занятости - это процедура обнаружения людей с несколькими камерами, причем ее реализация С++ свободно доступна: http://cvlab.epfl.ch/software/pom

Для использования этой удобной части программного обеспечения вам необходимо:

  • Серия синхронизированных видеокадров с нескольких камер после процедуры удаления фона.
  • Файл конфигурации для определенного сценария.

POM поставляется с примером набора видеокадров и связанного с ним файла конфигурации.

Моя проблема может быть сформулирована следующим образом: Учитывая последовательность синхронизированных видео (например, из http://cvlab.epfl.ch/data/pom), как мне создать файл конфигурации, требуемый POM? В частности, меня интересует тег RECTANGLE конфигурации. В readme указано:

RECTANGLE [номер камеры] [номер места] невидимый | [xmin] [ymin] [xmax] [ymax]

Определяет параметры определенного прямоугольника, стоящего за     индивидуально в определенном месте, просматриваемом с определенной камеры. Все     Не заданные прямоугольники по умолчанию не видны.

Из моего понимания это определяет, как лицо, ограничивающее прямоугольник, будет выглядеть в определенном месте, просматриваемом с определенной камеры. Это должно быть определено для каждого (сетки) местоположения для каждой камеры (при условии, что местоположение находится в камере Поле зрения - если нет, то небезопасно или прямоугольник может быть оставлен неопределенным).

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

Ответ 1

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

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

Гомография головки плоскости является матрицей 3x3, которая описывает отображение из одной плоскости в другую. В этом случае он описывает отображение из 2D-координат комнаты (на уровне головы) в координаты 2D-изображения. Вы можете определить эту гомографию для своей собственной камеры с помощью функции findHomography в opencv. Все, что вам нужно сделать, это измерить координаты четырех точек на земле в комнате и поставить вертикальный полюс на эти маркировки. Полюс должен быть таким же длинным, как и обычный человек, которого вы хотите отслеживать. Теперь вы можете написать небольшую программу, которая позволяет вам щелкнуть по верхней части полюса в каждом представлении камеры. Теперь у вас есть четыре точки мира (координаты, измеренные в комнате) и четыре точки изображения на камеру (точки, которые вы нажали). С помощью findHomography вы можете определить гомографию. Сделайте то же самое для маркировки на земле без полюса, и у вас есть две гомографии на камеру.

Теперь вы можете использовать гомологии для проецирования 8 угловых точек прямоугольника, стоящего в любом положении в комнате, на их координаты изображения для каждой камеры. Возьмите ограничительную рамку из всех 8 точек, и у вас есть прямоугольник для этой комнаты и этой камеры.

Авторы метода, упомянутого с использованием человеческого силуэта, показывают, что их подход может быть более точным, чем использование кубоида. Тем не менее, нет такого понятия, как силуэт движущегося человека, поэтому решение с кубоидом, вероятно, будет вполне работоспособным.

Ответ 2

Я недавно читал эту статью и копал код, поэтому то, что я понял из кода статьи +, - это то, о чем вы, ребята, обсуждали.

Подводя итог, для каждой камеры в системе вам необходимо создать прямоугольники, которые позже будут использоваться POM в качестве сравнения с реальными силуэтами, полученными из алгоритма базовой замены (если вы уже получили их) на каждом возможное положение сетки. Так как каждая камера может не видеть каждую позицию сетки в сцене, вы помещаете "невидимый" тег в этих случаях. Как уже упоминалось, вам нужно использовать файлы калибровки для сопоставления размеров 175 см в высоту и ширину 50 см в зависимости от перспективы. то есть более близкие прямоугольники должны быть больше, чем другие.

ПРЯМОУГОЛЬНИК 0 414 150 0 159 119 означает; Камера 0 гипотетически видит черный прямоугольник на сетке 414 с размером P1 (x, y) = (150,0) - P2 (x, y) = (159,119). Эти меры получены путем перепрограммирования 175 см - 50 см от плоскости головы (плоскость 2D-камеры) до плоскости земли (трехмерная плоскость).

ОБНОВЛЕНИЕ: Я пробовал то, что я разместил здесь, и да, это работает.