Набор инструментов с открытым исходным кодом для цифровой криминалистики изображений
Введение
«Криминалистический анализ изображений — это применение науки об изображениях и экспертных знаний для интерпретации содержания изображения и/или самого изображения в юридических вопросах. Основные поддисциплины криминалистического анализа изображений, применяемые в правоохранительных органах, включают: фотограмметрию, фотосравнение, контент-анализ и аутентификацию изображений.» (Научная рабочая группа по технологиям визуализации)
Sherloq — это личный исследовательский проект по созданию полностью интегрированной среды для цифровой криминалистики изображений. Он не предназначен для автоматического определения подлинности изображения (такого инструмента, скорее всего, никогда не будет...), а служит помощником для экспериментов с различными алгоритмами из последних исследовательских работ и семинаров.
В то время как многие коммерческие решения имеют высокие розничные цены и часто доступны только правоохранительным органам и государственным учреждениям, этот набор инструментов стремится быть как расширяемой платформой, так и отправной точкой для всех, кто заинтересован в проведении экспериментов в этой конкретной области цифровой обработки сигналов.
Я твердо верю, что безопасность через неясность — это неправильный способ предоставления каких-либо криминалистических услуг (например, «Используя это проприетарное программное обеспечение, я гарантирую, что это фото безупречно... и вы должны мне доверять!»). Следуя философии открытого исходного кода, каждый должен иметь возможность попробовать различные техники самостоятельно, получить знания и поделиться ими с сообществом... еще лучше, если они внесут свой вклад в улучшение кода! :)
История
Первая версия была написана в 2015 году на C++11 для создания утилиты командной строки с множеством опций, но вскоре оказалось, что она слишком громоздкая и недостаточно интерактивная. Эту версию можно было скомпилировать с помощью CMake после установки библиотек OpenCV, Boost и AlgLib. Эта первая концепция предоставляла около 80% запланированных функций (см. полный список ниже).
Версия 2017 года, помимо включения новых алгоритмов, в основном добавила многоконный графический интерфейс на Qt для улучшения пользовательского опыта. На экране можно было отображать несколько анализов, а для удобной навигации по изображению был реализован быстрый просмотрщик с масштабированием и прокруткой. Этот проект можно было скомпилировать в Qt Creator с Qt 5 и OpenCV 3, и он охватывал около 70% запланированных функций.
Перенесемся в 2020 год, когда я решил портировать все на Python (PySide2 + Matplotlib + OpenCV) для упрощения разработки и развертывания. Хотя эта итерация только началась, и мне еще предстоит портировать весь предыдущий код на новую платформу, я думаю, это будет окончательной «формой» проекта (пока кто-нибудь не вызовется разработать хорошее веб-приложение!).
Я рад поделиться своим кодом и связаться с любым, кто заинтересован в его улучшении или тестировании, но, пожалуйста, имейте в виду, что этот репозиторий не предназначен для распространения готового продукта, моя цель — просто публично отслеживать разработку непритязательного образовательного инструмента, так что ожидайте ошибок, неотшлифованного кода и отсутствующих функций! ;)
Возможности
Этот список содержит функции, которые набор инструментов (надеюсь) будет предоставлять после достижения стадии бета-версии (ПРИМЕЧАНИЕ: функции, отображаемые курсивом в программе, еще не реализованы!).
Интерфейс
- Современный графический интерфейс на Qt с управлением несколькими окнами инструментов
- Поддержка множества форматов (JPEG, PNG, TIFF, BMP, WebP, PGM, PFM, GIF)
- Высокоотзывчивый просмотрщик изображений с панорамированием и масштабированием в реальном времени
- Множество современных алгоритмов для интерактивного опробования
- Экспорт как визуальных, так и текстовых результатов анализа
- Обширная онлайн-справка с объяснениями и учебными пособиями
Инструменты
Общие
- Оригинальное изображение: отображение неизмененного эталонного изображения для визуального осмотра
- Дайджест файла: получение физической информации о файле, криптографических и перцептивных хешей
- Шестнадцатеричный редактор: открытие внешнего шестнадцатеричного редактора для просмотра и редактирования необработанных байтов
- Поиск похожих: просмотр онлайн-сервисов поиска для нахождения визуально похожих изображений
Метаданные
- Структура заголовка: дамп структуры заголовка файла и интерактивное представление
- Полный дамп EXIF: сканирование метаданных файла и сбор всей доступной информации
- Анализ миниатюр: извлечение встроенной миниатюры (если есть) и сравнение с оригиналом
- Геолокационные данные: извлечение геолокационных данных (если есть) и отображение на карте мира
Осмотр
- Увеличительное стекло с улучшением: лупа с улучшениями для лучшего выявления подделок
- Гистограмма канала: отображение отдельных цветовых каналов или композитной RGB-гистограммы в интерактивном режиме
- Глобальные настройки: применение стандартных настроек изображения (яркость, оттенок, насыщенность, ...)
- Сравнение с эталоном: открытие синхронизированного двойного вида для сравнения с другим изображением
Детали
- Градиент яркости: анализ горизонтальных/вертикальных вариаций яркости по изображению
- Фильтр эхо-краев: использование производных фильтров для выявления искусственно размытых областей
- Вейвлет-порог: реконструкция изображения с различными порогами вейвлет-коэффициентов
- Частотное разделение: разделение яркости изображения на высоко- и низкочастотные компоненты
Цвета
- Графики RGB/HSV: отображение интерактивных 2D и 3D графиков значений пикселей RGB и HSV
- Преобразование пространства: преобразование RGB-каналов в пространства HSV/YCbCr/Lab/Luv/CMYK/Gray
- Проекция PCA: использование цветового PCA для проецирования пикселя на наиболее значимые компоненты
- Статистика пикселей: вычисление минимальных/максимальных/средних значений RGB для каждого пикселя
Шум
- Разделение шума: оценка и извлечение различных компонентов шума изображения
- Отклонение мин/макс: выделение пикселей, отклоняющихся от блочной статистики минимума/максимума
- Значения битовых плоскостей: отображение отдельных битовых плоскостей для поиска несогласованных шумовых паттернов
- Вейвлет-блокирование: отображение усредненных уровней шума в изображении для поиска несоответствий шума
- Идентификация PRNU: использование характерного шума сенсора, вносимого разными камерами
JPEG
- Оценка качества: извлечение таблиц квантования и оценка последнего сохраненного качества JPEG
- Анализ уровня ошибок: отображение поникельной разницы при фиксированных уровнях сжатия
- Многократное сжатие: использование модели машинного обучения для обнаружения многократного сжатия
- JPEG Ghost Maps: выделение следов различных уровней сжатия в разностных изображениях
Фальсификация
- Улучшение контраста: анализ цветового распределения для обнаружения улучшений контраста
- Подделка копированием-перемещением: использование инвариантных дескрипторов признаков для обнаружения клонированных областей
- Композитный монтаж: использование статистики DCT для автоматического обнаружения зон монтажа
- Передискретизация изображения: оценка 2D пиксельной интерполяции для обнаружения следов передискретизации