- PVSM.RU - https://www.pvsm.ru -
Привет.
Хочу представить вам небольшой проект, который я написал вместо во время сессии.
Суть такова: это классификатор, определяющий наличие стеганографии в изображении. Сразу стоит отметить, что классификатор получился довольно простым: он работает с методом LSB [1], где заменяется один последний бит 8-битного RGB изображения, и проверялся только на полностью заполненных стегоконтейнерах.
Поиграть с тем, что получилось, можно тут [2]. Примеры картинок (кстати, принимаются только png) есть здесь [3].
Дело в том, что стегоанализ можно рассматривать как задачу двухклассовой классификации машинного обучения. Каждый объект (картинку) необходимо описать набором признаков для дальнейшей обработки. Для этого будет использоваться алгоритм SPAM [4] (Subtractive Pixel Adjacency Model of covers). Суть этого алгоритма состоит в том, что по различным направлениям считается разность цветов соседних пикселей , а затем вычисляются условные вероятности:
где принадлежат множеству чисел
.
Таким образом получается вектор признаков для каждого изображения. Эти данные подаются на вход алгоритму машинного обучения.
Чтобы обучить классификатор, я использовал около 1000 картинок, скрытое сообщение содержалось примерно в 200 из них. Сами сообщения — случайные наборы символов (предполагается, что сообщение было зашифровано перед помещением в стегоконтейнер).
В качестве классификатора используется Catboostclassifier [5]. Это библиотека для градиентного бустинга на основе деревьев решений.
Изначально использовался другой алгоритм с деревьями — RandomForest [6], но Catboost, как оказалось, дает те же результаты на порядок быстрее. Из других преимуществ — простота использования, мне не понадобилось настраивать вручную параметры для лучшей сходимости.
Сначала я хотел описать всё только на словах, но быстро понял, что без схемы во всем известном графическом редакторе не обойтись:
Пройдемся по её элементам:
Все, что проделано в этой статье, нуждается в доработке, а возможно и переработке с нуля. Но даже такой студенческий проект неплохо работает у меня, во всяком случае, поэтому мне захотелось им поделиться. Далее я планирую улучшать алгоритм, в первую очередь метод извлечения признаков.
Возможно, что у вас есть свои мысли по развитию проекта, прошу написать их в комментариях вместе с другими предложениями и/или замечаниями.
Весь код реализован на языке Python 3 версии. Полный код проекта выложен на github [7]. Ну и ещё раз, ссылка [2] на результат работы.
Также хочу выразить благодарность пользователю PavelMSTU [8] за советы при разработке проекта и рекомендации по оформлению статьи.
Автор: alexvin364
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/345235
Ссылки в тексте:
[1] методом LSB: https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%B3%D0%B0%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F#%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_LSB
[2] тут: http://185.219.41.226:8080
[3] здесь: https://www.dropbox.com/sh/c1oanise94xf5yq/AACT8eb9QhYGnirBTK2Qk5RHa?dl=0
[4] SPAM: http://ws2.binghamton.edu/fridrich/Research/paper_6_dc.pdf
[5] Catboostclassifier: https://catboost.ai/docs/concepts/python-reference_catboostclassifier.html
[6] RandomForest: https://ru.wikipedia.org/wiki/Random_forest
[7] github: https://github.com/alexvin3640/SMLS
[8] PavelMSTU: https://habr.com/ru/users/pavelmstu/
[9] Источник: https://habr.com/ru/post/486522/?utm_source=habrahabr&utm_medium=rss&utm_campaign=486522
Нажмите здесь для печати.