Извлечение геотегов из файлов видеорегистратора Garmin Dash Cam 45

Извлечение геотегов из файлов видеорегистратора Garmin Dash Cam 45

Видеорегистратор данной модели сохраняет записи в виде файлов MP4 продолжительностью 1 минута. Извлечь координаты и скорость из этих файлов достаточно просто с помощью пакета exiftool. Рассмотрим это на простых примерах. Сначала посмотрим базовый вывод по команде exiftool имя файла (без опций).

exiftool GRMN0247.MP4  
ExifTool Version Number         : 11.30 
File Name                       : GRMN0247.MP4 
Directory                       : . 
File Size                       : 120 MB 
File Modification Date/Time     : 2020:08:19 13:24:24+03:00 
File Access Date/Time           : 2020:08:20 00:00:00+03:00 
File Inode Change Date/Time     : 2020:08:23 15:00:08+03:00 
File Permissions                : rw-r--r-- 
File Type                       : MP4 
File Type Extension             : mp4 
MIME Type                       : video/mp4 
Major Brand                     : MP4 Base w/ AVC ext [ISO 14496-12:2005] 
Minor Version                   : 0.0.0 
Compatible Brands               : avc1, isom 
Movie Data Size                 : 120271826 
Movie Data Offset               : 40 
Movie Header Version            : 0 
Create Date                     : 2020:08:19 10:22:47 
Modify Date                     : 2020:08:19 10:22:47 
Time Scale                      : 48000 
Duration                        : 0:01:00 
Preferred Rate                  : 1 
Preferred Volume                : 100.00% 
Preview Time                    : 0 s 
Preview Duration                : 0 s 
Poster Time                     : 0 s 
Selection Time                  : 0 s 
Selection Duration              : 0 s 
Current Time                    : 0 s 
Next Track ID                   : 4 
Track Header Version            : 0 
Track Create Date               : 2020:08:19 10:22:47 
Track Modify Date               : 2020:08:19 10:22:47 
Track ID                        : 1 
Track Duration                  : 0:01:00 
Track Layer                     : 0 
Track Volume                    : 0.00% 
Image Width                     : 2560 
Image Height                    : 1440 
Graphics Mode                   : srcCopy 
Op Color                        : 0 0 0 
Compressor ID                   : avc1 
Source Image Width              : 2560 
Source Image Height             : 1440 
X Resolution                    : 72 
Y Resolution                    : 72 
Compressor Name                 : Ambarella AVC encoder 
Bit Depth                       : 24 
Video Frame Rate                : 29.97 
Balance                         : 0 
Audio Format                    : mp4a 
Audio Channels                  : 1 
Audio Bits Per Sample           : 0 
Audio Sample Rate               : 48000 
Matrix Structure                : 1 0 0 0 1 0 0 0 1 
Media Header Version            : 0 
Media Create Date               : 2020:08:19 10:22:47 
Media Modify Date               : 2020:08:19 10:22:47 
Media Time Scale                : 1000 
Media Duration                  : 0:00:59 
Handler Type                    : Text 
Handler Description             : Ambarella EXT 
Gen Media Version               : 0 
Gen Flags                       : 0 0 0 
Gen Graphics Mode               : ditherCopy 
Gen Op Color                    : 32768 32768 32768 
Gen Balance                     : 0 
Other Format                    : text 
Warning                         : [minor] The ExtractEmbedded option may find more tags in the movie data 
Avg Bitrate                     : 16 Mbps 
Image Size                      : 2560x1440 
Megapixels                      : 3.7 
Rotation                        : 0

Очевидно, что в этом случае координаты показаны не будут, но приведенная в конце вывода строка подсказывает, что с помощью опции ExtractEmbedded можно извлечь дополнительные данные.

exiftool -ExtractEmbedded GRMN0247.MP4  
ExifTool Version Number         : 11.30 
File Name                       : GRMN0247.MP4 
... 
Sample Time                     : 0 s 
Sample Duration                 : 1.00 s 
GPS Latitude                    : 58 deg 33' 6.44" N 
GPS Longitude                   : 49 deg 41' 9.18" E 
GPS Speed                       : 41 
GPS Speed Ref                   : mph 
Sample Time                     : 1.00 s 
Sample Duration                 : 1.00 s 
GPS Latitude                    : 58 deg 33' 6.10" N 
GPS Longitude                   : 49 deg 41' 9.26" E 
GPS Speed                       : 38 
GPS Speed Ref                   : mph 
...

Sample Time                     : 0:00:57 
Sample Duration                 : 1.00 s 
GPS Latitude                    : 58 deg 32' 56.32" N 
GPS Longitude                   : 49 deg 41' 11.59" E 
GPS Speed                       : 41 
GPS Speed Ref                   : mph 
Sample Time                     : 0:00:58 
Sample Duration                 : 1.00 s 
GPS Latitude                    : 58 deg 32' 55.93" N 
GPS Longitude                   : 49 deg 41' 11.69" E 
GPS Speed                       : 42 
GPS Speed Ref                   : mph 
Avg Bitrate                     : 16 Mbps 
Image Size                      : 2560x1440 
Megapixels                      : 3.7 
Rotation                        : 0 
GPS Position                    : 58 deg 33' 6.44" N, 49 deg 41' 9.18" E

Здесь уже можно видеть координаты и скорость для каждого интервала измерения (1 секунда). В конце вывода показаны координаты начальной точки трека. Далее приведем выводимые данные к более удобному для последующей обработки формату с помощью опции -s (сокращенные имена тегов) и -c FMT (формат вывода координат.

exiftool -ExtractEmbedded -s -c "%.6f degrees" GRMN0247.MP4     
ExifToolVersion                 : 11.30 
FileName                        : GRMN0247.MP4 
...
SampleTime                      : 0 s 
SampleDuration                  : 1.00 s 
GPSLatitude                     : 58.551789 degrees N 
GPSLongitude                    : 49.685883 degrees E 
GPSSpeed                        : 41 
GPSSpeedRef                     : mph 
SampleTime                      : 1.00 s 
SampleDuration                  : 1.00 s 
GPSLatitude                     : 58.551695 degrees N 
GPSLongitude                    : 49.685905 degrees E 
GPSSpeed                        : 38 
GPSSpeedRef                     : mph 
... 
SampleTime                      : 0:00:58 
SampleDuration                  : 1.00 s 
GPSLatitude                     : 58.548870 degrees N 
GPSLongitude                    : 49.686580 degrees E 
GPSSpeed                        : 42 
GPSSpeedRef                     : mph 
AvgBitrate                      : 16 Mbps 
ImageSize                       : 2560x1440 
Megapixels                      : 3.7 
Rotation                        : 0 
GPSPosition                     : 58.551789 degrees N, 49.685883 degrees E

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

exiftool -ExtractEmbedded -s -n GRMN0247.MP4         
ExifToolVersion                 : 11.30 
FileName                        : GRMN0247.MP4 
... 
SampleTime                      : 0 
SampleDuration                  : 1 
GPSLatitude                     : 58.5517889633775 
GPSLongitude                    : 49.6858826838434 
GPSSpeed                        : 41 
GPSSpeedRef                     : M 
SampleTime                      : 1 
SampleDuration                  : 1 
GPSLatitude                     : 58.5516952537 
GPSLongitude                    : 49.6859051473439 
GPSSpeed                        : 38 
... 
SampleTime                      : 57 
SampleDuration                  : 1 
GPSLatitude                     : 58.5489767510444 
GPSLongitude                    : 49.6865523140877 
GPSSpeed                        : 41 
GPSSpeedRef                     : M 
SampleTime                      : 58 
SampleDuration                  : 1 
GPSLatitude                     : 58.5488704685122 
GPSLongitude                    : 49.6865802258253 
GPSSpeed                        : 42 
GPSSpeedRef                     : M 
AvgBitrate                      : 16020223 
ImageSize                       : 2560x1440 
Megapixels                      : 3.6864 
Rotation                        : 0 
GPSPosition                     : 58.5517889633775 49.6858826838434

Здесь мы уже просто получаем готовые для обработки числовые значения времени, координат и скорости. Но тут возникает некоторая неясность со стартовым временем, поскольку в метаданных время создания (начало записи) и изменения (очевидно, что это конец записи) совпадают

Track Create Date               : 2020:08:19 10:22:47 
Track Modify Date               : 2020:08:19 10:22:47

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

Отметим, что время указывается для часового пояса UTC (GMT), поскольку в регистраторе задана опция QuickTimeUTC. Возможно, она может быть изменена, но я не стал это проверять, а навскидку в настройках регистратора не увидел. При этом в видеозаписях время выводится в соответствии с заданным в настройках часовым поясом.

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

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

exiftool -QuickTime:all --GPSSpeedRef --GPSPosition --SampleDuration -ExtractEmbedded -s -n <имя файла>

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

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

Написать программу для обработки результатов, извлеченных exiftool, не составит труда, если вы знакомы с каким-либо языком программирования. В приложенном файле представлен текст простой программы на языке PHP, способной извлекать данных из одного файла, файлов, заданных шаблоном, или всех файлов каталога и сохранять результат в формате GPX.

Перечитывание данных EXIF в Gallery3

Иной раз возникает “разночтение” между параметрами EXIF в реальных файлах со снимками и в базе данных Gallery3. У меня, например, по каким-то невыясненным причинам время съемки в базе данных отличалось от EXIF CreateDate на целое число часов. Это оказалось очень неудобным в случае упорядочения снимков в альбомах по дате создания, если снимки в альбом добавлялись в разное время. Т. е. для одних снимков в базе содержались корректные данные, для других – ошибочные.

Возможна и другая ситуация – замена некоторых файлов со снимками путем “прямого копирования”, а не удаления и загрузки новых средствами Gallery3.

В любом случае, хотелось найти в той или иной степени автоматизированное решение для корректировки данных EXIF в БД Gallery3.  Функция “Извлечь Exif данные” проблему не решала, поскольку Gallery3 не видит “обновления” файлов или несоответствия данных в базе и реальных снимках. Значит нужно найти способ сказать программе, что данные нужно обновить. После непродолжительных раскопок выяснилось, что флагом несоответствия БД и EXIF является поле dirty в таблице prefix_exif_records (вместо prefix в вашей базе данных будет использоваться заданный при установке системы префикс). Если устновить для нужной строки (снимка) в этом поле значение 1, программа увидит несоответствие и операция “Извлечь Exif данные” будет реально выполнена для нужного снимка с корректировкой записей в базе данных.

В моем случае было не очевидно для каких снимков  дата съемки указана ошибочно, поэтому я просто объявил некорректными все записи с помощью SQL-запроса

UPDATE `prefix_exif_records` set dirty=1 where `item_id` like "%"

В результате программа сочла все 6772 снимка имеющими в базе некорректные данные и согласилась обновить их. Операция заняла лишь несколько минут и теперь все снимки соответствовали содержимому базы данных.

 

Часы Amazfit в качестве GPS-трекера

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

Поэтому при возникновении некоторое время назад мысли приобрести “умные” часы, остановился на модели Amazfit, где был заявлен приемник GPS. Однако “в лоб” извлечь трек в каком-либо доступном формате удалось не сразу, хотя приложения Andriod показывали треки на карте, а за небольшую плату даже предлагали экспорт в формат GPX с отправкой данных по электронной почте. Можно и так, но хотелось все-таки получить исходные данные, а не то, что сочли нужным экспортировать неизвестные разработчики.

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

/storage/emulated/0/amazfit/amazfitnotify

Очевидно, что первая часть пути /storage/emulated/0 зависит от конкретного устройства и места установки программы, а остальное с большой вероятностью не меняется от устройства к устройству. Сам файл называется у меня backupAuto.nak. Как уже было отмечено, файл оказался архивом zip, во всяком случае его содержимое легко извлекается с помощью unzip. Внутри архива обнаружилось несколько файлов с именами logReportGPSDataX.bak, где X – целое число. У меня значения X начинались с нуля. Каждый из этих файлов содержит данных GPS, а именно, записи, содержащие долготу, широту, высоту над уровнем моря и временную метку. Записи в файле имеют вид

{"rush_id":"f7700b87-2e6b-4f0c-82ab-764e727af178","rush_version":1,"altitude":"40.0","latitude":"60.044675","longitude":"30.34232167","timestamp":"1548940025778"}

где интересующие нас поля просто очевидны. Время указано в формате Unixtime, который не составит труда преобразовать в привычные человеку значения. Геоданные же указаны просто в явном виде и достаточно их прочесть из файла. Немножко удивило отсутствие привязок к полушариям (запад-восток, север-юг), но они могут указываться знаками, а я был в северном и восточном полушарии, где традиционно долготу и широту указывают со знаком плюс, который в файлах зачастую опускают. Окажусь в другом полушарии – уточню. Хотя даже если это никак не указывается, проблем особых не возникнет, поскольку уж полушарие, где человек находился, он легко запомнит. Если конечно не ходить туда-сюда около Гринвичского меридиана или экватора.

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

{"GPSData":[
{"rush_id":"cdc11afa-ad88-4e99-8c00-2f4411671a04","rush_version":1,"altitude":"40.0","latitude":"60.04434167","longitude":"30.34196167","timestamp":"1548940025756"},
{"rush_id":"f53d8e15-2c58-47a4-9245-f42d418c9d06","rush_version":1,"altitude":"40.0","latitude":"60.04439833","longitude":"30.341975","timestamp":"1548940025757"},
{"rush_id":"262ab1ca-a8f2-4d8d-910b-621661abf1de","rush_version":1,"altitude":"40.0","latitude":"60.04449833","longitude":"30.34194833","timestamp":"1548940025758"},
{"rush_id":"e15defc2-99c0-48d6-bc2b-469faac3b18b","rush_version":1,"altitude":"40.0","latitude":"60.04459","longitude":"30.34192","timestamp":"1548940025759"},
{"rush_id":"e7fe54af-bce4-4644-9183-8e6edfe495af","rush_version":1,"altitude":"40.0","latitude":"60.04462833","longitude":"30.34192","timestamp":"1548940025760"},
{"rush_id":"7738779c-6a72-4ea7-a0e4-a3d44354f115","rush_version":1,"altitude":"40.0","latitude":"60.044615","longitude":"30.34192333","timestamp":"1548940025761"},
{"rush_id":"9dc1f78b-4138-4b43-a869-5ebd8ad0064d","rush_version":1,"altitude":"40.0","latitude":"60.044615","longitude":"30.34189833","timestamp":"1548940025762"},
{"rush_id":"265442ba-9d3d-4af0-abf7-88854350e96c","rush_version":1,"altitude":"40.0","latitude":"60.0446","longitude":"30.34195167","timestamp":"1548940025763"},
{"rush_id":"d455ec29-c85b-47c0-b223-16f421d6a396","rush_version":1,"altitude":"40.0","latitude":"60.04459833","longitude":"30.34199833","timestamp":"1548940025764"},
{"rush_id":"b04f160a-2bf8-430a-84c9-e2faf38d1e69","rush_version":1,"altitude":"40.0","latitude":"60.044595","longitude":"30.34204","timestamp":"1548940025765"},

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

Программа для извлечения тегов GPS из файлов регистратора Garmin DashCam 20

Программа написана исключительно для решения конкретной задачи извлечения данных GPS из видеофайлов регистратора Garmin DashCam 20 и не претендует на отсутствие ошибок или решение каких-либо иных задач. Несмотря на использование интерпретатора PHP, программа наверняка не будет корректно работать в среде Windows без переделок, связанных с передачей и разбором параметров командной строки в случаях, когда параметром является не имя отдельного файла, а шаблон или имя каталога. Прошу прощения, но мне лень было с этим разбираться, да и Windows под рукой не было. Сделайте сами, если нужно. К тому же в среде Windows можно воспользоваться программой от Garmin, которая хоть и не способна работать в пакетном режиме, теги из файлов достает достаточно эффективно.

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

Программа создает файлы в формате GPX, именуя их по дате и времени первой записи в треке (YYYYMMDDHHMMSS.gpx) и сохраняя в каталоге с исходными видеофайлами.

Архив с программой в формате ZIP (2494 байта)

Полезные ссылки

GPS Visualizer – on-line служба для преобразования данных GPS в разные форматы отображения на картах.

“Восстановление” поврежденных файлов NEF

Случается такая досада по причине старости фотоаппарата, а иногда и просто из-за дефектов флэшки.

Первый раз у меня такое случилось пару лет назад, когда дефекты обнаружились в нескольких десятках снимков, сделанных D3X, которому шел тогда уже девятый год. Поискал в сети, нашел утилиту fix_corrupted_nef, но она не способна оказалась работать с файлами из этой камеры. Сейчас уже не вспомнить, но как-то проблему в тот раз решил. И забыл, напрочь!

А тут опять! И снова попытки что-то сделать, поиски в сети и отсутствие результатов. А снимок было жалко. Не найдя ничего попытался включить голову и она подсказала – если ты видишь изображение в программах для просмотра (не редактирования), нужно найти такую программу, которая умеет смотреть и сохранять в других форматах. В моем случае результат нашелся с первой попытки – это оказалась стандартная программа просмотра в Linux – gwenview. Она согласилась сохранить файл в формате TIFF и сделала это. Правда только в 8-битовом формате, но это гораздо лучше, чем ничего. Потом ради эксперимента сохранил еще и JPG. Работает.

Очевидно, что этот способ поможет далеко не всегда, но “на безрыбье …”

Кстати, потом покопался еще в сети и нашел, что подобным образом решают проблему разные люди в разных ОС. Для Windows обычно упоминается IrfanView.

Краткие рекомендации по сборке фотопанорам с помощью программы Hugin

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

Hugin (PDF)

Программа имеет очень широкий набор функций и параметров, разбираться с которыми можно достаточно долго и продуктивно. Ниже приведен простенький алгоритм, позволяющий получить достаточно хорошие результаты, практически не делая ничего вручную. Тексты и фрагменты экрана соответствуют сборке программы версии 2014.0.0 для Linux, поэтому у вас могут наблюдаться некоторые расхождения, но смысл уловить можно в любом случае. Итак, вперед.

1. После установки программы она появится с меню «Старт» и, возможно, на рабочем столе. Запустите ее удобным способом. При первом запуске после установки программа будет использовать английский интерфейс. Мне он представляется более удобным, но здесь я покажу, как переключиться в русский язык и далее примеры и рекомендации будут даваться для русского интерфейса программы.

2. В главном меню программы выберите Edit-Preferences после чего на экране откроется диалог Preferences — Hugin с активной по умолчанию вкладкой General. Она то и нужна нам для выбора языка интерфейса. Нажмите кнопку раскрытия списка языков справа от текста Language и выберите удобный для вас язык (Russian).

Preferences - hugin_008

Рисунок 1 Выбор языка интерфейса

3. Выбрав язык, нажмите кнопку OK в показанном на рисунке 1 диалога. Далее программы нужно закрыть (меню File-Quit  или клавиши Ctrl+Q). Закрыв программу, запустите ее снова и наслаждайтесь работой с русским интерфейсом.

Hugin - сборщик панорам _009

Рисунок 2 Главное окно программы с русским интерфейсом

4. Снимки для сборки можно добавить непосредственно из главного окна (кнопка «Добавить снимки») но я покажу вам более простой и эффективный способ. Для начала работы со снимками нажмите кнопочку «Быстрый предпросмотр панорамы». Это 4-я справа кнопочка в ряду значков под главным меню программы (при наведении на нее курсора появится текст с названием кнопки).
5. На экране появится новое окно «Быстрый предпросмотр панорамы» (Рисунок 3). По умолчанию окно отрывается с активной вкладкой (страницей) «Ассистент», которая нам и нужна для начала работы. В левой верхней части окна видна большая кнопка с надписью «1. Загрузить снимки». Нажмите ее и в появившемся на экране диалоговом окне выбора файлов укажите снимки, которые вы надеетесь собрать в панораму с помощью чудо-программы Hugin. Программа умеет работать с изображениями в формате JPEG, TIFF, PNG, HDR, EXR. На мой взгляд собирать программы из JPEG-ов не самое разумное решение, но и это может пригодиться. Я обычно собираю из 16-битовых файлов TIFF, которые создаю из RAW-файлов с помощью программы RAWtherapee, но у вас могут быть свои любимые конвертеры.

Быстрый предпросмотр панорамы_010

Рисунок 3: Диалог предварительного просмотра панорамы

6. Итак, вы указали программе из каких файлов следует собирать панораму. Дальше программа будет работать за вас, а вы можете наслаждаться наблюдением за этим увлекательным процессом, иногда слегка (или посильнее по мере освоения программы) принимая в нем участие. На экране сначала появится небольшое окно «Выполняется ассистент» в котором будут пробегать скорее всего совершенно непонятные сообщения о манипуляциях программы с вашими снимками (Рисунок 4).

Выполняется ассистент_011

Рисунок 4: Окно «Выполняется ассистент»

7. Подождите немножко и программа выведет в окне предварительного просмотра панорамы тот или иной результат.

Быстрый предпросмотр панорамы_013

Рисунок 5: Вкладка «Сдвиг/Смещение»

Если вместо предварительного варианта панорамы появится сообщение об отсутствии вертикальный линий, вы можете добавить эти линии вручную. Для этого следует перейти в редактор контрольных точек и выбрать в обеих панелях один и тот же кадр. Далее в левой панели указываете точку на одном конце нужной линии, а в другом – точку на другом конце. Программа скорей всего автоматически нарисует вторую точку так, чтобы она совпала с первой. В этом случае просто укажите в этой панели нужную точку еще раз и нажмите кнопку “Добавить” (справа внизу). В списке контрольных точек должна появиться строка со свойством “вертикальная линия” или “горизонтальная линия”. Если программа неверно истолкует направление линии, его можно указать вручную в из раскрывающегося списка с нижней части окна справа. После добавления линий вручную может потребоваться сброс автоматически установленных программой параметров. Для этого перейдите на вкладку “Фотографии”, отметьте все снимки и нажмите правую кнопку мыши на какой-либо из строк с отмеченными файлами. Далее выберите вариант “Сброс” и во раскрывшемся списке – “Пользовательские параметры”. Названия могут меняться в зависимости использованного в вашей версии программы перевода, но смысл будет именно такой. После этого можно вручную запустить команду выравнивания снимков, нажав кнопку в окне предварительного просмотра.

8. Для просмотра результата автоматической подготовки перейдите на вкладку «Сдвиг/Смещение» в окне предварительного просмотра. Не факт, что в окне сразу появится что-то, похожее на изображенное на рисунке 5. Если все будет гораздо хуже, нажмите кнопку «Уместить», расположенную второй слева над картинкой. Можно также воспользоваться кнопками «По центру» и «Выпрямить», расположенные слева и справа от кнопки «Уместить». В конце концов получится что-то, похожее на панораму. Если панорама покажется «кривоватой», можно попытаться выбрать тип проекции на вкладке «Проекция». Там много вариантов, о которых можно говорить много и долго, предоставлю вам возможность разобраться с этим самостоятельно. Метод проб и ошибок вполне подойдет, поскольку результаты будут видны сразу и никто не помешает выбрать любой из поддерживаемых программой вариантов проекций. Здесь я лишь отмечу, что во многих случаях программа самостоятельно и достаточно грамотно выбирает тип проекции. Пойдем дальше, поскольку сейчас нам потребуется выполнить некоторое количество действий самостоятельно.
9. Для начала нужно избавиться от контрольных точек, которые программа выбрала недостаточно хорошо. Возвращаемся в главное окно программы. Оно должно где-то найтись на вашем рабочем столе (я обычно просто размещаю окна на разных мониторах и долго искать не приходится). В меню «Правка» выберите команду «Точно скорректировать все точки». Программа непродолжительное время поработает сама и выдаст сообщение о результатах в диалоге «Результат точной коррекции» (Рисунок 6).

Результат точной коррекции_014

Рисунок 6: Диалог с результатами корректировки

10. В этом окне уже содержится прямая подсказка по поводу дальнейших действий, поэтому следует внимательно прочесть приведенный в окне текст. В любом случае следует прочесть последнюю фразу сообщения и нажать клавишу F3.
11. После нажатия клавиши появится диалог «Контрольные точки» в котором приведены данные по уровню соответствия для каждой пары найденных программой контрольных точек (Рисунок 7 слева).

Контрольные точки_015 Контрольные точки_016
До сортировки После сортировки

Рисунок 7: Результаты оптимизации контрольных точек

12. Для простоты удаления ненужных точек разумно отсортировать из по уровню корреляции. Щелкните кнопкой мыши по заголовку колонки «Расстояние». Результат сортировки показан на рисунке 7 справа.
13. В соответствии с рекомендациями диалога «Результат точной коррекции» (Рисунок 6) удалим точки, для которых уровень корреляции меньше 0,81. Просто выделите нужные строки в отсортированном списке и нажмите кнопку «Удалить» в диалоговом окне или клавишу Del на клавиатуре вашего компьютера.
14. После удаления точек закрываем диалог и возвращаемся в главное окно программы, перейдя на вкладку «Фотоснимки» (после процедуры удаления активной в главном окне будет вкладка «Контрольные точки»).
15. На вкладке «Фотоснимки» нам потребуются кнопки оптимизации, расположенные в правом нижнем углу окна (Рисунок 8).

Hugin - сборщик панорам _017

Рисунок 8: Кнопки оптимизации на вкладке “Фотоснимки”

16. Сначала выполним геометрическую оптимизацию. Вариантов оптимизации довольно много, для простоты мы здесь рассмотрим два наиболее употребительных (с остальными разберетесь самостоятельно). Если снимки сделаны с эффективным фокусным расстоянием (реальный фокус, умноженный на кроп-фактор) не менее 70 мм, можно оставить принятый по умолчанию вариант «Позиции (с приращением, начиная с фиксированного снимка). Если же вы пользовались при съемке более широкоугольным объективом (скорей всего это было ошибкой), воспользуйтесь вариантом оптимизации «Все без переноса», выбрав его из раскрывающегося списка.
17. После выбора варианта геометрической оптимизации нажмите кнопку «Вычислить» справа от выбранного варианта.
18. На экране появится диалоговое окно с информацией о процессе оптимизации. Если снимков в панораме не слишком много, то содержимое этого окна вы даже не успеете рассмотреть и сразу увидите сообщение о результатах (Рисунок 9).

Результат оптимизации_018

Рисунок 9: Результаты геометрической оптимизации

19. Значения трех выводимых в окне результатов параметров служат показателями качества совмещения контрольных точек после оптимизации. Эти значения не должны быть большими. Если среднее расстояние между точками или стандартное отклонение имеют значения 10 и более, это говорит о том, что с контрольными точками или самими снимками не все в порядке. В таком случае можно отказаться от результатов оптимизации (кнопка «Нет») и попытаться выбрать из списка другой вариант. Со временем вы научитесь понимать причины непорядка при оптимизации и станете осознанно выбирать нужный вариант, а сейчас будем просто уповать, что у вас появятся цифры, похожие на показанные на рисунке 9 или того меньше. Если значение максимум составляет несколько десятков, можно просто удалить соответствующие точки (оставляю вам это в качестве самостоятельного упражнения).
20. Результаты оптимизации сразу же отражаются в окне предварительного просмотра, которое, как мы помним, расположено на соседнем мониторе 🙂
21. Итак, результаты оптимизации нас устраивают. Жмем кнопку «Да» и переходим к фотометрической оптимизации. Здесь я сделаю небольшое отступление — при подготовке снимков для сборки («цифровая проявка») разумно использовать одинаковые параметры баланса белого цвета и экспозиции для всех снимков. Как это сделать, не мне вас учить.
22. Для фотометрической оптимизации обычно используется принятый по умолчанию вариант «Узкий динамический диапазон» или «Узкий динамический диапазон, переменный баланс белого». Выбрав тот или иной вариант жмем кнопку «Вычислить»
23. Фотометрическая оптимизация обычно занимает чуть больше времени, чем геометрическая. Обычно через несколько секунд появляется диалог с результатами оптимизации (Рисунок 10).

Фотометрическая оптимизация завершена_020

Рисунок 10: Результат фотометрической оптимизации

24. Если значение не среднеквадратичной погрешности не превышает 50, можно согласиться с результатами оптимизации. При большей погрешности нажмите кнопку «Нет» и попробуйте другой вариант оптимизации.
25. Будем считать, что результат нас устраивает и нажмем кнопку «Да». Как и для геометрической оптимизации, результат будет виден в окне предварительного просмотра (Рисунок 3).
26. Основная работа сделана и можно сохранить мета-файл с результатами. Жмем кнопку с изображением диска в главном окне программы или выбираем в меню команду «Файл->Сохранить». Можно также воспользоваться комбинацией клавиш Ctrl+S.
27. Файл сохранен и можно уже заняться сборкой панорамы в окончательный файл. Формат и параметры записи выходного фала можно задать на вкладке «Сшивка» в главном окне программы или воспользоваться установленными по умолчанию параметрами. Эти параметры вы можете задать самостоятельно, используя вкладку «Сборка» диалогового окна «Настройка Hugin» (меню «Файл->Настройки»), показанного на рисунке 11. В верхней части окна укажите нужный формат файла и параметры изображения, зависящие от выбранного формата. Я обычно сохраняю результат в формате TIFF-16 с компрессией LZW, поскольку этот вариант сжатия не вносит потерь. Но тут дело вкуса и личных предпочтений.

Настройки - Hugin_022

Рисунок 11: Диалог параметров сборки

28. Далее возвращаемся в окно предварительного просмотра и работаем в нем до завершения сборки. Активизируем панель «Сдвиг/Смещение» в окне предварительного просмотра. О кнопках «По центру», «Уместить», «Выправить» я коротко уже упоминал и назначение их вполне понятно из названий. На этой вкладке есть еще ряд кнопок, с которыми я предлагаю разобраться самостоятельно. Здесь же немного поговорим о дополнительных геометрических преобразованиях итоговой панорамы.
29. Над изображением панорамы вы увидите три поля со значениями 0, названные «Вокруг вертикали», «Наклон горизонтали» и «Вокруг оптической оси». Названия полей наводят на мысли об их возможном использовании, но тут впору вспомнить о том, что переводчики интерфейсных сообщений совсем не обязательно хорошо знают русский язык и разбираются в фотографии и направлениях в пространстве. Поэтому дальше я немножко расскажу о назначении каждого поля и способах использования.
30. «Вокруг вертикали». Значение этого поля задает изменение панорамы, как будто вы повернетесь относительно висящего на стене снимка вокруг вертикальной оси снимка на угол, заданный в градусах в поле справа от текста. Положительные значения угла соответствуют вашему повороту налево (смещению изображения в окне просмотра направо).
31. «Наклон горизонта». Значение этого поля задает наклон оптической оси объектива относительно горизонта. При положительном значении поля панорама изменится так, как будто вы наклонили объектив к земле на соответствующий угол. Отрицательное значение поля соответствует «задиранию объектива в небо».
32. «Вокруг оптической оси». Этот параметр позволяет контролировать «завал горизонта». При положительных значениях панорама будет повернута по часовой стрелке на заданный угол, при отрицательных — против часовой стрелки.
33. С этими параметрами имеет смысл просто поупражняться на пробных панорамах, чтобы понять их воздействие. Рекомендую лишь (как при упражнениях, так и «в бою») менять не все параметры сразу, а задавать лишь один угол поворота, установив в остальных полях значения 0. Для поворота панорамы нажмите кнопку «Применить» и результат будет выведен в окне предварительного просмотра. Если вы ошиблись при выборе значения, можно полностью отказаться от него, изменив знак числа в поле и снова нажав кнопку «Применить».
Со временем наверное вы научитесь вводить компенсационные значения во всех полях сразу и применять повороты вокруг трех осей сразу. Однако следует отметить, что программа достаточно хорошо все делает сама и пользоваться этими параметрами приходится нечасто.
Можно также управлять поворотом снимка с помощью мыши, «захватывая» изображение и перемещая курсор при нажатой кнопке мыши. Однако мне с моими кривыми руками почти никогда не удавалось добиться таким путем адекватных результатов. Может быть у вас получится лучше.
34. Закончив с поворотами приступим к обрезке панорамы, перейдя на вкладку «Обрезка» (Рисунок 12).

Быстрый предпросмотр панорамы_023

Рисунок 12: Диалог кадрирования панорамы

35. Здесь имеется кнопка «Автообрезка» для оптимального кадрирования результата с точки зрения программы. В большинстве случаев он вполне приемлем, но вы можете задать границы обрезки самостоятельно с помощью мыши или путем указания координат в полях ввода над снимком. С остальными кнопками этого окна я предложу вам разобраться самостоятельно в качестве факультатива. Добавлю лишь, что на вкладке кадрирования имеется возможность выбора нескольких вариантов направляющих линий (желтые линии на рисунке 12) для кадрирования с учетом тех или иных канонов композиции. Это тоже для самостоятельного упражнения.
36. Закончив с кадрированием, возвращаемся на вкладку «Ассистент» в том же окне предварительного просмотра (Рисунок 13).

Быстрый предпросмотр панорамы_026

Рисунок 13: Окончательная сборка панорамы

37. После нажатия кнопки «3. Создать панораму» программа выведет диалоговое окно «Выходные параметры» (), где вы можете выбрать вариант вывода результата и поменять формат результирующего файла. Тут вроде все просто и понятно интуитивно, поэтому не стану отнимать ваше время. Жмем кнопку «ОК»

Выходные параметры_027

Рисунок 14: Диалог «Выходные параметры»

38. Далее появится диалог с предложенным именем файла (алгоритм выбора имени можно задать в диалоге настройки) и каталога для записи панорамы в выбранном формате. Согласитесь с предложенными именами или предложите свои варианты. После нажатия кнопки «Сохранить» программа выведет небольшое диалоговое окно, в котором будет отображаться результат работы промежуточных программ, применяемых при сборке. Процесс сборки в зависимости от числа фалов может занять достаточно продолжительное время. По завершении сборки диалоговое окно автоматически закроется. Если же сборка приведет к ошибке, информация о ней будет выведена в диалоговом окне и процесс сборки прервется. Надеюсь, что это в вашей практике будет встречаться нечасто.


Текст подготовлен на основании личного опыта сборки панорам, которые вы могли видеть на разных фотосайтах, а также на моих сайтах www.nmalykh.org или www.photo4x4.org.
При возникновении тех или иных вопросов, связанных с текстом или описанной в нем программой обращайтесь по приведенному ниже адресу.

Не допускается распространение текста и иллюстраций из данного документа без согласования с автором. Печать документа в единичных экземплярах для личного некоммерческого использования не возбраняется.

Николай Малых
photo@nmalykh.org

Формат GPS-треков видео-регистратора HDC HD-415

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

Фрагмент трек-файла показан на рисунке ниже и подробно описан далее.

V,230114,061506.999,6002.8408,N,03020.7792,E,000.0;
V,230114,061507.999,6002.8408,N,03020.7792,E,000.0;

V,230114,061532.000,6002.8408,N,03020.7792,E,000.0;
V,230114,061533.000,6002.8408,N,03020.7792,E,000.0;
A,230114,061532.725,6002.8794,N,03020.7231,E,000.0;
A,230114,061533.725,6002.8794,N,03020.7231,E,000.0;

Трек GPS записывается в текстовый файл, формат которого показан на рисунке и подробно описан ниже. Расчет координат и скорости выполняется с интервалом в 1 секунду, и полученные результаты записываются в отдельную строку файла. Число записей в каждом трек-файле зависит от продолжительности записи видео-файла. При завершении каждого видео-файла (продолжительность записи определяется настройками — 5, 10, 15 минут или Авто). Размер файла при 10-минутной записи составляет 31200 байт (600 записей по 51 байту + символ перевода строки в конце каждой записи).

Каждая запись имеет размер 51 байт и состоит из 8 полей, разделенных запятыми. В конце строки помещается точка с запятой (;) и символ перевода строки (0A или LF).

Формат записи

Первое поле включает один символ — V или A. Буква V указывается в тех случаях, когда приемник не смог получить требуемых для определения координат и времени сигналов от спутников (не менее 3), буква A говорит о синхронизации устройства со спутниками и определении координат.

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

Второе поле представляет собой целое число, две первых (старших) цифры которого указывают число месяца, следующие две — порядковый номер месяца (1 — январь, 2 — февраль и т. д.) и 2 заключительных указывают последние цифры года в принятом летоисчислении от РХ (например, для обозначения 2014 года будет использоваться значение 14). Таким образом, файл, приведенный на рисунке выше, соответствует дате 23 января 2014 года. Здесь следует отметить, что смена даты происходит после 23 часов 59 минут 59,999 секунд по гринвичскому времени, т. е., в 3 часа по московскому.

Следующее поле представляет собой действительное число с точкой в качестве разделителя целой и дробной части. Две первых цифры целой части указывают час в 24-часовой системе, 2 следующих цифры указывают число минут, прошедших от начала текущего часа. Остальная часть числа (2 последних цифры целой части и вся дробная часть) показывают число секунд, прошедших от начала текущей минуты, с точностью до 1 мсек. После синхронизации со спутниками в поле времени указывается значение, полученное по данным GPS (до этого время берется из внутренних часов устройства). Время указывается для часового пояса UTC, соответствующего «нулевому» меридиану. В приведенном фрагменте файла записи соответствуют времени в Санкт-Петербурге (UTC+3) 9 часов 15 минут (секуды меняются в каждой строке.

В четвертом поле указывается географическая широта текущего местоположения антенны устройства. Поле широты представляет собой действительное число, содержащее по 4 цифры в целой и дробной части. Две первых (старших) цифры указывают широту в градусах, а оставшаяся часть — минуты географической широты с точностью до 0,0001 (0,006 сек).

Следующее поле указывает полушарие — северное (N) или южное (S).

В шестом поле записывается значение географической долготы. Поле содержит 5 цифр в целой части и 4 цифры в дробной. Интерпретация цифр этого поля аналогична интерпретации цифр поля широты, но для указания градусов используются не 2 цифры, как для широты, а три (поскольку широта может принимать значения от 0 до 90 градусов, а долгота — от 0 до 180 градусов).

Буква W в следующем поле указывает на расположение устройства в западном полушарии (к западу от гринвичского меридиана), буква E – в восточном.

Таким образом, последняя строка приведенного выше примера указывает на расположение устройства в точке с координатами 60 градусов 02 минуты 52,764 секунд северной широты и 30 градусов 20 минут 43,386 секунд восточной долготы (северная часть Санкт-Петербурга).

Последнее поле записи показывает скорость движения устройства в единицах, наиболее похожих на миль/час, т. е. для перевода в привычные значения это поле следует умножить на 1,609344.

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