
Набор инструментов с открытым исходным кодом для криминалистики цифровых изображений
Набор инструментов с открытым исходным кодом для цифровой криминалистики изображений
«Криминалистический анализ изображений — это применение науки об изображениях и экспертных знаний для интерпретации содержания изображения и/или самого изображения в юридических вопросах. Основные поддисциплины криминалистического анализа изображений, применяемые в правоохранительных органах, включают: фотограмметрию, фотосравнение, контент-анализ и аутентификацию изображений.» (Научная рабочая группа по технологиям визуализации)
Sherloq — это личный исследовательский проект по созданию полностью интегрированной среды для цифровой криминалистики изображений. Он не предназначен для автоматического определения подлинности изображения (такого инструмента, скорее всего, никогда не будет...), а служит помощником для экспериментов с различными алгоритмами из последних исследовательских работ и семинаров.
В то время как многие коммерческие решения имеют высокие розничные цены и часто доступны только правоохранительным органам и государственным учреждениям, этот набор инструментов стремится быть как расширяемой платформой, так и отправной точкой для всех, кто заинтересован в проведении экспериментов в этой конкретной области цифровой обработки сигналов.
Я твердо верю, что безопасность через неясность — это неправильный способ предоставления каких-либо криминалистических услуг (например, «Используя это проприетарное программное обеспечение, я гарантирую, что это фото безупречно... и вы должны мне доверять!»). Следуя философии открытого исходного кода, каждый должен иметь возможность попробовать различные техники самостоятельно, получить знания и поделиться ими с сообществом... еще лучше, если они внесут свой вклад в улучшение кода! :)
Первая версия была написана в 2015 году на C++11 для создания утилиты командной строки с множеством опций, но вскоре оказалось, что она слишком громоздкая и недостаточно интерактивная. Эту версию можно было скомпилировать с помощью CMake после установки библиотек OpenCV, Boost и AlgLib. Эта первая концепция предоставляла около 80% запланированных функций (см. полный список ниже).
Версия 2017 года, помимо включения новых алгоритмов, в основном добавила многоконный графический интерфейс на Qt для улучшения пользовательского опыта. На экране можно было отображать несколько анализов, а для удобной навигации по изображению был реализован быстрый просмотрщик с масштабированием и прокруткой. Этот проект можно было скомпилировать в Qt Creator с Qt 5 и OpenCV 3, и он охватывал около 70% запланированных функций.
Перенесемся в 2020 год, когда я решил портировать все на Python (PySide2 + Matplotlib + OpenCV) для упрощения разработки и развертывания. Хотя эта итерация только началась, и мне еще предстоит портировать весь предыдущий код на новую платформу, я думаю, это будет окончательной «формой» проекта (пока кто-нибудь не вызовется разработать хорошее веб-приложение!).
Я рад поделиться своим кодом и связаться с любым, кто заинтересован в его улучшении или тестировании, но, пожалуйста, имейте в виду, что этот репозиторий не предназначен для распространения готового продукта, моя цель — просто публично отслеживать разработку непритязательного образовательного инструмента, так что ожидайте ошибок, неотшлифованного кода и отсутствующих функций! ;)
Этот список содержит функции, которые набор инструментов (надеюсь) будет предоставлять после достижения стадии бета-версии (ПРИМЕЧАНИЕ: функции, отображаемые курсивом в программе, еще не реализованы!).
Общие: Оригинальное изображение, Шестнадцатеричный редактор, Дайджест файла, Поиск похожих
Метаданные: Полный дамп EXIF, Структура заголовка
Осмотр: Увеличительное стекло с улучшением, Гистограмма канала, Сравнение с эталоном
Детали: Градиент яркости, Фильтр эхо-краев, Вейвлет-порог, Частотное разделение
Цвета: Графики RGB/HSV, Преобразование пространства, Проекция PCA, Статистика пикселей
Шум: Разделение сигнала, Отклонение мин/макс, Значения битовых плоскостей
JPEG: Оценка качества, Анализ уровня ошибок
Фальсификация: Улучшение контраста, Подделка копированием/перемещением, Композитный монтаж, Медианная фильтрация
Клонируйте текущий репозиторий в локальную папку и перейдите в нее.
Sherloq использует Python 3.11. Рекомендуется использовать uv, так как он обеспечивает одинаковый рабочий процесс в Linux, macOS и Windows, может устанавливать Python при необходимости и хранит окружение проекта в локальной папке .venv.
Установите uv следуя официальному руководству по установке, затем создайте окружение из корневой папки Sherloq:
$ uv venv --python 3.11
Репозиторий также содержит файл .python-version, поэтому будущие команды uv по умолчанию будут использовать Python 3.11.
$ uv pip install -r gui/requirements.txt
Некоторые экспериментальные инструменты на основе ИИ требуют дополнительных пакетов. Устанавливайте их только если планируете использовать эти инструменты:
$ uv pip install -r gui/requirements_ai_solutions.txt
Sherloq можно запустить из корня репозитория. Пакет приложения разрешает иконки, модели и встроенные инструменты через централизованные пути проекта.
$ source .venv/bin/activate
$ python -m gui.sherloq_app
> .venv\Scripts\Activate.ps1
> python -m gui.sherloq_app
Также можно использовать совместимый лаунчер из корня репозитория:
$ python sherloq.py
ПРИМЕЧАНИЕ для пользователей Linux: если отображается эта ошибка:
qt.qpa.plugin: From 6.5.0, xcb-cursor0 or libxcb-cursor0 is needed to load the Qt xcb platform plugin.
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Выполните эту команду в терминале: sudo apt install -y libxcb-cursor-dev
Теперь приложение Python Qt находится в импортируемом пакете gui/sherloq_app:
main.py: точка входа в приложение Qt и главное окно.core/: общие вспомогательные функции для обработки изображений, такие как утилиты JPEG и загрузка файлов.ui/: переиспользуемые виджеты Qt, просмотрщики, таблицы и дерево инструментов.tools/: виджеты анализа, сгруппированные по категориям набора инструментов (general, metadata, inspection, detail, colors, noise, jpeg, tampering, various).paths.py: централизованный доступ к иконкам, моделям и встроенным нативным помощникам, так что код больше не зависит от запуска из .Крупные встроенные ресурсы и сторонние исследовательские компоненты остаются в gui/icons, gui/models, gui/noiseprint, gui/pyexiftool, gui/butteraugli, gui/ssimulacra и дополнительном gui/TruFor_main.
См. docs/project-structure.md для карты для разработчиков.
Когда выходит новая версия, обновите локальную рабочую копию через Git или скачав последний исходный код, затем обновите окружение из корневой папки Sherloq:
$ uv pip install --upgrade -r gui/requirements.txt
Если вы установили дополнительные зависимости ИИ, обновите и их:
$ uv pip install --upgrade -r gui/requirements_ai_solutions.txt
gui