You are on page 1of 80

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ

КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ


УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)

Факультет ИКСС_____________________________
Кафедра ЗСС________________________________
Допустить к защите
Заведующий кафедрой
________ _______________________
(подпись)
«____»___________ 20___ г.

ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА

Разработка системы обнаружения фальсифицированных документов_______


_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
(тема ВКР)

Направление/специальность подготовки
10.03.01. – Информационная безопасность________________________________________
____________________________________________________________________________
(код и наименование направления/специальности)
Направленность (профиль)
Безопасность компьютерных систем______________________________________________
_____________________________________________________________________________
(наименование)
Квалификация Бакалавр_______________________________________________________
(наименование квалификации в соответствии с ФГОС ВО)

Студент:
Сутугин А., ИКБ-82___________ _________
(Ф.И.О., № группы) (подпись)

Научный руководитель:
Браницкий А.А., к.т.н., доцент кафедры ЗСС ____
(учёная степень, учёное звание, Ф.И.О.)(подпись)

Санкт-Петербург, 2022
Оборотная сторона титульного листа

__________________________________________________________________________
работа написана мною самостоятельно
__________________________________________________________________________
работа не содержит неправомерных заимствований

_____________________________________________________________________________

_____________________________________________________________________________
работа может быть размещена в электронно-библиотечной системе университета

__________________ __________ _______________


(дата) (подпись) (ФИО студента)

Текст ВКР размещен в электронно-библиотечной системе университета.

Руководитель отдела комплектования библиотеки ____________________________


(Ф.И.О.)

__________________ ___________________________
(дата) (подпись)

Коэффициент оригинальности ВКР ________ % .

Проверил: _____________________________________________________________
(Должность, Ф.И.О.)

__________________ ___________________________
(дата) (подпись)
МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ
КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ


УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)

Факультет _______ИКСС___________ Кафедра___________ЗСС___________


Направление (специальность) 10.03.01. – Информационная безопасность______________
_____________________________________________________________________________
(код и наименование)

Утверждаю:
Зав. кафедрой__________________
______________________________
(Ф.И.О., подпись)

«_31_»______мая_______2022 г.

ЗАДАНИЕ
на выполнение выпускной квалификационной работы (ВКР)

1. Студент_ Сутугин Александр_______________________ № группы ____ИКБ-82_____


(фамилия, имя, отчество)

2. Руководитель_ Браницкий Александр Александрович, к.т.н., доцент кафедры ЗСС ___


(фамилия, имя, отчество, должность, уч. степень и звание)

____________________________________________________________________________

3. Квалификация_______________________Бакалавр______________________________
(наименование в соответствии с ФГОС ВО)

4. Тема ВКР _Разработка системы обнаружения фальсифицированных документов_____


____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
утверждена приказом ректора университета от «_15_»___апреля___ 2022 г. № 418/кс___

5. Исходные данные (технические требования):


1. Броневич Андрей Георгиевич. Анализ неопределенности выделения информативных
признаков и представлений изображений _________________________________________
2. Farid Hany. Digital Image Forensic______________________________________________
3. Кобозева А. Эффект двойного квантования и его особенности______________________
_____________________________________________________________________________

6. Содержание работы (анализ состояния проблемы, проведение исследований,


разработка, расчеты параметров, экономическое обоснование и др.)
1. Анализ существующих подходов и постановка задачи_____________________________
2. Методы обнаружения фальсифицированных документов___________________________
3. Практическая реализация и тестирование________________________________________
_____________________________________________________________________________
___________________________________________________________________________
7. Вид отчетных материалов, представляемых в ГЭК (пояснительная записка, перечень,
графического материала, отчет о НИР, технический проект, образцы и др.):
1. Пояснительная записка_______________________________________________________
2. Презентация________________________________________________________________
3. Диск с электронным вариантов ВКР____________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________

8. Консультанты по ВКР с указанием относящихся к ним разделов

Подпись дата
Раздел Консультант Задание Задание
выдал принял
1. Анализ Браницкий А.А. 23.04.2022 01.05.2022
существующих
подходов и
постановка задачи

2. Методы Браницкий А.А. 01.05.2022 12.05.2022


обнаружения
фальсифицированных
документов

3. Практическая Браницкий А.А. 12.05.2022 29.05.2022


реализация и
тестирование

Дата выдачи задания «_23_» __________апреля_____________2022 г.

Дата представления ВКР к защите «_10_» __________июня__________2022 г.

Руководитель ВКР____________________________________________
(подпись)

Студент ________________________________________________
(подпись)
КАЛЕНДАРНЫЙ ПЛАН1

№ Наименование этапов выпускной Срок выполнения Примечание


квалификационной работы (ВКР) этапов ВКР
п/п
1. Постановка цели выполнения ВКР и 23.04.2022
задач
2. Работа с теоретическим материалом
3. Сбор информации, необходимой для
написания работы 23.04.202

4. Систематизация и обработка материалов –


ВКР 6.06.2022
5. Анализ полученных в работе результатов,
обобщение
6. Подготовка отчетных материалов,
представляемых в государственную
экзаменационную комиссию, доклада к
защите и презентации
07.06.2022
7. Консультации с руководителем ВКР

8. Представление выполненной ВКР
руководителю для подготовки отзыва 30.06.2022

9. Подготовка к защите ВКР, включая


подготовку к процедуре защиты и
процедуру защиты

Студент _____________________________________________
(подпись)

Руководитель ВКР ____________________________________________


(подпись)

1
Дата начала работы по плану должна совпадать с началом преддипломной практики в календарном
графике учебного процесса по соответствующему направлению подготовки, а дата окончания работы по
плану – с окончанием государственной итоговой аттестации
Реферат
Ключевые слова: отсканированные документы, анализ
фальсифицированных документов, анализ метаданных, разница уровней
сжатия, поиск дубликатов, web-приложение.
Выпускная квалифицированная работа содержит 62 страницы, 26
рисунков, 5 таблиц и 17 источников.
Целью данной работы является повышение эффективности
обнаружения фальсифицированных документов.
Задачи, выполняемые в рамках данной работы:
 Изучить и описать методы анализа изображений документов;
 Выбрать критерии оценивания существующих методов;
 Подобрать/Сгенерировать базу изображений для тестирования;
 Протестировать эффективность описанных методов;
 Спроектировать принцип функционирования прототипа системы
обнаружения фальсифицированных документов;
 Создать программную реализацию прототипа системы;
 Провести тестирование системы.
В данной работе представлено комплексное решение, позволяющее
определить подлинность изображения документа, основываясь на цифровых
методах анализа изображения.
Оглавление
СПИСОК СОКРАЩЕНИЙ И УСЛОВНЫХ ОБОЗНАЧЕНИЙ..........................8
ВВЕДЕНИЕ..............................................................................................................9
1 АНАЛИЗ СУЩЕСТВУЮШИХ ПОДХОДОВ И ПОСТАНОВКА ЗАДАЧИ
.................................................................................................................................11
1.1 Постановка задачи........................................................................................11
1.2 Существующие методы защиты документов............................................11
1.3 Фальсификация документа: понятие и законодательная база.................15
1.4 Методы анализа изображений отсканированных документов................16
2 МЕТОДЫ ОБНАРУЖЕНИЯ ФАЛЬСИФИЦИРОВАННЫХ ДОКУМЕНТОВ
.................................................................................................................................19
2.1 Анализ Мета данных....................................................................................19
2.2 Алгоритмы обнаружения дубликатов на документе................................26
2.2.1 Исчерпывающий поиск.........................................................................29
2.2.2 Автокорреляционный метод.................................................................30
2.2.3 Полное совпадение................................................................................32
2.2.4 Надежное совпадение............................................................................33
2.3 Алгоритм обнаружения склейки на документе.........................................35
3 ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ И ТЕСТИРОВАНИЕ..............................44
3.1 Тестирование методов.................................................................................44
3.2 Используемые технологии в проектировании алгоритмов......................49
3.3 Проектирование прототипа системы..........................................................50
3.4 Создание web-приложения для обнаружения фальсификации
документов..........................................................................................................52
3.5 Результаты тестирования прототипа системы фальсифицированных
документов..........................................................................................................57
ЗАКЛЮЧЕНИЕ.....................................................................................................63
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ.................................................65
ПРИЛОЖЕНИЕ 1. ЛИСТИНГ ПРОГРАММЫ..................................................68
Листинг................................................................................................................68
СПИСОК СОКРАЩЕНИЙ И УСЛОВНЫХ ОБОЗНАЧЕНИЙ
JPEG - Joint Photographic Experts Group
СНС - Сверточная нейронная сеть
DCT - Discrete Cosine Transform
EXIF - Exchangeable Image File Format
ICC-International Color Consortium
IPTC - International Press Telecommunications Council
XMP - Extreme Memory Profile
SVM – Support Vector Machine
JFIF - Jpeg File Interchange Format
ELA – Error Level Analysys

8
ВВЕДЕНИЕ
В настоящее время с появлением профессионального программного
обеспечения для редактирования цифровых изображений и документов, все
больше растет количество подделываемых документов. Злоумышленники
способны фальсифицировать любой отсканированный документ,
подлинность которого обычный пользователь не в состоянии проверить.
Подделка документа может выполняться путем манипуляции особенностями
цифрового изображения, что приводит к изменению визуального
содержимого изображений. Достоверность и подлинность документов важна
во всех сферах деятельности человека. Целостность и подлинность
цифрового изображения играют первостепенную роль в залах суда в качестве
доказательства, журналистике, журналах, также в медицинской сфере и т.д. В
связи с этим существует потребность в использование инструмента
позволяющего проверить документ на предмет фальсификации.
Цель работы – повышение эффективности обнаружения
фальсифицированных документов с использованием современных цифровых
методов.
Задачи:
 Изучить и описать методы анализа изображений документов;
 Выбрать критерии оценивания существующих методов;
 Подобрать/Сгенерировать базу изображений для тестирования;
 Спроектировать принцип работы прототипа системы
обнаружения фальсифицированных документов;
 Создать программную реализацию прототипа системы;
 Провести тестирование системы.
Объектом исследования является прототип системы обнаружения
фальсифицированных документов.

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

10
1 АНАЛИЗ СУЩЕСТВУЮШИХ ПОДХОДОВ И ПОСТАНОВКА
ЗАДАЧИ
1.1 Постановка задачи
Главной задачей выпускной квалифицированной работы является
создание прототипа системы обнаружения фальсифицированных
документов. Для решения данной задачи необходимо проанализировать
существующие методы, провести тестирование над выбранными методами и
создать общий алгоритм для работы системы.

1.2 Существующие методы защиты документов


Эволюция информационно-коммуникационных технологий лежит в
основе серьезных изменений в обществе, таких как дематериализация многих
услуг и административных документов (документы государственного и
гражданского статуса, выписки с банковских счетов, нотариальные акты и
т.д.). Однако этот переход к полностью цифровому миру не полностью
уничтожил использование бумажных документов: те, которые
обрабатывались в бумажной форме до дематериализации, например записи
медицинского учреждения или документы, для которых правила требуют
прохождения через бумажную версию впоследствии сканируется после
завершения, например, после нотариальных действий. Таким образом,
сопряжение этих новых и старых миров предполагает оцифровку
документов, которые затем можно легко распространять, обмениваться,
собирать и обрабатывать, ускоряя процедуры при одновременном снижении
затрат. Некоторые страны даже сдали в архив свои коммерческие,
административные и политические документы, чтобы сохранить свое
наследие и восстановить важные документы. Так обстоит дело с Францией,
которая создала дипломатический архив, насчитывающий почти 180 000
документов.

11
Однако, хотя эта разработка упрощает доступ к информации и ее
обработку, она также поднимает много вопросов безопасности. Например,
можно поставить под сомнение происхождение отсканированного
документа, а также его целостность. Они имеют решающее значение,
поскольку документы в бумажной форме не включают в себя защиту
элементы (водяные знаки, голограммы и т.д.), как для банкнот или
паспортов.
Действительно, сегодня злоумышленник может довольно просто
фальсифицировать содержимое отсканированного документа в своих
интересах, используя программное обеспечение для редактирования
изображений, не оставляя визуально обнаруживаемых следов. На самом деле,
ежедневно появляются сотни поддельных дипломов, медицинских страховок
и рабочих сертификатов, и ни одна отрасль не застрахована от этой угрозы,
которая влияет не только на рынок труда, но и на безопасность людей.
Например, в 2021 году, согласно данным МВД, было возбуждено более 500
уголовных дел, за подделку сертификатов вакцинации, что могло очень
сильно повлиять на здоровье окружающих людей [1].
Существуют различные решения и подходы для защиты
мультимедийных данных. В рамках данной работы будут рассмотрены
цифровые методы. Их можно разделить на две категории: активные и
пассивные (см. рис.1.1).

12
Рисунок 1.1 - Классификация цифровых методов по защите информации
Активные методы обычно требуют этапа предварительной обработки.
Это криптографические механизмы (например, шифрование, цифровые
подписи), водяные знаки или криптоволоконные знаки. Шифрование состоит
из преобразования данных открытого текста в данные зашифрованного
текста, не поддающиеся интерпретации, с использованием метода
шифрования, параметризованного ключами шифрования. В то время как
шифрование полезно для сохранения конфиденциальности, цифровые
подписи помогут сохранить целостность хранимых данных. Однако эти
криптографические решения предлагают априорную защита. Другими
словами, данные защищены до тех пор, пока они зашифрованы или пока их
подпись не была удалена. Более того, они ограничивают формат данных и
поднимают вопросы об обмене ключей.
В этом заключается ценность защиты, обеспечиваемой водяными
знаками. По определению, водяные знаки позволяют вставлять в документ
изображение, видео, аудиофайл, и т.д. в виде сообщения. Возьмем в качестве
примера изображение. Процесс нанесения водяных знаков изменит значения
серого цвета некоторых пикселей таким образом, чтобы закодировать
сообщение. Более того, в зависимости от взаимосвязи между сообщением с
водяными знаками и основным документом становится возможным узнать
происхождение документа и/или, если он не был подделан, внедрить
некоторое право доступа. Как правило, сообщение вставляется
непосредственно в документ, такая защита не зависит от формата хранения
данных. Тем не менее, внедрение этой технологии подразумевает
возможность нанесения водяных знаков на документ, как только он будет
подготовлен. В это случае это требуется, чтобы модуль водяных знаков был
интегрирован в качестве компонента безопасности во все сканеры. Это
практически неосуществимо, учитывая стоимость изготовления и увеличение
сложности конструкции сканер. Кроме того, эта операция может повлиять на

13
визуальное качество оцифрованного изображения, в то время как
незаметность является важным требованием во всех приложениях для
нанесения водяных знаков, особенно в случае медицинских изображений.
Система водяных знаков должна выдерживать компромисс между
требованиями к производительности, надежности и незаметности.
В этих перспективах первостепенное значение имеет разработка
решений для обеспечения подлинности и целостности цифровых
изображений, не полагаясь на предварительную регистрацию или
предварительно внедренную информацию. Подлинность является
доказательством того, что документ получен из правильного источника, в то
время как цель целостности состоит в том, чтобы выяснить, подвергался ли
документ изменениям или нет. Интересную альтернативу предлагают
пассивные методы, известные как методы компьютерной криминалистики.
Эти методы направлены на проверку того, было ли изображение изменено, а
также предоставление доказательства его происхождения, то есть на
идентификацию сканера, который получил изображение. Эти методы
работают вслепую, в том смысле, что они не полагаются на некоторую
априорную информацию о данных (например, подпись данных или любую
другую вспомогательную информацию), которой делятся с данными для
защиты.
Основная задача компьютерной криминалистики заключается в
извлечении некоторых характеристик или признаков изображения, связанных
или не связанных с процессами машинного обучения для создания
уникальных признаков изображения, которые могут быть использованы в
процессе проверки либо для идентификации происхождения изображения,
либо для обнаружения изменений изображения.
За последнее десятилетие количество работ в этой области значительно
расширилось. Однако эффективность предлагаемых подходов остается
относительной и в основном предназначена для цифровых камер. С другой

14
стороны, постоянно растущее число цифровых документов, приобретаемых
каждый день и передаваемых через незащищенные общедоступные сети
увеличивает количество угроз. Таким образом, существует необходимость в
использовании надежного инструмента для решения проблем защиты
мультимедийного контента в условиях перехода к цифровым технологиям и
дематериализации данных и услуг.
1.3 Фальсификация документа: понятие и законодательная база
Подделка документов и их использование может быть основанием для
привлечения к административной либо уголовной ответственности.
Фальсификация документов в зависимости от масштаба последствий может
быть расценена, как административный проступок либо преступление.
Под фальсификацией подразумевается сознательное искажение
различных документов (расписок, доверенностей, договоров и др.) для
изменения их действительного смысла в результате исправлений, подчистки,
подделки.
В уголовном законодательстве предусматривается цель подделки
документов в статье УК РФ 327 [2]. В статье УК РФ 327 излагается
ответственность за подделку, изготовление или оборот поддельных
документов, государственных наград, штампов, печатей или бланков.
В административном законодательстве ст. 19.23 КоАП РФ цель
не оговаривается, а предусматривается только ответственность
за совершение этого деяния. При этом предусматриваются аналогичные
нормы относительно сбыта печатей, штампов, бланков. Поэтому решение
правоприменителем выносится по его собственному усмотрению. Это
значит, что за фальсификацию документов в суде может быть вынесено
решение о привлечении к уголовной либо административной
ответственности лица, совершившего такое деяние.
Предметом подделки и поддельными в ч. 1–4 ст. 327 УК выступают
паспорт и только такие другие официальные документы, которые

15
предоставляют права или освобождают от обязанностей (п. 4 проекта). Это
правило относится и к удостоверениям. При этом подчеркивается, что по
смыслу ч. 5 ст. 327 УК об ответственности за использование заведомо
подложных документов к таким документам относятся любые,
удостоверяющие юридически значимые факты, кроме тех, что указаны в ч. 3
той же статьи. Например, поддельные гражданско-правовой договор или
решение общего собрания собственников помещений в многоквартирном
доме.
По ст. 324 Уголовного кодекса («Приобретение или сбыт официальных
документов и государственных наград») накажут за покупку в интернете
листка нетрудоспособности, по которому работника отправят на больничный
и выплатят пособие [2]. Сюда же – заключение об отсутствии
противопоказаний к управлению машиной, чтобы сдать экзамен и получить
водительское удостоверение.
Пленум ВС называет заведомо подложными документами любые
поддельные бумаги, которые удостоверяют юридически значимые факты – за
исключением поддельных паспортов и удостоверений. Например, это
гражданско-правовой договор, диагностическая карта транспортного
средства или решение общего собрания собственников помещений в
многоквартирном доме. За использование подложных документов накажут
штрафом до 80 000 руб. (либо другой санкцией из ч. 5 ст. 327 УК) [3].
1.4 Методы анализа изображений отсканированных документов
Говоря об исследованиях по обнаружению подделок на изображениях
отсканированных документов, следует отметить относительно ограниченное
количество публикаций, если сравнить их с исследованиями по обнаружению
подделок на обычных изображениях.
В исследовании Carrazoni Entenza использовал основанный на блоках
алгоритм обнаружения копирования-перемещения с использованием
моментов Зернике и Хьюза [4]. В это методе используется, система

16
оптического распознавания символов для удаления пробелов и ложных
черных областей, полученных в результате сканирования. Затем моменты
Зернике и Хьюза извлекаются из блоков и используются в качестве
признаков для обнаружения случаев подделки. В конце концов, результаты
оцениваются для каждого момента отдельно.
Chun-Su Park и Joon Yeon Choeh представили быстрый метод, который
позволяет обнаружить подделку с помощью нескольких геометрические
преобразования, такие как поворот области, изменение размера, деформация
и отражение [5].
В работе Cruz F. и Sidere N. используется метод локальных бинарных
шаблонов [6]. Их метод состоит в разделении изображения на участки,
вычислении локального дескриптора двоичных шаблонов для каждого
участка и, наконец, классификации каждого участка по сравнению с его
соседями как подделанного или не подделанного участка с использованием
классификатора SVM.
N. Hema Rajini представила метод идентификации подделки
изображений, основанных на коэффициентах DCT и декореляции
изображений [7]. Входное изображение преобразуется в цветовое
пространство YCbCr на начальном этапе. Далее происходит блочное
дискретное косинусное преобразование (DCT) и декорреляция изображений
в качестве этапа предварительной обработки, затем модель обучается с
использованием сфабрикованных изображений и оригинала.
В области обнаружения подделок на цифровых изображениях
информация метаданных использовалась многими исследователями в
качестве основного инструмента, например в иследовании Gangwar, D. P. и
Pathania, A., анализировали свойства декодирования метаданных EXIF для
обнаружения поддельных изображений [8]. В работе Kee, E., Johnson, M. K.
использовали заголовки EXIF и таблицы квантования JPEG для извлечения
сигнатуры камеры и последующего сравнения ее с базой данных известных

17
аутентичных сигнатур камер [9]. Сигнатура камеры состоит из семи
компонентов. Из изображения извлекаются три компонента (размеры
изображения, таблица квантования и код Хаффмана). Остальные три
извлекаются из миниатюры (размеры миниатюр, значения квантования и
коды Хаффмана). Анализ уровня ошибок (ELA) - это еще один метод,
который использовался в исследовании Jeronymo D [10]. Он объединил ELA
с мягким пороговым значением вейвлета, чтобы четко показать результаты
ELA, удалив шумовые компоненты. Некоторые исследователи применили
методы глубокого обучения для обнаружения подделок цифровых
изображений. Например, Rahman, F. и Sudiatmika, I. B. использовали ELA с
глубоким обучением для создания надежной системы, которая может
обнаруживать поддельные изображения, где выходные данные ELA являются
входными данными для сверточной нейронной сети [11].

18
2 МЕТОДЫ ОБНАРУЖЕНИЯ ФАЛЬСИФИЦИРОВАННЫХ
ДОКУМЕНТОВ
2.1 Анализ Мета данных
В поисках общего метода, который может быть использован для
подтверждения манипуляции с изображением, метаданные изображения
могут быть ответом там, где другие методы терпят неудачу. Метаданные
изображения содержат подробную информацию о том, как было создано и
обработано изображение, которую можно использовать для отслеживания
истории изображения.
В настоящее время даже эта информация может быть отредактирована
или удалена с помощью специальных инструментов. По этой причине этот
метод основан на предположении о не отредактированных метаданных
манипулятором. Существуют четыре типа метаданных: данные EXIF
(Формат файла изображения с возможностью обмена) и XMP (Расширяемая
платформа метаданных) предоставляют историю и связанные с ней детали
редактирования изображений, в то время как наличие заголовков ICC
(Международный консорциум по цветным изображениям) или IPTC
(Международный совет по телекоммуникациям для прессы) служит
признаком промежуточной обработки с помощью продуктов Adobe .
Преобразование изображения документа из формата “JPG” в формат
“PNG” может привести к потере ценной информации, поскольку формат
“PNG” не поддерживает EXIF и IPTC в качестве стандартных тегов. С другой
стороны, поскольку формат файла “TIF” поддерживает теги EXIF, XMP, ICC
и IPTC, преобразование из типа “JPG” не будет проблемой, и вся
информация, связанная с редактированием, будет сохранена.
JPEG относится только к классу алгоритмов сжатия, а не к
конкретному формату файла. Для создания файлов со встроенными потоками
JPEG был адаптирован и разработан ряд стандартных форматов файлов. К
ним относятся: JPEG/ JFIF , JPEG/SPIFF (формат файла обмена

19
неподвижными изображениями), JPEG/ CIFF , JPEG/Exif (формат файла
изображения с возможностью обмена).
Среди них наиболее распространенными типами являются JPEG/Exif и
JPEG/JFIF.
JPEG/Exif является наиболее распространенным форматом
изображения, используемым цифровыми камерами и другими устройствами
захвата изображений.
JPEG/JFIF — это наиболее распространенный формат для хранения и
передачи фотографических изображений во всемирной паутине.
Файл JPEG содержит несколько сегментов (см. таблица 2.1), каждый
сегмент содержит разные виды данных, разделенных двухбайтовыми кодами,
называемыми маркерами. Маркеры имеют шестнадцатеричную систему
счисления, они начинаются с 0xFF и заканчиваются кодом (1 байт),
указывающим тип маркера.
Таблица 2.1 - Общие маркеры JPEG

Коротко Полезная
Байты Имя и комментарии
е имя нагрузка
0xFF,
SOI Отсутствует Начало изображения
0xD8
Начало кадра (базовый DCT).
Указывает, что это базовый JPEG на
Переменный
SOF0 0xFF, 0xC0 основе DCT, и указывает ширину,
размер
высоту, количество компонентов и
субдискретизацию компонентов.
Начало кадра (Progressive DCT).
Указывает, что это JPEG на основе
Переменный прогрессивного DCT, и определяет
SOF2 0xFF, 0xC2
размер ширину, высоту, количество
компонентов и субдискретизацию
компонентов.
Переменный
DHT 0xFF, 0xC4 Определение таблицу Хаффмана.
размер

20
Продолжение таблицы 2.1

0xFF, Переменный
DQT Определение таблицы квантования.
0xDB размер
Define Restart Interval указывает
интервал между маркерами RSTn в
макроблоках. За этим маркером
0xFF,
DRI 2 байта следуют два байта, указывающие
0xDD
фиксированный размер, поэтому его
можно рассматривать как любой
другой сегмент переменного размера.
Начало сканирования.
Начинает сканирование изображения
сверху вниз. В базовых изображениях
DCT JPEG обычно выполняется одно
сканирование. Изображения
0xFF, Переменный
SOS Progressive DCT JPEG обычно
0xДА размер
содержат несколько сканирований.
Этот маркер указывает, какой
фрагмент данных он будет содержать,
и сразу за ним следуют данные с
энтропийным кодированием.
Вставляется через каждые r
макроблоков, где r — интервал
0xFF, перезапуска, установленный
RSTn 0xDn Отсутствует маркером DRI. Не используется, если
n(n=0..7) не было маркера DRI. Младшие 3
бита кода маркера циклически
принимают значения от 0 до 7.
Метаданные APPn.
Например, файл Exif JPEG использует
Переменный
APPn 0xFF, 0xEn маркер APP1 для хранения
размер
метаданных, размещенных в
структуре, близкой к TIFF.
Переменный
COM 0xFF, 0xFE Комментарий
размер
0xFF,
EOI Отсутствует Конец изображения
0xD9

21
Некоторые маркеры состоят только из этих двух байтов; за другими
следуют два байта, указывающие длину следующих за ними данных
полезной нагрузки, специфичных для маркера. Длина включает два байта
длины, но не два байта маркера.
Метаданные в файле JPEG хранятся в сегменте APPn (0xFF, 0xEn), а
комментарий хранится в сегменте COM (0xFF, 0xFE). Несколько
поставщиков могут использовать один и тот же тип маркера APPn для
включения своей информации, поэтому эти маркеры часто начинаются с
имени поставщика (например, «Exif» или «Adobe») или какой-либо другой
идентифицирующей строки.
Файл Exif JPEG использует сегмент APP1 для хранения информации (и
несколько сегментов APP2 для данных flashPix). Сегмент Exif APP1 хранит
большое количество информации о фотографических параметрах цифровых
камер, и в настоящее время это предпочтительный способ хранения эскизов
изображений. Он также может содержать дополнительный раздел с данными
GPS.
Теоретически Exif APP1 записывается сразу после маркера SOI
(маркер, указывающий на начало файла). Однако это приводит к
несовместимости между стандартами Exif и JFIF, поскольку оба они
указывают, что их конкретный сегмент приложения (APP0 для JFIF, APP1
для Exif) должен быть первым в файле изображения. На практике
большинство файлов JPEG содержат сегмент маркера JFIF (APP0), который
предшествует сегменту Exif APP1. Это позволяет более старым читателям
правильно обрабатывать сегмент формата JFIF, в то время как более новые
читатели также декодируют следующий сегмент Exif, менее строго требуя,
чтобы он отображался первым. Этот способ не повлияет на декодирование
изображения для большинства декодеров, но плохо спроектированные
синтаксические анализаторы JFIF или Exif могут не распознать файл
должным образом.

22
Сегмент Exif APP1 состоит из маркера APP1 (0xFFE1), строки
идентификатора Exif («Exif\0\0») и самой информации атрибута. Строка
идентификатора «Exif\0\0» используется, чтобы избежать конфликта с
другими приложениями, использующими APP1 (например, XMP).
В типичный отредактированный файл JPEG информация XMP
(расширяемая платформа метаданных) обычно включается вместе с данными
Exif и IPTC (данные модели обмена информацией). XMP использует сегмент
APP1 для хранения метаданных; формат хранения - RDF (Resource
Description Framework), реализованный в формате XML.
Сегмент XMP APP1 состоит из маркера APP1 (0xFFE1), строки
идентификатора XMP («http://ns.adobe.com/xap/1.0/\x00») и пакета Unicode
XMP (обычно используется кодировка UTF-8, но это также может быть UTF-
16 или UTF-32). Пакет нельзя разделить на несколько сегментов, поэтому его
максимальный размер составляет приблизительно 64 КБ (2^16-1 байт).
Когда Adobe впервые представила XMP, предполагалось, что блок
XMP будет полностью содержаться в одном сегменте JPEG. Таким образом,
XMP/xml не может быть длиннее 65 КБ.
Adobe Photoshop использует сегмент APP13 для хранения
неграфической информации, такой как слои, пути, данные IPTC и многое
другое. Содержимое сегмента APP13 формируется маркером APP1 (0xFFE1),
строкой идентификатора (обычно «Photoshop 3.0\000», но также и
«Adobe_Photoshop2.5:», используемой в более ранних версиях), за которой
следует последовательность блоков данных ресурса. Как правило, блок
ресурсов содержит всего несколько байтов, но важный блок IPTC может
быть довольно большим. Блок IPTC может не помещаться в один сегмент
APP13, поэтому его можно разделить на несколько сегментов APP13.
Профиль ICC хранится в одном или нескольких фрагментах
APP2. Несмотря на то, что многие профили ICC небольшие, они также могут
состоять не только из одного фрагмента. Куски ограничены 65535 байтами

23
из-за двухбайтовой длины цепи. Чтобы решить эту проблему, данные ICC
APP2 имеют 16-байтовый заголовок
В основе метода лежит анализ метаданных EXIF, XMP, IPTC, ICC.
Метаданные проверяются по следующему алгоритму.:
1. Считывается входное изображение.
2. Извлекаются данные EXIF.
3. Проверяется наличие “Adobe Photoshop“ в поле ”Программное
обеспечение".
4. Извлекаются данные XMP.
5. Проверяются на несоответствие между полями дата создания и
дата изменения.
6. Проверяется наличие “Adobe Photoshop“ в поле ”CreatorTool".
7. Проверяется наличие заголовка ICC.
8. Проверяется наличие заголовка IPTC.
На рисунке 2.1 продемонстрированы результаты анализа
метаданных отсканированного подделанного документа.
На фотографии изображены результаты анализа по EXIF, XMP, ICC,
IPTC.
Важно отметить, что эффективность этого подхода в значительной
степени зависит от предположения, что метаданные будут изменены
программным обеспечением для редактирования изображений.

24
Рисунок 2.1- Результат анализа метаданных поддельного изображения

2.2 Алгоритмы обнаружения дубликатов на документе


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

25
изображений. В настоящее время можно добавлять или удалять важные
участки из изображения, не оставляя очевидных следов подделки. По мере
того, как цифровые фотоаппараты и видеокамеры заменят уже
существующие аналоги, потребность в аутентификации цифровых
изображений, проверке их содержания и обнаружении подделок будет только
возрастать. В этом подразделе будет рассказано о выявлении злонамеренных
манипуляций с цифровыми изображениями, в частности, будет упор на
обнаружении особого типа цифровой подделки – атаки копирования-
перемещения, при которой часть изображения копируется и вставляется в
другое место изображения с намерением дополнить изображение имеющейся
информацией либо скрыть важную часть изображения.
Наличие мощных программ обработки цифровых изображений, таких
как PhotoShop, позволяет относительно легко создавать цифровые подделки
из одного или нескольких изображений. Пример цифровой подделки показан
на рисунке 2.2. Как видно из документа, при создании подделки
использовалась копия подписи. Также при подделывании документов может
использоваться копирование фрагментов документа, включающих в себя
отдельные буквы или слова, соединённые в одну целостную структуру,
нарушая при этом первозданный смысл документа.

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

27
Это ограничивает их применение контролируемыми средами. Если все
цифровые устройства сбора данных не оснащены чипом водяных знаков,
маловероятно, что подделка будет обнаружена с помощью водяного знака.
Учитывая чрезвычайную сложность проблемы и ее в значительной
степени неисследованный характер, следует начинать с классификации
подделок по их механизму, начиная с простых и анализируя каждый тип
подделки в отдельности.
При подделке копирования-перемещения часть самого изображения
копируется и вставляется в другую часть того же изображения. Обычно это
делается с намерением заставить объект исчезнуть с изображения, закрыв его
сегментом, скопированным из другой части изображения. Поскольку
скопированные части взяты из одного и того же изображения, его шумовая
составляющая, цветовая палитра, динамический диапазон и большинство
других важных свойств будут совместимы с остальной частью изображения
и, следовательно, не будут обнаружены с помощью методов, которые ищут
несовместимость статистических показателей в разных частях изображения.
Чтобы сделать подделку еще более трудной для обнаружения, можно
использовать пернатую обрезку или инструмент ретушь, чтобы
дополнительно замаскировать любые следы копирования-перемещения.
Любая подделка копирования-перемещения вводит корреляцию между
исходным сегментом изображения и вставленным. Эта корреляция может
быть использована в качестве основы для успешного выявления данного вида
подделки.
Поскольку подделка, скорее всего, будет сохранена в формате JPEG с
потерями и из-за возможного использования инструмента ретуши или других
локализованных инструментов обработки изображений, сегменты могут
совпадать не точно, а только приблизительно. Таким образом, можно
сформулировать следующие требования к алгоритму обнаружения:

28
1. Алгоритм обнаружения должен обеспечивать приблизительное
совпадение небольших сегментов изображения
2. Поддельный сегмент, должен быть связанным компонентом, а не
набором очень маленьких патчей или отдельных пикселей.
В данном подразделе будет рассмотрено несколько алгоритмов по
обнаружению дубликатов на документе [12].
2.2.1 Исчерпывающий поиск
В первую очередь был рассмотрен самый простой алгоритм –
«Исчерпывающий поиск (Exhaustive search)»
В этом методе изображение и его периодично сдвинутая версия (см.
рис. 2.3) накладываются друг на друга в поисках, близко совпадающих
сегментов изображения.

Рисунок 2.3 - Исходное изображение и его круговой сдвиг


Предполагается, что xij — это значение пикселя изображения в
оттенках серого размером M × N.
Cравнение xij с его периодичным сдвигом [k, l], аналогично
сравнению xij с его периодичным сдвигом [k’,l’], где k’= M–k и l’= N–
l. Таким образом, достаточно проверить только те сдвиги [k,l] с 1≤ k ≤ M/2,
1≤ l ≤ N /2, тем самым сокращая вычислительную сложность в 4 раза.
Для каждого сдвига [k, l] разница пикселей определяется как:
∆ x ij =x ij – x i +k mod ( M ) j+lmod ( N ) , (1)

29
и вычисляются пороговое значение t. Выбор порога проблематичен,
поскольку в естественных изображениях большое количество пар пикселей
будет создавать различия ниже порога t. Однако, нас интересуют только
соединенные сегменты определенного минимального размера. Таким
образом, пороговая разница ∆xij далее обрабатывается с помощью операции
морфологического открытия. Изображение сначала размывается, а затем
расширяется с размером окрестности, соответствующим минимальному
размеру области перемещения копии. Операция открытия успешно удаляет
эти точки. Хотя этот простой подход исчерпывающего поиска эффективен,
он также довольно дорог с точки зрения вычислений. Фактически,
вычислительная сложность исчерпывающего поиска делает его
непрактичным для использования даже для изображений среднего размера.
Во время обнаружения все возможные сдвиги [k, l] с 1≤ k, l ≤ M/2
необходимо проверить. Для каждого сдвига каждая пара пикселей должна
быть сравнена, а затем все изображение должно быть размыто и
расширено. Сравнение и обработка изображений требуют
порядка MN операций за одну смену. Таким образом, суммарные
вычислительные требования пропорциональны (MN)2. Например, сравнивая
время обработки двух изображений, одно из которых больше по размерам в
два раза, получим, что большее изображение будет обрабатываться в 16 раз
дольше по сравнению с малым. Это делает исчерпывающий поиск
жизнеспособным вариантом только для небольших изображений.
2.2.2 Автокорреляционный метод
Еще один метод по обнаружение подделок путем копирования
заключается в использовании автокорреляции и называется
«Автокорреляционный метод». Автокорреляция изображения x
размера M×N определяется по формуле:
M N
r kl =∑ ∑ x i , j x i+ k , j +l , гдеi , k =¿ 0 , … , M −1 , j , l=0 , … , N−1. ¿ (2)
i=1 j=1

30
Автокорреляция может быть эффективно реализована с
использованием преобразования Фурье, используя тот факт, что:
r −x ^x , где x^ij −x M +1−i , N+1− j ,i=0 ,… , M −1 , j , l=0 , … , N −1. (3)
Таким образом, мы имеем:
r =F
−1
{ F ( x ) F ( ^x ) } , (4)
где F - преобразование Фурье.
Логика обнаружения на основе автокорреляции заключается в том, что
исходный и скопированный сегменты будут вводить пики в автокорреляции
для сдвигов, которые соответствуют скопированным перемещенным
сегментам. Однако, поскольку естественные изображения содержат большую
часть своей мощности на низких частотах, то автокорреляция r вычисляется
непосредственно для самого изображения, и будет иметь очень большие пики
в углах изображения и их окрестностях. Таким образом, вычисляется
автокорреляция не по изображению непосредственно, а по его
высокочастотной фильтрованной версии.
Было протестировано несколько фильтров высоких частот: детектор
краев Марра, детектор краев Лапласа, детектор краев Собеля и шум,
извлеченный с помощью 3×3 фильтр Винера. Наилучшая
производительность была получена при использовании 3×3 Фильтр Марра
[12]. Предполагая, что минимальный размер скопированного-перемещенного
сегмента равен B, метод автокорреляционного обнаружения копирования и
перемещения состоит из следующих шагов:
1. Применяется фильтр высоких частот Марра к тестируемому
изображению.
2. Вычисляется автокорреляцию r отфильтрованного изображения.
3. Удаляется половина автокорреляции (автокорреляция
симметрична.).
4. Устанавливается r = 0 в окрестности двух оставшихся углов всей
автокорреляции.

31
5. Находится максимум r, определяется вектор сдвига и
исследуется, используя исчерпывающий метод (теперь это вычислительно
эффективно, потому что не нужно выполнять исчерпывающий поиск для все
векторов сдвига).
6. Если обнаруженная область больше B, нужно закончить, иначе
повторите шаг 5 со следующим максимумом r.
Хотя этот метод прост и не имеет большой вычислительной сложности,
он не способен находить все дубликаты, тем самым он не может обнаружить
подделку.
2.2.3 Полное совпадение
Следующий алгоритм «Полное совпадение (Exact match)»,
предназначен для идентификации тех сегментов изображения, которые
имеют точное совпадение [13]. Несмотря на то, что применимость этого
инструмента ограничена, он все же может быть полезен, например для
криминалистического анализа.
В начале необходимо указать минимальный размер сегмента, который
должен быть рассмотрен для соответствия. Предполагается, что этот отрезок
представляет собой квадрат B×B пикселей. Квадрат перемещается на один
пиксель вдоль изображения от верхнего левого угла вправо и вниз к нижнему
правому углу. Для каждой позиции блока В×B, значения пикселей из блока
извлекаются из столбцов при проходе по строкам двумерного массива A.
Каждая строка соответствует одному положению скользящего блока. Две
одинаковые строки в матрице A соответствуют двум одинаковым B×B
блокам. Для определения идентичных строк, строки матрицы A
лексикографически сравниваются, как целочисленные кортежи B×B.
Это можно сделать за MN log 2( MN ¿) ¿ шагов. Поиск совпадающих строк
легко осуществляется путем перебора всех MN строк упорядоченной
матрицы A и поиска двух последовательных идентичных строк. На рисунке
2.4 продемонстрирован результат алгоритма “Полное Совпадение”. Блоки

32
образуют разорванный неправильный узор, который близко соответствует
скопированной и перемещенной подписи.

Рисунок 2.4 - Результат алгоритма “Полное Совпадение” по нахождению копии подписи


на фрагменте изображения документа

2.2.4 Надежное совпадение


Следующий алгоритм называется «Надежное совпадение (Robust
match)». Идея надежного обнаружения совпадений аналогична точному
совпадению, за исключением того, чтобы сопоставлять точные значения
пикселей блоков, к блокам применяется функция квантования. Шаги
квантования вычисляются по заданному параметру Q-factor. Этот параметр
эквивалентен коэффициенту качества при сжатии JPEG, т.е. параметр Q-
factor определяет шаги квантования коэффициентов преобразования
DCT. Поскольку более высокие значения добротности приводят к более
узкому квантованию, блоки должны совпадать более точно, чтобы быть
идентифицированными как похожие.
Обнаружение начинается так же, как и в случае точного
совпадения. Изображение сканируется от верхнего левого угла до нижнего
правого угла при перемещении B×B блока. Для каждого блока вычисляется
DCT–преобразование, коэффициенты DCT квантуются и сохраняются в виде
одной строки в матрице A. Матрица будет иметь (M- B+1) (N–B+1) строк
и B×B столбцов, как для алгоритма точного совпадения. Строки матрицы
A лексикографически отсортированы, как и раньше. Остальная часть

33
процедуры отличается от прошлого алгоритма. Поскольку квантованные
значения коэффициентов DCT для каждого блока теперь сравниваются
вместо пиксельного представления, алгоритм может найти слишком много
совпадающих блоков. Таким образом, алгоритм также смотрит на взаимные
позиции каждой совпадающей пары блоков и выводит конкретную пару
блоков только в том случае, если в одной и той же взаимной позиции
находится много других совпадающих пар (они имеют один и тот же вектор
сдвига). Если две последовательные строки отсортированной матрицы
A найдены, алгоритм сохраняет позиции совпадающих блоков в отдельном
списке и увеличивает счетчик вектора сдвига C.
Пусть (i1, i2) и (j1, j2) будут позициями двух совпадающих
блоков. Вектор s сдвига между двумя совпадающими блоками вычисляется
как:
s=(s ¿ ¿ 1 , s 2)=( i− j 1 ,i− j 2 ) .¿ (5)
Поскольку векторы сдвига –s и s соответствуют одному и тому же
сдвигу, векторы сдвига s при необходимости нормализуются путем
умножения на -1, чтобы соблюдалось условие s1 ≥ 0. Для каждой
совпадающей пары блоков увеличивается счетчик вектора сдвига C на
единицу:
C (s ¿ ¿ 1 , s 2)=C (s ¿ ¿ 1 , s 2)+1 . ¿ ¿ (6)
Векторы сдвига вычисляются и счетчик C увеличивается для каждой
пары последовательных совпадающих строк в отсортированной
матрице A. Вектор сдвига C инициализируется нулем перед запуском
алгоритма. В конце процесса согласования счетчик C показывает частоты, с
которыми возникают различные нормализованные векторы сдвига. Затем
алгоритм находит все нормализованные векторы сдвига: s(1), s(2) ,…,s(k),
возникновение которого превышает заданный порог T:
C ( s(r ) ) >T , (7)
при r =1...K.

34
Для всех нормализованных векторов сдвига соответствующие блоки,
внесшие вклад в этот конкретный вектор сдвига, окрашиваются одним и тем
же цветом и, таким образом, идентифицируются как сегменты, которые
могли быть скопированы и перемещены. Значение порога T связано с
размером наименьшего сегмента, который может быть идентифицирован
алгоритмом. Большие значения могут привести к тому, что алгоритм
пропустит некоторые не очень близко совпадающие блоки, в то время как
слишком маленькое значение T может привести к большому количеству
ложных совпадений. Параметр Q-factor управляет чувствительностью
алгоритма к степени соответствия между блоками, в то время как размер
блока B и порог T контролируют минимальный размер сегмента, который
может быть обнаружен.
Для надежного совпадения рекомендуется использовать B = 16, чтобы
не допустить возникновения большого количества ложных совпадений.
2.3 Алгоритм обнаружения склейки на документе
В современном мире существует множество инструментов, доступных
для быстрого редактирования изображений. Эти инструменты были созданы
с целью редактирования и улучшения изображений. Однако вместо того,
чтобы использовать данные инструменты для первозданных целей,
некоторые люди используют их для фальсифицирования изображений или
документов и дальнейшего их распространения. Это серьезная угроза,
поскольку ущерб, причиняемый поддельными изображениями, не только
серьезен, но и часто необратим. Помимо копирования участков документа и
дальнейших вставок в этот же документ, существует большой класс
подделок, использующих вставку из сторонних изображений. Пример
вставки нескольких изображений показан на рисунке 2.5. Исходным
документом является документом от компании «Sony», используя найденные
в свободном доступе фотографии Гербовой печати и произвольной росписи,
получилось сгенерировать фальшивый документ.

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

36
Для определения фальсификации документа предлагается обучить
модель на основе СНС, чтобы узнать множество артефактов, найденных в
поддельном изображении. Таким образом, можно реализовать очень легкую
сеть на основе СНС, основной целью
которой является изучение артефактов, возникающих в фальсифицированном
изображении в результате различий в особенностях исходного изображения и
фальсифицированной области.
Основными преимуществами предлагаемой методики являются:
 Облегченная архитектура на основе СНС предназначена для
эффективного обнаружения подделки изображений. Предлагаемый метод
исследует многочисленные артефакты, оставленные в процессе
фальсификации изображения, и использует преимущества различий
исходных изображений посредством повторного сжатия изображения.
 По сравнению с существующими методами предлагаемый метод
является быстрым и может обнаруживать наличие подделки изображения за
значительно меньшее время.
СНС, спроектированы как нелинейные взаимосвязанные нейроны. Они
уже продемонстрировали необычайный потенциал в разнообразие
приложений компьютерного зрения, включая сегментацию изображений и
обнаружение объектов.
Когда фрагмент изображения перемещается из одного в другой,
возникают различные артефакты из-за разрозненного происхождения
изображений [14]. Артефакты могут быть незаметны человеческим глазом,
но СНС может обнаружить их присутствие в поддельных документах. Так
как источник подделанной области и фоновые изображения имеют
различные уровни сжатия, то при повторном сжатие изображения, появятся
новые артефакты, свидетельствующие о неоднородности изображения.
Область, объеденная с другим изображением, будет иметь
статистически отличное распределение коэффициентов DCT, чем исходная

37
область. Аутентичная область сжимается дважды: сначала при сканировании,
а затем снова в подделке.
При сжатии изображения, содержащего подделку, подделанная часть
изображения будет сжиматься иначе, чем остальная часть изображения, из-за
разницы между источником исходного изображения и источником
подделанной части [15].
При расчете разницы между исходным изображением и его сжатой
версией, генерируется карта разниц уровней сжатия. В последствии чего она
используется для обучения модели на основе СНС для обнаружения
подделки изображения.
Данный метод основан на ELA (Error Level Analyze/Анализ уровня
ошибок). Анализ уровня ошибок является одним из методов используемых
для обнаружения манипуляций с изображениями с помощью повторного
сжатия и вычисления разниц сжатия изображения. Типом изображения в
этом анализе данных является JPEG. В изображениях JPEG сжатие
выполняется независимо для каждого пикселя в блоке 8x8. Ниже будет
описан Алгоритм работы данного метода
Для начала берется подделанное изображение A, затем проводится
операцию сжатия над изображением А, в результате получается Acompressed.
Далее берется разницу между исходным изображением A и Acompressed сжатым
изображением, которое в дальнейшем именуется как Adiff. Теперь из-за
разницы в источнике подделанной детали и исходной части изображения,
подделанная часть подсвечивается, как показано на рисунке 2.6 д.

38
Рисунок 2.6 - а) изображение оригинального документа;
б) изображение поддельного документа;
в) изображение сжатого поддельного документа;
г) маска отличий между оригиналом и поделанным документом;
д) разница между сжатым и не сжатым поделанным документом;
Для получения Acompressed из A используется сжатие JPEG. Изображение
обрабатывается с помощью сжатие JPEG и получается Acompressed как показано
на рисунке 2.7. При сжатии JPEG изображения, сначала применяется DCT
преобразование к блокам пикселей изображения с последующим
квантованием. Затем выполняется распаковка сжатого изображения с
помощью деквантования с последующим применением обратной операции
DCT для получения изображения в пиксельном формате. На рисунке 2.8
демонстрируется гистограмма коэффициентов DCT при первом сжатии. При
повторном сжатии появляются разрывы на гистограмме DCT
коэффициентов, как показано на рисунке 2.9. Полная схема работы
алгоритма продемонстрирована на рисунке 2.10.
Сеть обучается на основе СНС для классифицирования документов на
поддельные и подлинные. Была построена легковесная модель СНС с
минимальными параметрами, как описано ниже:
 Первый сверточный слой состоит из 32 фильтров размером 5 на
5, с шагом 1 и функцией активации «relu».
 Второй сверточный слой состоит из 32 фильтров размером 5 на 5,
с шагом 1 и функция активации «relu».
 Слой с пуллингом, с функцией max2d, размером 2 на 2.
 Слой DropOut, предназначенный для уменьшения переобучения.

39
 Полносвязный слой, который имеет 256 нейронов с функцией
активации «relu».
 Слой DropOut, предназначенный для уменьшения переобучения.
 Полносвязный слой, который связан с двумя нейронами
(выходными нейронами) с «сигмоидной» активацией.

Рисунок 2.7 - Алгоритм сжатия JPEG

Рисунок 2.8 - Гистограмма DCT коэффициентов поддельного изображения при первом


сжатии

40
Рисунок 2.9 - Гистограмма DCT коэффициентов поддельного изображения при втором
сжатии
Изображение, получившееся в результате вычитания входного
изображения и сжатого изменяется до размера 128 × 128, а затем передается
в СНС. СНС узнает о наличии любых несанкционированных действий с
помощью описанного выше преобразования. В процессе обучения
предлагаемая модель изучает существование подделки изображения через
многочисленные артефакты, оставленные при подделке изображения.
Обученная модель может идентифицировать взлом с высокой точностью.
К отличительным особенностям данной методики можно отнести
следующее:
 Данная методика фокусируется на том, является ли данное
изображение подделанным или подлинным.
Она использует изображение, полученное в результате разницы
исходного изображения с его повторно сжатым изображением,
 в результате чего на полученном изображении подсвечивается
фрагмент подделки.
 Данный алгоритм достигает высокой точности в классификации
как подделанных изображений, так и оригинальных.

41
 Данная методика быстро работает.

Рисунок 2.10 - Схема работы алгоритма по поиску склеек на изображении документа.


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

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

43
3 ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ И ТЕСТИРОВАНИЕ
3.1 Тестирование методов
Было проведено тестирование метода анализа метаданных.
Использовались отсканированные изображения документов в форматах
файлов “JPG”. Все входные изображения были отсканированы с помощью
сканеров, а некоторые из них были отредактированы с помощью различного
программного обеспечения: Adobe Photoshop, Paint, LightRoom, Pixlr.
Способность алгоритма извлекать метаданные и, следовательно,
обнаруживать поддельный документ зависит от типа ПО, используемого при
редактировании. В таблице 3.1 продемонстрирована возможность
отслеживания изменений с помощью метаданных с использованием
различного ПО. В результате эксперимента было выявлено что в программах
компании Adobe фиксируются изменения метаданных Exif, Xmp, Icc, Iptc,
при редактировании изображения. При использовании ПО Paint все
метаданные, после редактирования очищаются, это связано с механизмами
работы данного ПО.
Таблица 3.1 - Возможность работы алгоритма после редактирования с помощью ПО
EXIF XMP ICC IPTC
Adobe + + + +
Photoshop
Adobe + + + +
LigthRoom
Paint - - - -
Pixlr. + + - -

Для выбора подходящего метода по поиску дубликатов в изображении


было проведено тестирования каждого алгоритма на произвольной выборке

44
из 100 отредактированных документов с помощью копирования и вставки.
Девять из них продемонстрированы на рисунке 3.1.

Рисунок 3.1 - Выборка 9 из 100 документов для тестирования


Для оценки первоначально рассчитывается Confusion Matrix (Матрица
Ошибок), которая содержит следующие измерения:
 Total_Images: общее количество проверенных изображений.
 TP (True Positive): правильно идентифицированные
фальсифицированные изображения.
 TN (True Negative): правильно идентифицированные подлинные
изображения.

45
 FN (False Negative): неправильно идентифицированные
фальсифицированные изображения, фальсифицированные изображения,
которые были идентифицированы как подлинные изображения.
 FP (False Positive): ошибочно идентифицированные подлинные
изображения, подлинные изображения, которые были идентифицированы как
фальсифицированные изображения
Тестирование алгоритмов проходило по следующим метрикам:
Accuracy, Recall, Fmeasure.
Формула расчета Accuracy:
T P +T N
Accuracy= ∗100. (8)
T total
images

Формула расчета Recall:


TP
Recall=
T P+ FN
. (9)

Формула расчета precision:


TP
Precision=
T P+ FP
. (10)

Формула расчета Fmeasure:


2∗Recall∗Precision
F measure= ∗100. (11)
Recall+ Precision

Результаты тестирования представлены в таблице 3.2.


Таблица 3.2 - Оценка алгоритмов поиска дубликатов в изображении
Accuracy Recall Fmeasure
Исчерпывающий поиск 68.89 69.35 78.56
Автокорреляция 74.33 78.35 81.35
Полное Совпадение 71.45 82.78 86.78
Надежное Совпадение 82.35 84.56 86.91

46
В результате исследования выше предложенных алгоритмов, можно
сделать вывод о подходящем алгоритме для прототипа системы обнаружения
фальсифицированных документов исходя из упомянутых требований в
начале подраздела 2.2. Наиболее эффективным алгоритмом является
«Надежное совпадение», его основным отличием от остальных в первую
очередь является квантование коэффициентов DCT, что и влияет на более
высокую точность работы данного алгоритма.
Предложенная методика в разделе 2.3 по обнаружению склеенных
фотографий будет проверяться на публичной базе данных отсканированных
документов [16]. В базе данных имеются изображения разного разрешения,
которые варьируется от 384×256 пикселей до 800×600 пикселей. В этой базе
предоставлены изображения следующих типов: деловые переписки, научные
работы, презентации, резюме и т.д. Все изображения с этого источника
являются оригинальными. Для начала берется выборка из 1000 случайных
изображений, в дальнейшем они будут использоваться при обучении модели.
Для получения второго класса поддельных изображений, необходимо
склеить отобранные изображения с другими элементами. Для этого были
взяты: база данных росписей, куда входили 30 росписей [17], печати и
штампы из открытого доступа. На исходное изображение в случайном
порядке были нанесены печати, росписи и дополнительный текст. После
обработки 1000 фотографий был получен второй класс для дальнейшего
обучения. Все вычисления выполнялись в интерактивной облачной среде
Google Colab.
В ходе оценки данного метода вычислялись следующие метрики:
Accuracy, Recall, Precision и Fmeasure.
Для оценки предложенной методики случайным образом была
разделена база данных в соотношении 80% и 20%, 80% изображений
использовалось для обучения модели (см. таблица 3.3). Размер обучающей
выборки составил 1600 изображений. Размер тестовой выборки составил 400

47
изображений. В качестве оптимизатора был использован оптимизатор Adam
с начальной скоростью обучения 10-5 и размером выборки 64. Оставшиеся
20% изображения предназначены для тестирования. На рисунке 3.2, на
графиках слева продемонстрирована ошибка при обучении и тестировании
предлагаемой модели, справа продемонстрирована точность при обучении и
тестировании предлагаемой модели.
По завершении обучения на моделях с разными параметрами
получилось выявить лучший результат при уровне сжатия в 85%, которые
отображены в таблице 3.4.
Таблица 3.3 - Демонстрация разложения базы данных при обучении
Обучение (80%) Тестирование (20%) Общее
количество
Оригинальные 800 200 1000
Подделанные 800 200 1000

Таблица 3.4 - Измерения метрик на разных уровнях сжатия


Уровень Accuracy Precision Recall Fmeasure
Сжатия (%)
85 72.56 0.80 0.91 85.37
90 74.35 0.83 0.92 89.98
91 77.95 0.83 0.92 89.99
92 79.12 0.84 0.93 90.05
93 81.87 0.83 0.93 90.17
94 80.32 0.84 0.93 90.34
95 80.57 0.85 0.94 90.35
96 83.27 0.84 0.94 90.89
97 82.79 0.84 0.96 91.01
98 85.23 0.85 0.95 91.08
99 81.83 0.86 0.94 90.62

48
100 80.79 0.86 0.93 90.39

Рисунок 3.2 – Графики точности и ошибок предлагаемой модели при обучении и


тестировании
В ходе эксперимента удалось получить результат точности при
тестировании в 85,23% с уровнем сжатия в 98%.
3.2 Используемые технологии в проектировании алгоритмов
При создании алгоритмов использовались следующие библиотеки:
Tensorflow, Opencv, Numpy, Skyimage, Exif, Iptcinfo3, Pillow.
Tensorflow - библиотека для машинного обучения, разработанная
компанией Google для построения и тренировки нейронных сетей.
Использовалась для обучения сверточной нейронной сети для классификации
по наличию склеек в документе.
Opencv - библиотека машинного зрения обработки изображений и
численных алгоритмов общего назначения с открытым кодом.
Использовалась для реализации алгоритма поиска дубликатов в документе.
Numpy – библиотека с открытым исходным кодом для проведения
различных математических операций над многомерными массивами.

49
Exif – библиотека с открытым исходным кодом, предназначенная для
чтения и редактирования Exif метаданных.
Iptcinfo3 - библиотека с открытым исходным кодом, предназначенная
для чтения и редактирования IPTC метаданных.
Pillow - библиотека языка Python, предназначенная для работы с
растровой графикой.
3.3 Проектирование прототипа системы
Целью данной работы является повышение эффективности
обнаружения фальсифицированных документов. Для выполнения данной
цели был спроектирован прототип система, из вышеописанных методов. На
рисунке 3.3 предоставлена общая структура прототипа системы для
составления заключения о фальсификации отсканированного документа.
Текущий прототип адаптирует и использует три известных метода для
обнаружения и локализации распространенных случаев подделки в
отсканированных изображениях документов. Кроме того, извлекается
полезная информация из метаданных изображения, которая может помочь в
обнаружении документов, подвергшихся манипуляциям.
На вход данного прототипа поступает изображение отсканированного
документа. После загрузки изображения, берутся метаданные: EXIF, XMP,
ICC, IPTC. На основе полученных данных фиксируется временный результат.
Затем изображения проходит проверку на поиск дубликатов на документе.
Если были выявлены дубликаты, то полученный результат фиксируется для
дальнейшего заключения. После берется копия изображения проходит
обработку и подается в сверточную нейронную сеть для определения
наличий склеенных в ней изображений, а затем также фиксируется результат.
После прохода по всем алгоритмам полученные промежуточные результаты
выводятся пользователю и дается финальное заключение об
отсканированном документе.

50
Рисунок 3.3 - Схема предлагаемого прототипа системы обнаружения
фальсифицированных документов

51
3.4 Создание web-приложения для обнаружения фальсификации
документов
В этом подразделе будет описано создание web-приложения, как
прототипа системы фальсифицированных документов. В качестве языка
программирования для написания приложения был использован Python.
Данное web приложение было создано c помощью фреймворка Flask, а для
оформления визуальной части использовался стек технологий, состоящий из
HTML, CSS, JavaScript. Flask — фреймворк для создания веб-приложений на
языке программирования Python, использующий набор инструментов
Werkzeug, а также шаблонизатор Jinja2. Относится к категории так
называемых микро фреймворков—минималистичных каркасов веб-
приложений, сознательно предоставляющих лишь самые базовые
возможности. Web-приложение имеет структуру, показанную на рисунке 3.4.

Рисунок 3.4 - Структура Web приложения


В корневом каталоге находятся директории «static», «templates»,
«venv», классы приложения и запускаемый файл. В директории «static»
находятся стили для страниц, изображения, прошедшие анализ, код
«javascript» для анимации и выгружаемые изображения. В файле
«DetectionCopyMoveForgeryClass.py» написан алгоритм для поиска

52
дубликатов в изображении, в файле «ElaClass.py» написан алгоритм для
выявления факта склеивания в изображении, в файле «MetadataClass»
описывается извлечения метаданных из изображения, В файле «main.py»
вызываются все вышеперечисленные классы, а также внутренняя часть Web
приложения.
Web приложение имеет две активные страницы: страница для загрузки
документа (см. рисунок 3.5), страница для показа результатов анализа (см.
рисунок 3.6).

Рисунок 3.5 -Страница для загрузки документа


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

53
Рисунок 3.6 - Страница для показа анализа документа
После секции с анализом документа следует секция с дополнительной
информацией о документе. В эту секцию входят метаданные изображения
документа. На рисунке 3.8 показан пример визуализации метаданных Exif. Из
изображения видно, что в поле software стоит Adobe Photoshop CC
(Windows), это означает что изображение предварительно проходило
обработку и оно фальсифицировано.
В левой части страницы расположена секция с изображениями (см
рисунок 3.9). В нее входят: исходное изображение, маска, полученная в
результате поиска дубликатов. Результат разниц уровней сжатия.

54
Рисунок 3.7 - Секция с анализом документа

Рисунок 3.8 - Секция с дополнительными данными

55
Рисунок 3.9 - Секция с изображениями документа
Создание web-приложения, как средства визуализации было выбрано с
учетом возможной мобильности его использования на различных
устройствах и платформах.
3.5 Результаты тестирования прототипа системы
фальсифицированных документов
На рисунке 3.10 продемонстрирован анализ отсканированного
документа. Документ был предварительно обработан с помощью ПО Adobe
Photoshop, был добавлен штамп и был скопирован и вставлен фрагмент
документа. Предлагаемое ПО предоставило заключение о документе:
документ фальсифицирован.

56
Рисунок 3.10 - Скриншот из ПО №1

На рисунке 3.11 был показан результат анализа фальсифицированного


документа. Документ был предварительно обработан с помощью ПО Adobe
Photoshop, был добавлен штамп, а метаданные были удалены. В результате
анализа была сформировано заключение о фальсификации.

57
Рисунок 3.11 - Скриншот из ПО №2
На рисунке 3.12 был показан результат анализа не подделанного
документа. Результаты обнаружения склеенных фотографий, метаданных, по
поиску дубликатов на документе не выявили факт подделки.

58
Рисунок 3.12 - Скриншот из ПО №3

На рисунке 3.13 был показан результат анализа подделанного


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

59
Рисунок 3.13 - Скриншот из ПО №4

На рисунке 3.14 был показан результат анализа подделанного


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

60
Рисунок 3.14 - Скриншот из ПО №5

61
ЗАКЛЮЧЕНИЕ
В рамках данной работы был разработан прототип системы
обнаружения фальсифицированных документов, в которой используются:
алгоритм анализа метаданных, алгоритм поиска дубликатов в изображении
документа и алгоритм, основанный на ошибках уровня сжатия, для поиска
склеенных фрагментов в изображения документа. Каждый алгоритм работает
независимо друг от друга, в связи с этим были проведены эксперименты над
каждым алгоритмом для оценки эффективности с использованием
определенных показателей. В итоге, все три метода были объединены в 1
алгоритм, чтобы создать единую систему, которая способна
классифицировать фальсифицированные и нефальсифицированные
изображения документов. Разработанный прототип был реализован в
качестве вэб сервиса на основе микро фреймворка Flask.

В ходе эксперимента удалось получить средние точности 85,23% при


обнаружении склеек в документе, 82,35% при обнаружении дубликатов в
документе.

В ходе данной работы были решены следующие задачи:

 Изучены и описаны методы анализа изображений документов;


 В качестве критериев для оценивания существующих методов
были выбраны Accuracy, Recall, Precision и Fmeasure ;
 Разработан принцип работы прототипа системы обнаружения
фальсифицированных документов;
 Выполнена программная реализация прототипа системы;
 Проведено тестирование системы.
C учетом стремительного роста изготовления подделанных документов
задача обнаружения фальсифицированных документов является актуальной и
востребованной. Представленные результаты исследования показывают

62
возможность применения известных методов для выявления подделок в
отсканированных изображениях документов.

В дальнейшей работе, исследование отдельных символов документа, на


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

63
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
1. Новостной портал РБК [Электронный ресурс]. Режим доступа:
https://www.rbc.ru/society/16/04/2021/607994919a794755bb0a12e4 (дата
обращения: 1.05.2022).
2. Уголовный кодекс РФ Статья 327 от 13.06.1996 № 63-ФЗ (ред. от
25.03.2022) «Подделка, изготовление или оборот поддельных документов,
государственных наград, штампов, печатей или бланков» // СПС
КонсультантПлюс.
3. Уголовный кодекс РФ Статья 324 от 13.06.1996 № 63-ФЗ (ред. от
25.03.2022) «Приобретение или сбыт официальных документов и
государственных наград» // СПС КонсультантПлюс.
4. Carrazoni Entenza P. Copy-move forgery detection in scanned text
documents using Zernike and Hu moments. [Электронный ресурс]. 2019. Режим
доступа:
https://www.researchgate.net/publication/347950464_Forgery_Detection_and_Loc
alization_in_Scanned_Documents (дата обращения: 7.04.2022).
5. Tang Zecheng, Wen Xinyuan, Zuo Yansong, Yang Hongli. U 2 -Net for
Image Forgery Detection and Localization. [Электронный ресурс]. 2021. Режим
доступа:
https://www.researchgate.net/publication/352809804_U_2_Net_for_Image_Forger
y_Detection_and_Localization (дата обращения: 30.05.2022).
6. Cruz F., Sidere N., Coustaty M., d’Agency V. P., Ogier J. Local binary
patterns for document forgery detection. [Электронный ресурс]. 2017. Режим
доступа: https://hal.archives-ouvertes.fr/hal-02895650 (дата обращения:
9.04.2022).
7. N. Hema Rajini. Image Forgery Identification using Convolution Neural
Network [Электронный ресурс]. 2019. – Режим доступа:

64
https://www.ijrte.org/wpcontent/uploads/papers/v8i1s4/A10550681S419.pdf (дата
обращения: 9.04.2022).
8. D. P. Gangwar, Anju Pathania. Authentication of Digital Image using Exif
Metadata and Decoding Properties. [Электронный ресурс]. 2018. – Режим
доступа: https://ijsrcseit.com/paper/CSEIT183815.pdf (дата обращения:
15.04.2022).
9. Eric Kee, Micah K. Johnson. Digital Image Authentication From JPEG
Headers [Электронный ресурс]. 2011. Режим доступа:
https://www.researchgate.net/publication/224224881_Digital_Image_Authenticati
on_From_JPEG_Headers (дата обращения: 15.04.2022).
10. Jeronymo D. Document forgery detection using error level analysis and
deep learning. [Электронный ресурс]. 2019. Режим доступа:
https://www.academia.edu/43777685/Image_forgery_detection_using_error_level_
analysis_and_deep_learning (дата обращения: 30.04.2022).
11. Rahman F., Sudiatmika I. B. Image forgery detection using error level
analysis and deep learning. [Электронный ресурс]. 2018. – Режим доступа:
https://www.researchgate.net/publication/332561655_Image_forgery_detection_us
ing_error_level_analysis_and_deep_learning (дата обращения: 1.05.2022).
12. Sunil Kumar, J. V. Desai. Copy Move Image Forgery Detection: Light
Invariant Techniques [учебник] .2020. LAP LAMBERT Academic Publishing.
13. Farid Hany. Digital Image Forensic [учебник]. 2008. The MIT Press.
14. Броневич Андрей Георгиевич. Анализ неопределенности выделения
информативных признаков и представлений изображений. [учебник] Москва:
Физматлит, 2013.
15. Кобозева А. Эффект двойного квантования и его особенности. 2008.
[Электронный ресурс]. 2018. – Режим доступа:
https://onpuinform.files.wordpress.com/2010/02/falsifik3.pdf(дата обращения:
15.05.2022).

65
16. Сайт для разработчиков и исследователей в области машинного
обучения. [Электронный ресурс]. Режим доступа:
https://www.kaggle.com/datasets/shaz13/real-world-documents-collections(дата
обращения: 15.05.2022).
17. Сайт для разработчиков и исследователей в области машинного
обучения. [Электронный ресурс]. Режим доступа:
https://www.kaggle.com/datasets/rafsunsheikh/signatures(дата обращения:
15.05.2022).

66
ПРИЛОЖЕНИЕ 1. ЛИСТИНГ ПРОГРАММЫ
Листинг
import os
from PIL import Image, ImageChops, ImageEnhance
import numpy as np
from tensorflow import keras
import cv2
from exif import Image
import PIL
from iptcinfo3 import IPTCInfo
import os
from math import sqrt
from flask import Flask, flash, request, redirect, url_for, render_template
from werkzeug.utils import secure_filename

def ela(fname, orig_dir, save_dir,quality):


TMP_EXT = "tmp.jpg"
basename, ext = os.path.splitext(fname)
org_fname = os.path.join(orig_dir, fname)
tmp_fname = os.path.join(save_dir, basename + TMP_EXT)
ela_fname = os.path.join(save_dir, '2.jpg')
im = Image.open(org_fname)
im.save(tmp_fname, 'JPEG', quality=quality)
tmp_fname_im = Image.open(tmp_fname)
ela_im = ImageChops.difference(im, tmp_fname_im)
extrema = ela_im.getextrema()
if len(extrema)>2:

67
max_diff = max([ex[1] for ex in extrema])
else:
max_diff = extrema[0]
if max_diff==0: max_diff+=1
scale = 255.0/max_diff
ela_im = ImageEnhance.Brightness(ela_im).enhance(scale)
ela_im.save(ela_fname)
os.remove(tmp_fname)
return ela_im
def prepare_image():
image_size = (128, 128)
ela_im= ela('1.jpg','static\img','static\img',95)
return np.array(ela_im.resize(image_size)).flatten() / 255.0
class DetectionofCopyMoveForgery:
def __init__(self, img, height, width, blocksize, oklid_threshold,
correlation_threshold, vec_len_threshold, num_ofvector_threshold):
self.img = img
self.height = height
self.width = width
self.blocksize = blocksize
self.oklid_threshold = oklid_threshold
self.correlation_threshold = correlation_threshold
self.vec_len_threshold = vec_len_threshold
self.num_ofvector_threshold = num_ofvector_threshold
self.block_vector = []
self.sizeof_vector = 16;
self.hough_space = (self.height, self.width, 2)
self.hough_space = np.zeros(self.hough_space)

68
self.shiftvector = []
def detection_forgery(self):
self.dct_of_img()
self.lexicographically_sort_of_vectors()
self.correlation_of_vectors()
max=-1
num =0
for i in range(self.height):
for j in range(self.width):
for h in range(2):
if(self.hough_space[i][j][h]) > max:
max = self.hough_space[i][j][h]
for i in range(self.height):
for j in range(self.width):
self.img[i][j]=0
for i in range(self.height):
for j in range(self.width):
for h in range(2):
if (self.hough_space[i][j][h]) >= (max -
(max*self.num_ofvector_threshold/100)):
for k in range(len(self.shiftvector)):
if (self.shiftvector[k][0]==j and self.shiftvector[k][1]==i and
self.shiftvector[k][2]==h):
cv2.rectangle(self.img,(self.shiftvector[k][3],
self.shiftvector[k][4]),(self.shiftvector[k][3]+self.blocksize, self.shiftvector[k]
[4]+self.blocksize), (255), -1)
cv2.rectangle(self.img, (self.shiftvector[k][5],
self.shiftvector[k][6]),(self.shiftvector[k][5] + self.blocksize, self.shiftvector[k][6]
+ self.blocksize), (255), -1)

69
num=num+1
cv2.imwrite('static/img/3.jpg', self.img)
if (num>self.width*self.height*64):
return num,1
else:
return num,0
def dct_of_img(self):
for r in range(0, self.height-self.blocksize, 1
for c in range(0, self.width-self.blocksize,1
block = self.img[r:r + self.blocksize, c:c + self.blocksize]
imf = np.float32(block)
dct = cv2.dct(imf)
QUANTIZATION_MAT_10 = np.array([[80, 60, 50, 80, 120, 200, 255,
255], [55, 60, 70, 95, 130, 255, 255,255],
[70, 65, 80, 120, 200, 255, 255, 255], [70, 85, 110,
145, 255, 255,255,255],
[90, 110, 185, 255, 255,255,255,255], [120, 175, 255,
255,255,255, 255,255],
[255, 255,255,255, 255,255,255,255], [255,
255,255,255, 255,255,255,255]])
QUANTIZATION_MAT_50 = np.array([[16, 11, 10, 16, 24, 40, 51, 61],
[12, 12, 14, 19, 26, 58, 60, 55],
[14, 13, 16, 24, 40, 57, 69, 56], [14, 17, 22, 29, 51, 87,
80, 62],
[18, 22, 37, 56, 68, 109, 103, 77], [24, 35, 55, 64, 81,
104, 113, 92],
[49, 64, 78, 87, 103, 121, 120, 101], [72, 92, 95, 98,
112, 100, 103, 99]])
QUANTIZATION_MAT_90 = np.array([[3, 2, 2, 3, 5, 8, 10, 12], [2, 2,
3, 4, 5, 12, 12, 11],

70
[3, 3, 3, 5 ,8, 11, 14, 11], [3, 3, 4, 6, 10, 17, 16, 12],
[4, 4, 7, 11, 14, 22, 21, 15], [5, 7, 11, 13, 16, 12, 23,
18],
[10, 13, 16, 17, 21, 24, 24, 21], [14, 18, 19, 20, 22,
20, 20, 20]])
dct= np.round(np.divide(dct, QUANTIZATION_MAT_90)).astype(int)
dct = (dct/4).astype(int)
self.significant_part_extraction(self.zigzag(dct),c,r)
def zigzag(self,matrix):
vector = []
n = len(matrix) - 1
i=0
j=0
for _ in range(n * 2):
vector.append(matrix[i][j])
if j == n:
i += 1
while i != n:
vector.append(matrix[i][j])
i += 1
j -= 1
elif i == 0:
j += 1
while j != 0:
vector.append(matrix[i][j])
i += 1
j -= 1
elif i == n:

71
j += 1
while j != n:
vector.append(matrix[i][j])
i -= 1
j += 1
elif j == 0:
i += 1
while i != 0:
vector.append(matrix[i][j])
i -= 1
j += 1
vector.append(matrix[i][j])
return vector
def significant_part_extraction(self,vector,x,y):
del vector[self.sizeof_vector:(self.blocksize*self.blocksize)]
vector.append(x)
vector.append(y)
self.block_vector.append(vector)
def lexicographically_sort_of_vectors(self,):
self.block_vector=np.array(self.block_vector)
self.block_vector= self.block_vector[np.lexsort(np.rot90(self.block_vector)[2:
(self.sizeof_vector + 1) + 2 , :])]
def correlation_of_vectors(self):
for i in range(len(self.block_vector)):
if(i+self.correlation_threshold >= len(self.block_vector)):
self.correlation_threshold -=1
for j in range(i+1, i + self.correlation_threshold + 1):

72
if(self.oklid(self.block_vector[i], self.block_vector[j], self.sizeof_vector)
<= self.oklid_threshold):
v1=[]
v2=[]
v1.append(int(self.block_vector[i][-2])) #x1
v1.append(int(self.block_vector[i][-1])) #y1
v2.append(int(self.block_vector[j][-2])) #x2
v2.append(int(self.block_vector[j][-1])) #y2
self.elimination_of_weak_vectors(v1,v2,2)
def elimination_of_weak_vectors(self,vector1,vector2,size):
if(self.oklid(vector1,vector2,size) >= self.vec_len_threshold):
self.elimination_of_weak_area(vector1,vector2)
def elimination_of_weak_area(self,vector1,vector2):
c = abs(vector2[0]-vector1[0])
r = abs(vector2[1]-vector1[1])
if (vector2[0]>=vector1[0]):
if(vector2[1]>=vector1[1]):
z=0
else:
z=1
if (vector1[0] > vector2[0]):
if (vector1[1] >= vector2[1]):
z=0
else:
z=1
self.hough_space[r][c][z] +=1
vector=[]
vector.append(c)

73
vector.append(r)
vector.append(z)
vector.append(vector1[0])
vector.append(vector1[1])
vector.append(vector2[0])
vector.append(vector2[1])
self.shiftvector.append(vector)
def oklid(self,vector1,vector2,size):
sum=0
for i in range(size):
sum += (vector2[i]-vector1[i])**2
return sqrt(sum)

class Metadate(object):
def __init__(self,name):
self.name = name
self.adobe = ""
self.result_exif =""
self.exif_data =""
self.result_xmp =""
self.data_xmp =""
self.result_icc = ""
self.data_icc = ""
self.result_iptc = ""
self.data_iptc = ""
self.date1_xmp =""
self.date2_xmp =""
self.xmp_value = ""

74
def get_exif(self):
with open(self.name, 'rb') as image_file:
my_image = Image(image_file)
for el in my_image.list_all():
if el == 'software':
self.adobe = my_image.get(el)
self.exif_data = self.exif_data + '<br>'+f"{el} : {my_image.get(el)}"
if self.adobe != "":
self.result_exif = f"Использовалось ПО {self.adobe}"
flag = 1
else:
self.result_exif = f"Использование ПО не обнаружено."
if self.exif_data == "":
self.exif_data = f"Exif данные не обнаружены, возможно были
удалены."
flag = 0
return self.exif_data, self.result_exif, flag
def get_xmp(self):
with open(self.name, 'rb') as file:
contents = file.read()
imgAsString = str(contents)
xmp_start = imgAsString.find('<x:xmpmeta')
xmp_end = imgAsString.find('</x:xmpmeta')
if xmp_start != xmp_end:
xmpString = imgAsString[xmp_start:xmp_end + 12]
for el in xmpString.split(" "):
if "=" in el:
key, value = el.split("=")

75
if "Resource" not in value:
value = value.replace('"', '')
if key == "xmp:CreateDate":
self.date1_xmp = value
elif key == "xmp:ModifyDate":
self.date1_xmp = value
elif key == "stEvt:softwareAgent" or key == "xmlns:photoshop":
self.xmp_value = value
self.data_xmp = self.data_xmp + f"{key}:{value}"+"<br>"
if self.date1_xmp != self.date2_xmp:
self.result_xmp = f"Отличия даты создания {self.date1_xmp} и даты
редактирования {self.date1_xmp}"
else:
self.result_xmp = f"Даты создания {self.date1_xmp} и даты
редактирования {self.date1_xmp} совпадают"
if self.xmp_value != "":
self.result_xmp = self.result_xmp + '<br>'+ f"Использовалось ПО
{self.xmp_value}"
else:
self.result_xmp = self.result_xmp +'<br>' + f"Использование ПО не
обнаружено"
flag = 1
if self.data_xmp == "":
self.data_xmp = f"XMP данные не обнаружены, возможно были
удалены."
flag =0
return self.data_xmp,self.result_xmp,flag
def get_ICC(self):
from PIL import Image

76
flag = 0
icc = Image.open(self.name).info.get('icc_profile')
if icc == "ICC None" or icc == None:
self.data_icc = f"ICC данные не обнаружены, возможно были удалены."
self.result_icc ="ICC данные не обнаружены, возможно были удалены"
flag = 0
else:
self.date_icc =self.data_icc + "<br>"+f"{icc}"
self.result_icc ="ICC данные даынне обнаружены"
flag =1
return self.data_icc,self.result_icc, flag
def get_IPTC(self):
flag = 0
iptc = IPTCInfo(self.name)
if len(iptc) > 3:
self.data_iptc = "Заголовков IPTC обнаружены"
self.result_iptc = "Заголовков IPTC обнаружены"
flag = 1
else:
self.data_iptc = "Заголовков IPTC не обнаружены, возможно были
удалены"
self.result_iptc = "Заголовков IPTC не обнаружены, возможно были
удалены"
flag = 0
return self.data_iptc,self.result_iptc, flag
import os
from DetectionofCopyMoveForgeryClass import DetectionofCopyMoveForgery
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif'])

77
UPLOAD_FOLDER = 'static/uploads/'
IMGS = 'static/img/'
app = Flask(__name__)
app.secret_key = "secret key"
app.config['TESTING'] = True
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in
ALLOWED_EXTENSIONS
@app.route('/')
def upload_form():
return render_template('upload.html')
@app.route('/img',methods=['POST','GET'])
def analyse_img():
meta =Metadate('static/img/1.jpg')
data_exif,result_exif, f1 =meta.get_exif()
data_xmp,result_xmp, f2 =meta.get_xmp()
data_icc,result_icc, f3 =meta.get_ICC()
data_iptc,result_iptc, f4 =meta.get_IPTC()
ela('1.jpg','static\img','static\img',98)
pred_img = np.array(prepare_image()).reshape(-1,128,128,3)
result = result_exif +'<br>' +result_xmp + '<br>' +result_icc +'<br>' +result_iptc
model = keras.models.load_model("model.h5")
pred_r = str(model.predict(pred_img)[0,0]*100)[0:5]
prediction_result = f"Вероятность фальсификации : {pred_r }%"
img = cv2.imread("static/img/1.jpg", 0)
height, width = img.shape

78
need_to_detect = DetectionofCopyMoveForgery(img, height, width, 8, 3.5, 8,
100, 10)
num,res = need_to_detect.detection_forgery()
result_copymove =f"Было найдено {num} индектичных блока "
if (f1==1 || f2 ==1 || f3 ==1 || f4 ==1 || pred_r > 65 || res == 1) :
general_conlusion = 1
else:
general_conlusion = 0
return render_template('analyse_img.html',d_exif =data_exif,res =result,d_xmp
=data_xmp,d_icc=data_icc,d_iptc = data_iptc,pred = prediction_result,
copy_move=result_copymove,conlusion=general_conlusion)
@app.route('/', methods=['POST'])
def upload_image():
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
if file.filename == '''':
flash('No image selected for uploading')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
if ‘jpeg' not in filename or 'jpg' not in filename:
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
image = Image.open(UPLOAD_FOLDER+filename)
rgb_im = image.convert('RGB')
rgb_im.save('static/img/1.jpg')
else:

79
file.save(os.path.join(app.config['IMGS'], filename))
flash('Image successfully uploaded and displayed below')
return redirect("/img")
else:
flash('Allowed image types are -> png, jpg, jpeg, gif')
return redirect(request.url)
@app.route('/display/<filename>')
def display_image(filename):
print('display_image filename: ' + filename)
return redirect(url_for('static', filename='uploads/' + filename), code=301)
if __name__ == "__main__":
app.run(debug=True, use_debugger=False, use_reloader=True )

80

You might also like