Ранее компания столкнулась с проблемой удаления случайно удаленной фотографии с флешки. Веря в то, что восстановление данных не представляет особых сложностей благодаря существующим инструментам, приступили к решению проблемы. Однако попытка использования программы R-Studio, которая предназначена для работы с содержимым носителей информации, привела к неудовлетворительному результату — изображение оказалось поврежденным.
Быстро выяснилось, что драйвер файловой системы разделил фотографию на несколько последовательных блоков (кластеров). Удалось найти только один набор блоков с заголовком формата JPG, а информация о остальных была потеряна. Однако сами блоки на флешке остались, и это давало надежду на успешное восстановление изображения.
Возник вопрос: «Что делать?»
После некоторых исследований было замечено, что если вручную добавить «правильный» блок данных (т.е. блок, который ранее находился на данном смещении), то визуально изображение практически не изменится, за исключением уменьшения серой полосы внизу. Однако, если вместо правильного блока использовать случайно выбранный блок данных, появляется «артефакт» — фрагмент изображения, резко отличающийся от окружающего его контента.
Решение возникло само собой — перебирать свободные блоки 32-гигабайтной флешки и дописывать каждый блок в конец восстановленной фотографии. Затем проводить анализ результатов, выводить изображение на экран и проверять наличие артефактов. Для работы с поврежденными изображениями можно использовать Python-библиотеку Pillow.
Однако возникает новая проблема — невозможно ручками просмотреть миллион изображений. Необходим алгоритм, который бы автоматически определял, насколько подходит произвольный блок данных в качестве следующего блока для восстановленного изображения. Здесь на помощь приходит искусственный интеллект. Чтобы реализовать идею, начали с использования классических методов машинного обучения.
Сначала проводился анализ данных и изучение свойств областей на границе исходного и добавленного фрагментов изображения.
Для более подробного объяснения, помимо фрагмента неизвестного животного и красного прямоугольника, каждому пикселю области соответствует следующий набор признаков:
- x, y — координаты пикселя на изображении;
- r, g, b — тройка чисел, кодирующих цвет пикселя.
Кроме того, на основе координат пикселя и информации об исходном изображении можно ввести следующие признаки:
- original — принимает значение 1, если пиксель принадлежит исходному изображению, иначе 0;
- border — принимает значение 1, если пиксель лежит на границе между исходным изображением и добавленным фрагментом, иначе 0.
Теперь пришло время объединить все векторные представления пикселей области и создать датасет (назовем его «pixels»). Используя RGB-координаты пикселей, можно построить кластерную структуру палитры изучаемой области. Для этого применялся алгоритм k-means с числом кластеров, равным 16. Метка кластера, соответствующая цвету пикселя, была использована как дополнительный признак (назовем его «cluster»).
Используя методы машинного обучения, разработанные в НТЦ «Вулкан», смогли решить проблему восстановления удаленных файлов. Опыт показал, что с помощью алгоритмов машинного обучения можно эффективно восстанавливать потерянные данные и воссоздавать поврежденные изображения. Это может быть полезным как для обычных пользователей, так и для компаний, сталкивающихся с потерей важных информационных ресурсов. Продолжение статьи о том, как НТЦ «Вулкан» достигает успешных результатов в этой области, доступно ниже.