
オープンソースのデジタル画像フォレンジックツールセット
"フォレンジック画像分析とは、画像科学と専門知識を応用して、法的問題において画像の内容や画像自体を解釈することです。法執行機関向けのフォレンジック画像分析の主要なサブ分野には、写真測量、写真比較、内容分析、画像認証が含まれます。"(Scientific Working Group on Imaging Technologies)
Sherloq は、デジタル画像フォレンジックのための完全に統合された環境を実装する個人研究プロジェクトです。画像が改ざんされているかどうかを自動的に判断するツール(おそらくそのようなツールは永遠に存在しないでしょう...)ではなく、最新の研究論文やワークショップで見られるさまざまなアルゴリズムを実験するための相棒として意図されています。
多くの商用ソリューションは高額な価格で、多くの場合、法執行機関や政府機関のみに限定されていますが、このツールセットは、拡張可能なフレームワークであると同時に、デジタル信号処理のこの特定の応用に興味がある誰にとっても出発点となることを目指しています。
私は、隠蔽によるセキュリティ があらゆるフォレンジックサービスを提供するための間違った方法であると強く信じています(例えば、「この独自ソフトウェアを使用することで、この写真がオリジナルであることを保証します...そして、私を信頼しなければなりません!」)。オープンソースの哲学に従い、誰もが自分自身でさまざまな技術を試し、知識を得てコミュニティと共有できるべきです...コードの改善に貢献してくれればなおさらです! :)
最初のバージョンは2015年にC++11で書かれ、多くのオプションを持つコマンドラインユーティリティとして構築されましたが、すぐに扱いにくく、あまりインタラクティブでないことが判明しました。そのバージョンは、OpenCV、Boost、AlgLibライブラリをインストールした後、CMakeでコンパイルできました。この最初の概念実証では、計画された機能の約80%を提供していました(完全なリストは以下を参照)。
新しいアルゴリズムも含まれていましたが、2017年バージョンでは主にQtベースのマルチウィンドウGUIを追加して、より良いユーザーエクスペリエンスを提供しました。複数の分析を画面に表示でき、高速なズーム/スクロールビューアが実装され、画像ナビゲーションが容易になりました。そのプロジェクトは、Qt 5とOpenCV 3を使用してQt Creatorでコンパイルでき、計画機能の約70%をカバーしていました。
時は2020年に進み、私は開発と展開を容易にするためにすべてをPython(PySide2 + Matplotlib + OpenCV)に移植することを決めました。この反復は始まったばかりで、以前のコードをすべて新しいプラットフォームに移植する必要がありますが、これがプロジェクトの最終的な「形」になると思います(誰かが素敵なWebアプリケーションを開発しようと志願しない限り)。
コードを共有し、改善やテストに興味がある人と連絡を取ることを嬉しく思いますが、このリポジトリは最終製品を配布するためのものではないことに注意してください。私の目的は、教育ツールの開発を公開で追跡することに過ぎません。バグ、未完成のコード、欠落機能を期待してください! ;)
このリストには、ベータ段階に達したらツールキットが(おそらく)提供する機能が含まれています(注: プログラム内で斜体で表示される機能はまだ実装されていません!)。
一般: 元の画像、16進エディタ、ファイルダイジェスト、類似検索
メタデータ: 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
一部の実験的なAIバックアップツールには追加パッケージが必要です。それらのツールを使用する予定がある場合のみインストールしてください:
$ 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からの起動に依存しなくなります。大規模なバンドルアセットとサードパーティの研究コンポーネントは、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
オプションのAI依存関係をインストールした場合は、それらも更新します:
$ uv pip install --upgrade -r gui/requirements_ai_solutions.txt