Хозяйке на заметку: Геотаггинг в Линукс

Jan 30, 2009 16:05

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

Дальше я постараюсь рассказать, как мы для себя решили эту проблему, с учетом того что Виндовса в доме отродясь не водилось, а на работе стоит Linux Ubuntu

Для того чтобы логгировать маршрут мы завели замечательную машинку iBlue747, которая занимает мало места, долго работает без подзарядки, а при наличии ноутбука или планшентика работает как gps-навигатор. Из этой замечательной коробочки получаются логи в формате csv (т.е. просто данные, разделенные запятыми).
Таким образом, процесс выглядит следюущим образом - настраиваются параметры логгирования для iBlue (интервалы с которыми надо запоминать точки и количество информации о точке). Время эта коробочка всегда дергает со спутников, поэтому оно всегда правильное и настраивать ничего не надо. Настраиваете дату и время в фотоаппарате. Тут не принципиально, какой именно часовой пояс ставить, главное не менять его во время путешествия, даже если вы на самом деле передвигаетесь между часовыми поясами. Например, во время путешествия в Тайланд у меня в фотоаппарате постоянно было московское время, просто чтобы потом не запутаться. Включаете логгер, кладете его в карман и идете фотографировать.

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

Так, после очередного отпуска у меня получается в среднем 40ГБ фотографий и несколько csv файлов с точками.

Задача номер 1 - прописать информацию о месте съемки в exif фотографии.

Перепробовав кучу софта, я остановила свой выбор на двух утилитах - GPicSync и gpsPhoto. Только они не потребовали для работы шаманских действий, и смогли адекватно работать с огромным количеством фотографий не создавая при этом кучу временных файлов и preview, что с учетом того что исходных фотографий 40ГБ немаловажно.
GPicSync имеет графический интерфейс и умеет дергать географическое название места съемки с сайта geonames.org и тут же прописывать его в ключевые и описание, что довольно удобно и познавательно, но требует для своей работы wxPython, с установкой которого, впрочем, нет никаких проблем. gpsPhoto - представляет собой перловый скрипт, который просто прописывает gps координаты в exif, зато работает в несколько раз быстрее чем GPicSync.

Сначала про GPicSync. Запускается она простой строчкой $ python ./gpicsync-GUI.py после чего появляетя само окошко программы (по клику на картинку - размерчик побольше)



UTC offset - разница между между временем в логах и в фотоаппарате ("3" это для Москвы).
также, полезно задать максимальную разницу во времени (в секундах) при которой точка записывается в exif (в данном случае стоит 1800 секунд или полчаса, это значит что точка с ближайшим временем которое отличается меньше чем на полчаса от времени на фотографии будет записана в exif).

После того как разобрались с параметрами, нажимаем кнопку Synchronize! и наслаждаемся бегующими по экрану названиями мест где побывали :)
На моем рабочем компе, для 54ГБ фотографий, весь процесс занял примерно полтора часа - считаю что очень неплохо.

Если вам не нужны географические названия мест и достаточно только координат, то удобнее и быстрее воспользоваться утилитой gpsPhoto, которая запускается следующим образом:

$ ./gpsPhoto --gpsfile /media/disk/track.gpx --overwrite-geotagged --timeoffset 10800 --maxtimediff 1800 --dir /media/disk/
--gpsfile - путь к лог-файлу
--dir - путь к фотографиям
--timeoffset - 3*3600cек. разница между временем в фотоаппарате и в gps
--maxtimediff - максивальное различие между временем точки и временем фотографии при потором эта точка прописывается в exif

P.S. Как несложно заметить - исходные данные у меня представлены в виде нескольких csv файлов, а обе утилыты хотят для работы файл в формате gpx. Проблема решается следующим образом: сначала все исходные csv файлы объединяются в один (это можно сделать, поспользовавшись скриптом, который я приведу в конце) а потом преобразовываются в нужный формат с помощью gpsbabel

Задача номер 2 - красивое отображение трека поездки и фотографий.
Решается с помощью сервиса www.gpsvisualizer.com который имеет кучу разных настроек, позволяющих управлять внешним видом карты, рисовать графики и еще много чего. Но имеет один очень существенный недостаток - не понимает файлы больше 1.5МБ. Эту проблему я решила, написав скриптик, который объединяет все лог-файлы в один и приводит его к размеру 1.5МБ (в данный момент просто выкидывает строчки - для отображения на карте оставшихся данных будет достаточно, а для геотаггинга можно использовать целиковый файл). Получившуюся карту можно сохранить на www.everytrail.com добавить фотографии с Flickr и получить красивую картинку, которую можно показывать друзьям и знакомым и встраивать на сайты и в блоги :)

Widget powered by EveryTrail: GPS Geotagging

gps, linux

Previous post Next post
Up