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