一个开源的数字图像取证工具集
"法庭图像分析是运用图像科学和领域专业知识,在法律事务中解释图像内容和/或图像本身的活动。具有执法应用背景的法庭图像分析主要子学科包括:摄影测量、摄影比对、内容分析和图像鉴真。"(科学工作组成像技术)
Sherloq 是一个个人研究项目,旨在实现一个完全集成的数字图像取证环境。它并非一个能自动判断图像是否被篡改的工具(这样的工具可能永远不会存在……),而是作为实验最新研究论文和研讨会中各种算法的辅助工具。
尽管许多商业解决方案价格高昂,且通常仅限执法和政府机构使用,但本工具集旨在成为一个可扩展的框架,同时也为任何对数字信号处理这一特定应用领域感兴趣的人提供一个起点。
我坚信安全通过隐晦是提供任何取证服务的错误方式(例如:“使用这个专有软件,我向你保证这张照片是原始的……你必须相信我!”)。遵循开源理念,每个人都应该能够自行尝试各种技术,获取知识并与社区分享……如果能贡献代码改进就更好了!:)
第一个版本于2015年用C++11编写,构建了一个带有多选项的命令行实用工具,但很快发现它过于笨重且交互性不足。该版本可在安装OpenCV、Boost和AlgLib库后通过CMake编译。这个最初的概念验证实现了约80%的预期功能(完整列表见下文)。
2017版本在包含新颖算法的同时,主要增加了基于Qt的多窗口GUI以提供更好的用户体验。多个分析结果可同时显示在屏幕上,并实现了快速缩放/滚动的查看器,方便图像导航。该项目可使用Qt Creator配合Qt 5和OpenCV 3进行编译,覆盖了约70%的预期功能。
快进到2020年,我决定将所有代码移植到Python(PySide2 + Matplotlib + OpenCV),以便更轻松地开发和部署。虽然这一迭代才刚刚开始,我尚未将所有之前的代码移植到新平台,但我认为这将是项目的最终“形态”(除非有人自愿开发一个漂亮的Web应用程序!)。
我很乐意分享我的代码,并与任何有兴趣改进或测试它的人联系,但请记住,该仓库并非用于分发最终产品,我的目标只是在公开环境下跟踪一个谦逊的教育工具的开发,所以请期待存在bug、代码不完善和缺少功能的情况!;)
以下列表包含了工具包在达到测试版后将(希望)提供的功能(注意: 程序中以斜体显示的功能尚未实现!)。
通用:原始图像、十六进制编辑器、文件摘要、相似搜索
元数据: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/:按工具箱类别分组(通用、元数据、检查、细节、颜色、噪声、jpeg、篡改、其他)的分析小部件。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