Mapillary — открытая база панорам

Зачем этот сложный процесс привязки фотографий к координатам скриптом на питоне, когда это же самое гораздо удобнее сделать в JOSM, вместе с подгонкой смещения GPS-трека?

Статью писал непрофессионал в OSM. Там ещё много смешного, типа 150 тысяч фотографий или снимка тоннеля, когда на карте OSM — мост.

Тема интересная, полезная и важная. За труды спасибо.
Есть пожелание (не обязательно к Surly). С учётом комментариев к переводу сделать аналогичный пост, но написанный с нуля - не содержащий замеченных в этом посте ошибок и с учётом отечественных особенностей - видеорегистраторы вместо GoPro, Windows вместо Ubuntu, отечественные дороги и карты вместо зарубежных (последнее - просто воспринимать удобнее).

Хотя вышеупомянутые Ubuntu и GoPro и не столь редкие вещи среди сообщества OSM, использование в инструкции более доступных вещей сделало бы пост актуальным для гораздо большей аудитории.

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

Так вроде сейчас нету программы, в которую можно было бы скормить видеофайл и GPS-трек, а она бы выдала все кадры с координатами, или точным временем съёмки?

На половину - registratorviewer - Позволяет подключить видео к треку и выгрузить кадр с GPS-данными. Пачку кадров выгрузить в автомате не умеет выгружать. Если сильно попросить автора - может быть и добавит, как добавил OSM подложки.

Преобразование видеофайла в пачку картинок сводит задачу к рассмотренной выше.

Единственный сходу неясный момент - как ставить отдельным картинкам правильное время. Сразу приходит в голову несложный способ - самостоятельно (не руками, конечно, а с помощью самописной программы/скрипта на любом языке, хоть bat/bash/powershell) пройтись по полученным файлам и в цикле, зная номер полученной картинки и время первой (последней), поставить каждому файлу картинки правильное время. Но, возможно, кто-то подскажет готовое решение этой мелкой задачи в каком-либо конвертере видео в набор картинок.

Можно сделать такой скрипт:
на входе видеофайл и обрезанный вручную gpx, который полностью совпадает по времени с видеофайлом с точностью до секунды. GPX вроде бы пишется с точностью до секунды.
Используем ffmpeg для операций с видео, и ogr2ogr/spatialite для операций с геометриями.
-Обрезаем конец видео до целого числа секунд, так что бы оно совпадало с количеством секунд в gpx-треке.
-Считаем количество кадров в видео.
-Загоняем gpx в spatialite
-вытаскиваем каждый кадр, и к нему точку из трека функцией Line_Interpolate_Point. Можно и не каждый, а например через 10.
-Записываем в jpg-файл кадра координаты, генерируем дату, время и другие EXIF-теги, необходимые для mapillary.

Вот только непонятно, как записывать время, если за одну секунду получается несколько картинок.

Может быть в отдельную тему вынести обсуждение?

GPS может писаться с разной частотой, опять же могут быть отброшенные точки.

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

Использовать миллисекунды. В exif и атрибутах файла современных файловых систем (ntfs, ext4) не unixtime, а более точный формат, так что никаких проблем нет.

Line_Interpolate_Point же как раз все эти проблемы решает.

Подобное некорректное дублирование координат хоть и принесёт ошибку в конечный результат, но она не особо значительной должна быть. Во многих случаях можно пренебречь. Но всё же подобная запись треков - не есть массовый подход (в том числе и опробованные мною версии Навитела подобной недоработки не имеют). Но если уж от недоработанного ПО никак не уйти, то можно попричёсывать, благо несложно, если о косяке таком в треке известно.

В блоге mapillary опубликована инструкция по получению фотографий с координатами из видеозаписи.
http://blog.mapillary.com/news/2015/01/08/video-cutting.html
Это стало возможным благодаря новому скрипту https://github.com/mapillary/mapillary_tools/blob/master/python/add_fix_dates.py
он принимает пачку jpg без exif, и записывает в них время сьёмки с заданным интервалом в секундах.

Процесс идёт так:

  1. Снять видео и gps-трек
  2. Вытащить из видео по кадру через целое количество секунд (1 кадр за 1, 2, 3… секунды)
  3. Открыть трек, сообразить где на треке находится первый кадр видео, запомнить время в этой точке
  4. Запустить скрипт, который к каждому кадрику припишет время съёмки, начиная с времени, которое нашли в шаге 3
  5. Привязать jpg к координатам в gpsPrune (у меня не получилось, поэтому я использовал JOSM)
  6. Запустить скрипт, который дописывает к фотографиям азимут.

    profit !

Только теперь оказалось, что библиотека которая разбирает exif на сервере mapillary, не читает теги записанные JOSM. Поэтому я дополнительно прогоняю такие файлы через GeoSetter.

Речь о плагине Photo Geotagging? Насколько я вижу, он направление не записывает, которое нужно для mapillary.
Если нет, то в чём заключается прогонка через GeoSetter?

Хочется что-то попроще GeoSetter-а для простановки данных под mapillary, поэтому и спрашиваю.

А не придумали чтобы из трека вытащить азимут по направлению движения + коррекция камеры от направления.

Вот бы еще запилили плагин Mapillary для JOSM, предлагаю проголосовать за данный тикет (стрелка вверх).

Там был глюк в Photo Geotagging, который писал теги как-то не так. Не знаю, исправили его, или нет.
Если у фотографий не читаются координаты, то их нужно открыть в GeoSetter, внести какие-нибудь изменения (добавить рейтинг, или название), и сохранить.
Вот этот скрипт проставляет к фотографиям азимут и поворот камеры: https://github.com/mapillary/mapillary_tools/blob/master/python/interpolate_direction.py

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

Ну и по мелочи. По умолчанию автофокус включен. При плохом освещении камера находится в постоянной автофокусировке, изображения получаются размытыми. Но это отключается в настройках.
По направлении камеры вниз, съемка должна приостанавливаться, но до остановки несколько снимков все равно проходят (а удалить их можно только с сайта, после аппрува).
За 40 минут разрядил батарею на nexus 5 почти полностью. Возможно, из-за постоянной автофокусировки.

Если что-то заливать туда, то только заранее сохраненные и отредактированные снимки. Стандартными приложениями не пользоваться.

Когда я пробовал, то там как раз было: типа выберите хорошие фотки, остальное удалите и нажмите кнопку залить.
Ну а про батарею вроде всё очевидно, GPS + камера + экран на постоянной основе - самые прожорливые девайсы.

Уупс. Да, нашел кнопку, где можно выделить и удалить изображения перед отправкой. Что-то я ступил.

В своей рассылке Mapillary сегодня выразили благодарность целому списку людей, в т.ч. trolleway.