Уличные панорамы на коленке
Добавил поддержку уличных панорам в карту деревьев. Купил камеру DJI Osmo 360, собрал на коленке пайплайн для синхронизации видеоряда со внешним GPX треком. Дополнительно прогоняю результаты через OpenSfM для повышения пространственной точности. Потом выгружаю всё это в Mapillary и использую через их же API.

Что это даёт
Конечная цель -- автоматическое распознавание деревьев, вычисление координат через триангулирование и размещение их на карте. До этого пока далеко: нужно разобраться с точностью данных, приделать интерфейс ручного триангулирования, а потом уже автоматизиваро это через распознавание образов.
Но уже сейчас это решает некоторые проблемы нашего приложения. Во-первых, можно быстро зафиксировать состояние улицы, если вдруг на ней начались или запланированы работы, которые могут повлиять на деревья. Во-вторых, не нужно будет фотографировать деревья для фиксирования их общего вида, когда этот инструмент будет доведён до рабочего состояния.
Возникшие проблемы
(1) Синхронизация видеоряда с GPS. Я использую обычное потребительское оборудование, в частности мобильный телефон для записи координат (приложение GPS Logger). Это означает, во-первых, точность ±6 м в городе, а во-вторых, телефон использует какую-то апроксимацию данных, и координаты идут с лагом в 2-3 секунды. Соответственно как ни старайся синхронизировать таймеры устройств, это бессмысленно.
Я перестал это делать, и придумал нечто вроде ручного GCP: нахожу участок записи, где я еду с постоянной скоростью (обычно это около 40 км/ч), нахожу ближайший ориентир (перекрёсток или угол дома), беру координаты дороги перпендикулярно этому ориентиру, и исходя из текущего номера фрейма и координат могу максимально точно синхронизировать видеоряд со внешним GPX файлом. Это ручная работа, но не слишком сложная, и в целом хорошо переносится в веб сервис. Пока не придумал как это сделать без рук вообще.
(2) Точность координат. Телефон пишет координаты с точностью ± 6 метров, что для триангулирования не годится вообще. Заодно нет данных о направлении камеры на момент записи. И если направление движения можно вычислить по треку, то куда там смотрела камера изначально и куда стала смотреть после лежачего полицейского -- неизвестно.
Эту проблему я решил, прикрутив OpenSfM, который точно восстанавливает картину мира и вычисляет все эти параметры для каждого конкретного кадра. Но для проверки результатов ещё нужен дополнительный UI.
(3) Особенности Mapillary. Некоторые датасеты отказывается принимать, жалуется на большую плотность пикселей. Пока никак не решил, но в целом, после добавления в пайплайн OpenSfM, Mapillary можно выкинуть, т.к. для файлового хостинга это сложновато, а больше никакие функции я не использую.