Abstract
The article presents the results of using the PyHum open source library for decoding and analyzing data received from Humminbird sonars. The structure of the code, functionality, as well as the advantages and disadvantages of this library in comparison with proprietary software are considered. As a result of the work done, we came to the conclusion that the PyHum library is a convenient and functional tool for data analysis, while the proprietary software has limited functionality. PyHum is open source to extend the functionality of this library. In the near future, we plan to rewrite the code of this library in Python 3, since support for Python 2 is currently discontinued.
Keywords: side-scanning sonar, Humminbird, PyHum library, remote sensing, shipwrecks
Введение
Ценность арктических водных ресурсов не только природная, но и историческая. В решении вопроса об исследовании богатейшего подводного мира водоемов Крайнего Севера, важнейшим инструментом являются гидроакустические системы. Для интерпретации данных с различных гидроакустических устройств, главным образом гидролокаторов бокового обзора (ГБО), используется комплекс специализированных программ.
В настоящее время в Сибирском государственном университете науки и технологий имени академика М.Ф. Решетнева реализуется междисциплинарный проект «Географическая информационная система «Енисей–Арктика» [1].
Часть исследователей проекта занимается сбором полевых данных при помощи гидроакустических систем. Собранные данные кодируются и хранятся в двоичном 8-ми битном виде. Это дает возможность существенно уменьшить объем памяти, необходимой для хранения данных. Полученные данные можно дешифрировать и произвести осмотр дна непосредственно на самом устройстве. В тоже время, зная алгоритм кодирования данных, их можно декодировать и провести дальнейший анализ при помощи стороннего программного обеспечения. Решение подобных задач требует как правило большого количества вычислительных ресурсов. Для этой цели мы задействовали специальный комплекс, состоящий из нескольких компьютеров – вычислительный кластер [2]. Этот подход позволяет существенно сократить время обработки данных, однако возникает необходимость создания параллельных алгоритмов и программ, адаптированных к использованию на многопроцессорных вычислительных системах. Новые алгоритмы дадут возможность распознавать заданные объекты на изображении.
Одним из устройств для исследования в данной области является приобретенный прибор, обеспечивающий возможность совмещения «эхолота» с гидролокатором бокового обзора Onix 8 cxi SI Combo от фирмы Humminbird (Рис. 1). Данный аппарат при сравнительно невысокой цене, малых габаритах и мощности звукового излучения не уступает по качеству визуализации своим более дорогим «собратьям» и моделям других производителей [3]. Несмотря на то, что данное устройство позиционируется как устройство для рыбалки, его вполне можно использовать как вспомогательный инструмент для поиска подводных объектов [4].
Рисунок 1. Onix 8 cxiSICombo от фирмы Humminbird
Работа гидролокатора
Среди множества устройств для изучения дна водоемов бесконтактными методами наиболее практичными являются гидролокаторы и эхолоты. Используя принципы гидроакустики, эти устройства позволяют обнаружить подводные объекты. В таблице 1 представлены сведения о зависимости дальности действия от частоты акустического сигнала [5].
Таблица 1. Зависимость дальности действия от частоты акустического сигнала
Частота акустического сигнала, кГц | Длина волны акустического сигнала, м | Дальность действия, км |
0,1 | 15 | 1000 и больше |
1 | 1,5 | 100 и больше |
10 | 0,15 | 10 |
25 | 0,06 | 3 |
50 | 0,03 | 1 |
100 | 0,015 | 0,6 |
500 | 0,003 | 0,15 |
1000 | 0,0015 | 0,05 |
При работе эхолота от излучателя (трансдьюсера), расположенного вертикально относительно дна водоема, посылается звуковой сигнал определенной частоты. Этот сигал отражается (в идеале) от донного объекта. Устройство считает время между отправлением и прибытием сигнала, а после считается глубина, которую прошел сигнал. Далее данные о глубине записываются и цикл повторяется. Однако наибольший интерес представляют гидролокаторы бокового обзора. Эти устройства могут излучать звуковые волны по 5 лучей разной направленности, которые, в свою очередь, имеют разные углы и частоты. Один луч обязательно расположен вертикально, другие – по бортам судна. Humminbird Onix 8 cxi SI Combo имеет встроенную функцию ГБО.
Кодирование данных
Рассматриваемые гидролокаторы от Humminbird записывают данные с 5 лучей разной направленности и частоты. Эти данные представляют собой зашифрованные двоичные 8 битные файлы.
В качестве примера структура файлов в памяти гидролокатора Onix Humminbird представлена на Рис. 2.
Рисунок 2. Структура файлов на памяти гидролокатора бокового обзора
Рисунок 3. Вид файлов гидролокатора бокового обзора в корневой папке
Исходя из Рис. 2 и 3, в памяти устройства имеется три типа файлов: .DAT, .IDX, .SON. Каждый тип файла рассмотрим по отдельности. Самый первый тип файла *.DAT. Для всех моделей этот файл является бинарным и его требуется расшифровывать. Для модели Onix его можно открыть обычным текстовым редактором и увидеть всю информацию, потому что кодировка данного файла сопоставима с таблицей ASCII. В нем содержится базовая информация о сонаре: время начальной записи, начальной позиции и настройки сонара. Полный список параметров, которые можно извлечь из этого файла [6]:
1. Код воды (water code) – определяет тип воды по значениям: ‘0’ – свежая вода (freshwater), ‘1’ – очень соленая вода (deep salt), ‘2’ – слабосоленая вода (shallow salt), ‘3’ – неизвестная соленость воды (unknown).
2. Название эхолота (sonar name) – числовой код сообщаемый прибором.
3. Время unix (unix time) – время в секундах по Unix.
4. Универсальная поперечная проекция Меркатора (utm x coordinate).
5. Универсальная поперечная проекция Меркатора (utm y coordinate).
6. Имя файла (filename) – название файла *.DAT.
7. Количество сигналов (pings number of records) – количество сигналов (pings) в *.SON файлах.
8. Время между двумя записями (record length) – промежуток времени между последовательными записями.
9. Количество байтов в строке для ping (line size) – количество байтов нужные для кодирования одного ping в *.SON файле.
В основном, в *.DAT файле самая важная информация касательно данных это: количество отправленных-принятых сигналов (ping) и количество байт (line size), используемых для записи одного такого сигнала.
Файлы *.IDX идут неразрывно с файлами *.SON, каждому файлу *.SON соответствует свой файл *.IDX. Дело в том, что в *.IDX содержится информация об индексах последовательных сигналов (pings) в соответствующем файле *.SON. Под индексом подразумевается номер байта в файле *.SON. То есть, если есть необходимость прочитать 5-й сигнал, то из файла *.IDX берется значение байта для 5-го сигнала и считывается информация в *.SON согласно длине записи одного сигнала (line size).
В файлах *.SON содержатся записанные эхограммы. Параметры, которые можно извлечь из данного файла:
1. Координаты (широту UTM x coordinate, долготу UTM y coordinate).
2. Время в миллисекундах.
3. Частоту луча (=0, 50 or 83 kHz; =1 200 kHz; =2 SI Port; =3 SI Starboard).
4. Длину предложения – количество байт, которые отводятся на 1 эхограмму. Читаются они через заголовок. Заголовок – это последовательность байтов, где каждый байт несет в себе информацию о глубине, частоте и так далее.
5. Глубину в сантиметрах.
6. Скорость передвижения лодки в см/сек.
Стоит также отметить, для алгоритмов дешифрирования компания Humminbird использует побитовый сдвиг.
Программы для чтения
Для декодирования записанных данных на гидролокаторах фирмы Humminbird используются следующие программы: Reefmaster, HumViewer и PyHum.
Reefmaster – это коммерческое приложение для персональных компьютеров [7] на базе операционной системы Windows, которое использует данные из файлов журнала эхолота для создания трехмерных подводных карт в сочетании с многоканальным средством просмотра эхолота и графическим управлением путевыми точками (Рис.4). Больше позиционируется как программа для рыболовов.
Рисунок 4. Трек движения судна в программе Reefmaster
HumViewer — это бесплатная программа [8] для просмотра записей эхолотов Humminbird (Рис. 5). Устанавливается под операционными системами Windows и MacOS. Модель гидролокатора Humminbird ONIX не поддерживается. Главный минус данной программы – закрытый исходный код и ограниченный функционал программы; в целом, она может использоваться для просмотра файлов, а не их анализа.
Рисунок 5. HumViewer пример работы в программе.
И последняя программа для расшифровки данных называется PyHum [9]. Это программа с открытым исходным кодом, написанная на языке программирования Python. Она совместима с большинством моделей гидролокаторов фирмы Humminbird. Данная программа имеет модульный набор инструментов (Рис. 6) и обширный функционал для первичной и вторичной обработки данных. Возможность бесплатного приобретения и доработки кода, а также исследование новых алгоритмов, предоставленных разработчиком Даниэлем Бускомбом (Daniel Buscombe) имеет свою ценность. Поэтому данная программа рассматривается как основная для расшифровки данных с гидролокаторов Humminbird.
Рисунок 6. GUI интерфейс библиотеки PyHum
Исследование библиотеки PyHum
В процессе исследования данной библиотеки были выявлены следующие недостатки: медленная скорость работы языка Python, которую разработчики попытались компенсировать, используя доработку языка CPython и многопоточность. CPython способен увеличить скорость работы программы, написанной на языке Python на 20%. Использование параллельных библиотек позволяет ускорить программу, однако это приводит к увеличению объема используемой оперативной памяти, которой может не хватить для завершения декодирования. В зависимости от конфигурации компьютера можно выбрать оптимальное количество процессов, дающее максимальное ускорение и не приводящее к переполнению объема оперативной памяти.
Другая проблема библиотеки в том, что разработчики с 2019 г. не поддерживают программу, не развивают ее, и она в плане языка Python уже устаревает, так как написана на Python 2.7 версии. Это создает некоторые проблемы при установке программы, подборе пакетов для ее нормального функционирования. Однако, несмотря на эти недостатки, PyHum имеет богатый функционал для работы с данными от гидролокаторов фирмы Humminbird.
Функционал библиотеки PyHum представлен в виде модульной структуры [10]:
1. «Read» – модуль чтения, декодирует необработанные данные, содержащиеся в файлах *.SON, для создания временного ряда данных.
2. «Correct» – модуль корректировки, применяет основные геометрические и радиометрические поправки для учета воздействия условий окружающей среды (например, звукопоглощения) и настроек эхограмм (например, уровня сигнала и диаграммы направленности).
3. «Remove Shadows» – модуль удаления теней, используется для визуального сегментирования и удаления областей, лишенных текстуры (например, водяного столба и акустических теней), которые существуют в ближнем и дальнем полях эхограммы.
4. «Map Sidescan» – модуль карты, используется для проецирования откорректированной и отфильтрованной эхограммы в известную систему координат с использованием информации о местоположении и навигации, собранной с помощью прилагаемой GPS-антенны, в единицах децибел ватт (дБВт). В [11] подробно изложены методы обработки данных и акустические поправки, закодированные в программном обеспечении.
5. «Texture» – модуль текстуры, считает радиометрические скорректированные данные Humminbird, выполняет текстовый анализ, используя спектральный метод [11]. Данные разбиваются на ячейки и в каждом окне анализируются спектрально, чтобы вычислить масштаб длины текстуры для каждого окна.
6. «Map Texture» – модуль позволяет загружать фрагменты бокового сканирования и создавать облако точек с пространственно привязанными значениями масштаба длины текстуры. Создает файлы с расширением *.kml, которые рассчитаны по эхограммам бокового обзора.
7. «Bed Class» – анализ первого коэффициента e1 – «шероховатость» и второго e2 - «твердость», эхо возвращается от высокочастотного направленного вниз эхолота. Генерирует обобщенные акустические параметры в целях точечной классификации погруженных субстратов/растительности. Создает некоторые элементарные графики KML файла и текстовые файлы.
Если обобщить, то получается, что PyHum позволяет читать данные в первичном виде, позволяет извлекать данные о местоположении, скорости судна, глубине, времени, извлекать трек движения. Но самое главное – можно удалять ненужные тени со снимков и производить сглаживание, различные корректировки, делая изображение более читаемым. Стоит также обратить внимание, что в программе есть алгоритм, позволяющий определять тип грунта. Также в библиотеку встроена “защита от ошибок”, касающаяся файлов *.IDX. Заключается она в том, что если файлы *.IDX отсутствуют или повреждены, то их можно создать самому благодаря алгоритму Кнута-Морриса-Пратта. Алгоритм позволяет отыскать начало каждого сигнала в файле *.SON по записи строки целых чисел [192, 222, 171, 33, 128] и восстановить файлы *.IDX.
В процессе декодирования данных с Humminbird ONIX с помощью библиотеки PyHum было обнаружено затонувшие судно в Игарской протоке. Длина корабля 80 метров и ширина 14 м (Рис. 7).
Рисунок 7. Затонувший корабль через PyHum
На снимке четко видны очертания корабля. Мы предполагаем, что это баржа 1930–50-х годов.
Рисунок 8. Местоположение затонувшего корабля через Reefmaster (на гидроакустическом снимке пропорции судна существенно искажены)
Итоги исследования и перспективы развития.
В итоге проделанной работы мы пришли к выводу, что библиотека PyHum является удобным и функциональным инструментом для анализа данных, получаемых с гидролокаторов от фирмы Humminbird, в то время как проприетарное программное обеспечение имеет ограниченный функционал. Открытый код PyHum позволяет расширять функциональные возможности данной библиотеки. В 2021 году мы планируем переписать код данной библиотеки на языке Python 3, поскольку поддержка Python 2 в настоящее время прекращена.
Работа выполнена при поддержке гранта Президента Российской Федерации на развитие гражданского общества «Некоммерческая междисциплинарная научно-образовательная платформа «Енисейская Арктика» (проект № 18-2-017584).
Список литературы:
1. Goncharov A. E. A GIS for the Yenisei: an overview of maritime industrial archaeology on the Yenisei River and prospects for its development // IOP Conference Series: Materials Science and Engineering. 2020. 822. 012040.
2. Астафьев Д. С., Веревкин П. Н., Мадисон Р. А., Федоров В. А. Виртуальный вычислительный кластер. Решетнёвские чтения. Электронное издание 2019 г. URL: https://disk.sibsau.ru/index.php/s/L9sHGlDFLhGZbCx (дата обращения 04.10.2020г.)
3. Астафьев Д. С., Веревкин П. Н. Применение библиотеки PyHum для анализа гидрографических данных. Актуальные проблемы авиации и космонавтики. Электронное издание 2019 г. URL: https://disk.sibsau.ru/index.php/s/7sAiJGJW5LkapdR (дата обращения 04.10.2020г.)
4. Hamill D., Buscombe D., Wheaton J.M. Alluvial substrate mapping by automated texture segmentation of recreational-grade side scan sonar imagery // PLoS ONE. 2018. 13(3): e0194373. URL: https://doi.org/10.1371/journal.pone.0194373 (дата обращения 04.10.2020г.)
5. Фирсов. Ю. Г. Основы гидроакустики и использования гидрографических сонаров. Санкт-Петербург, 2010.
6. Buscombe D. Binary Sonar Data Formats. URL:https://github.com/dbuscombe-usgs/PyHum/blob/master/docs/data_formats.rst (дата обращения 04.10.2020 )
7. Reefmaster. URL: https://reefmaster.com.au/index.php/products/reefmaster (дата обращения 04.10.2020 )
8. HumViewer. URL:http://humviewer.cm-johansen.dk/(дата обращения 04.10.2020 )
9. Buscombe D. PyHum. URL: https://github.com/dbuscombe-usgs/PyHum (дата обращения 04.10.2020 )
10. Buscombe D. Modules. URL: https://github.com/dbuscombe-usgs/PyHum/blob/master/docs/modules.rst/ (дата обращения 04.10.2020 )
11. Buscombe D., Grams, P.E., and Smith, S. (2015) “Automated riverbed sediment classification using low-cost sidescan sonar”, Journal of Hydraulic Engineering, 10.1061/(ASCE)HY.1943-7900.0001079, 06015019. URL: https://ascelibrary.org/doi/full/10.1061/%28ASCE%29HY.1943-7900.0001079 (дата обращения 05.12.2020 )
References
1. Goncharov A. E. A GIS for the Yenisei: an overview of maritime industrial archaeology on the Yenisei River and prospects for its development // IOP Conference Series: Materials Science and Engineering. 2020. 822. 012040.
2. Astafiev D. S., Verevkin P. N., Madison R. A., Fedorov V. A. Virtual'nyj vychislitel'nyj klaster. Reshetnyovskie chteniya. Elektronnoe izdanie 2019 g. [The virtual computing cluster. Reshetnev readings. Electronic edition 2019]. URL: https://disk.sibsau.ru/index.php/s/L9sHGlDFLhGZbCx (access date 04.10.2020)
3. Astafiev D. S., Verevkin P. N. Primenenie biblioteki PyHum dlya analiza gidrograficheskih dannyh. Aktual'nye problemy aviacii i kosmonavtiki. Elektronnoe izdanie 2019 g. [Using the PyHum library to analyze hydrographic data. Actual problems of aviation and cosmonautics. Electronic edition 2019]. URL: https://disk.sibsau.ru/index.php/s/7sAiJGJW5LkapdR (access date 04.10.2020)
4. Hamill D., Buscombe D., Wheaton J.M. Alluvial substrate mapping by automated texture segmentation of recreational-grade side scan sonar imagery // PLoS ONE. 2018. 13(3): e0194373. https://doi.org/10.1371/journal.pone.0194373
5. Firsov. YU. G. Osnovy gidroakustiki i ispol'zovaniya gidrograficheskih sonarov. Sankt-Peterburg, 2010. [Fundamentals of hydroacoustics and the use of hydrographic sonars. St. Petersburg, 2010.]
6. Buscombe D. Binary Sonar Data Formats. URL:https://github.com/dbuscombe-usgs/PyHum/blob/master/docs/data_formats.rst (access date 04.10.2020)
7. Reefmaster. URL: https://reefmaster.com.au/index.php/products/reefmaster (access date 04.10.2020)
8. HumViewer. URL: http://humviewer.cm-johansen.dk/ (access date 04.10.2020)
9. Buscombe D. PyHum. URL: https://github.com/dbuscombe-usgs/PyHum (access date 04.10.2020)
10. Daniel Buscombe. Modules. URL: https://github.com/dbuscombe-usgs/PyHum/blob/master/docs/modules.rst/ (access date 04.10.2020)
11. Buscombe, D., Grams, P.E., and Smith, S. (2015) “Automated riverbed sediment classification using low-cost sidescan sonar”, Journal of Hydraulic Engineering, 10.1061/(ASCE)HY.1943-7900.0001079, 06015019. URL: https://ascelibrary.org/doi/full/10.1061/%28ASCE%29HY.1943-7900.0001079 (access date 05.12.2020)
This is an open access article distributed under the terms of the Creative Commons Attribution License (CC-BY 4.0)