dsh-Bio-image-dup-check
科研图片查重 DSH 插件 · 本地离线检测整图重复/翻转/旋转/缩放、copy-move、跨图区域复用与 PDF 稿件图片。A local-offline integrity checker for life-science figures (DeepSeek Harness plugin).
- Stars
- 1
- Language
- JavaScript
- Created
- Aug 25, 2026
- Updated
- Aug 25, 2026
Introduction
科研图片查重 · dsh-Bio-image-dup-check
一个运行在 DeepSeek Harness (DSH) 里的生命科学科研图片查重插件:检测图片之间的整图重复 / 翻转 / 旋转 / 缩放重压缩、单图内部的局部复制粘贴(copy-move)、跨图局部区域复用(自动框出并给出裁剪对比),并支持对 PDF 稿件直接抽取图片查重(带页码标注)。输出美观的可视化报告,全程本地离线,不上传任何图片数据。
English — A local, offline image-integrity checker for life-science figures (Western blots, microscopy, gels, FACS…), built as a DeepSeek Harness plugin. It detects whole-image duplicates / flips / rotations / resizing, intra-image copy-move forgery, cross-image region reuse (with auto-cropped side-by-side evidence) and duplicates inside PDF manuscripts — entirely on your machine. Documentation is primarily in Chinese; issues and PRs in any language are welcome.
功能特性 · Features
- 整图相似度:aHash + dHash(含 6 种几何变换)+ pHash 三路感知哈希,自动标出「重复 / 水平翻转 / 垂直翻转 / 旋转 90°·180°·270° / 缩放重压缩」。
- 局部重复(copy-move):16×16 分块 + 8×8 灰度向量 RMS 匹配 + 偏移聚类,在单张图上框出被复制粘贴的区域(红=源,蓝=复制)。
- 跨图局部复用:分块偏移聚类 + 区域 RMS + 结构哈希复核,自动生成“图A 复用区域 ↔ 图B 对应区域”的并排裁剪图(可点击放大),覆盖同尺度与放大裁剪(0.2x–1x 缩放检测)。
- PDF 稿件查重:对象级解析(XObject / ObjStm / 间接色彩空间 / SMask 排除),JPEG / Flate(含 PNG-TIFF 预测器)/ ASCII85 / RunLength / JPEG2000 / Indexed / ICCBased / CMYK / 灰度;按页面内容流精确标注页码;默认忽略“未被页面绘制的冗余对象”避免幽灵副本膨胀;可只报跨页重复。
- 目录递归 + 子文件夹汇总:扫描一个大文件夹下的所有子文件夹,按子文件夹汇总(图片数 / 组内重复 / 跨文件夹重复),支持文件夹筛选。
- 一个「刷新」搞定调参:拖拽图片、目录、PDF 三种入口都会记住已载入的数据,更改阈值/开关后点「刷新」即重新检测,无需重新上传。
- 美观报告:摘要徽章、子文件夹汇总、重复分组(传递闭包聚类)、相似度热力矩阵、疑似对并排缩略图、局部复用裁剪对比。
- 导出:HTML(自包含,可离线打开/分享)、Markdown、JSON。
- 双入口:图形界面(DSH 设置页)+ Agent 工具
check_image_duplicates(folder)。 - 深色模式适配、完全本地离线、可持续集成(GitHub Actions)。
支持格式 · Supported formats
| 类别 | 格式 | 解码器 |
|---|---|---|
| 基础 | PNG、JPEG、BMP、GIF、TIFF | jimp(纯 JS) |
| 扩展 | WebP、AVIF、HEIC/HEIF、JPEG2000(.jp2/.j2k)、SVG | sharp(预编译 libvips),jimp 失败时自动后备 |
| PDF 内嵌 | JPEG、Flate(含 PNG/TIFF 预测器)、ASCII85/Hex、RunLength、JPEG2000、Indexed/ICCBased/CMYK/灰度 | 自研对象级解析器 + 上述解码器 |
| 不支持 | PDF 中的 CCITT Fax 黑白压缩图、纯矢量图形(非位图) | — |
未安装 sharp 时仅影响扩展格式(提示“格式不支持”),其余功能不受影响;
npm install会一并下载 sharp 的预编译二进制,无需本地编译。
快速开始 · Quick start(动态插件形态)
git clone https://github.com/PetCT/dsh-Bio-image-dup-check.git && cd dsh-Bio-image-dup-check
npm install # 安装 jimp + sharp(平台预编译二进制,无需本地编译)
node hash-worker.mjs --selftest # 自检算法(翻转/旋转/局部复制判定)
node make-demo.mjs && node hash-worker.mjs --dir demo --threshold 8 # 端到端冒烟
然后在任意 DSH 会话里:
- 打开本目录的
host.js,把文件内容整体粘贴到cordis_define的code.host; - 打开
client.js,把文件内容整体粘贴到code.client; cordis_run激活(Client 半部分需在 Run 卡片勾选授权)。
⚠️ 唯一需要配置的地方:
host.js顶部有一处WORKER_PATH常量,请改成你本机hash-worker.mjs所在的绝对路径(动态插件沙箱无法探测/引用文件,这是设计如此;路径写错时会给出明确报错提示)。
使用 · Usage
图形界面
DSH 设置 → 「科研图片查重」,三种入口:
- 拖拽/选择图片:多选图片文件(支持上表全部格式),调阈值后点「刷新」重跑;
- 扫描目录:点「选择文件夹」或输入路径,勾选「包含子文件夹(汇总)」递归扫描;结果顶部按子文件夹汇总并支持筛选;
- PDF 检测:选择 PDF,勾选「忽略未绘制对象(推荐)」「仅报跨页重复」,改设置后点「刷新」即可不用再上传。
查看报告:摘要、子文件夹汇总、重复分组、疑似重复/变换对(可按类型/文件夹筛选排序)、疑似局部复用(裁剪对比图)、相似度矩阵、局部重复区域高亮;点「导出 HTML / Markdown / JSON」保存报告。
Agent 工具
直接对 DSH 说:「帮我查 G:\papers\figures 目录下的图片重复」,或调用:
check_image_duplicates(folder="G:\papers\figures", threshold=8, recursive=true)
检测算法 · Algorithm
- 感知哈希:灰度(Rec.601)→ 区域平均下采样 → aHash(8×8) / dHash-H(9×8) / dHash-V(8×9) / pHash(32×32 DCT);两两汉明距离 + 6 种几何变换比对 → 判定变换类型。
- copy-move:长边 ≤384px 灰度 → 16×16 块(步长 16)→ 8×8 灰度向量 RMS + 均值差匹配(剔除平坦块)→ 按位移向量聚类 → 输出归一化区域矩形对。
- 跨图复用:24×24 密度网格 + 块 RMS(≤9) + 均值(±16) 过滤 → 位移聚类 → 区域级 RMS(≤9) + dHash(≤40) 结构校验 → 输出归一化区域对与缩放比。
- PDF 解析:
N 0 obj分段 + 递归字典解析(含对象流 ObjStm、间接颜色空间、SMask 排除)→ 按页面内容流Do操作符精确映射页码(支持Image-xxx等带连字符名称、Form 递归)。
详细设计见 SPEC.md,算法口径见 CHANGELOG.md。
项目结构 · Structure
.
├── host.js # Host 半部分(动态插件)
├── client.js # Client 半部分(动态插件)
├── hash-worker.mjs # 哈希引擎(Node + jimp + sharp + PDF 解析)
├── make-demo.mjs # 生成演示图
├── package.json # jimp / sharp / pdf-lib 依赖 + 元数据
├── cordis.patch.yml # 持久化安装用的 bundle patch(可选)
├── SPEC.md # 设计规范(v1.1 基线 + 实现状态补充)
├── CONTRIBUTING.md # 贡献指南
├── CODE_OF_CONDUCT.md # 行为准则
├── CHANGELOG.md # 更新日志
├── README.md
├── LICENSE # MIT
└── .github/
├── workflows/ci.yml # CI:语法 + 自检 + 目录/PDF 冒烟
├── ISSUE_TEMPLATE/ # Bug / 功能请求模板
└── PULL_REQUEST_TEMPLATE.md
关于作者与社区共建 · About & Community
作者是一名生命科学博士,这个工具最早就是为了自己投稿前查自己稿件的图片问题而写的。它围绕真实论文图片(组织切片、Western blot、凝胶电泳、流式图、PDF 稿件)打磨,算法与流程经过多轮真实稿件验证。
诚实地讲:作者不是专业开发者(代码可能不符合“工程最佳实践”),但产品目标是实打实解决科研图片查重的痛点。因此:
- 发现误报 / 漏报?遇到解析不了的文件?有想加的功能? → 请开 Issue。你手里的一张真实图片或一个 PDF,就是这个项目最好的测试用例。(数据保密:请只上传/提供你有权使用的样本;检测全程本地离线,项目绝不收集任何图片。)
- 想动手改进? → 任何层级的贡献都欢迎:修 bug、补文档、加测试、优化界面、改算法。见 CONTRIBUTING.md。
- 这个项目的迭代方式:作者定方向并维护主流程,社区可以在上面直接打磨——比如把某个检测算法调得更准、支持你实验室的专属格式、让报告更漂亮。欢迎 fork 回来,我们一起把它做成一个投稿前真正愿意用的查重工具。
Roadmap(欢迎认领)
- 算法:自适应阈值 / 同源显微视野降噪(现已有「仅报跨页重复」开关做缓解);Western blot 条带、凝胶泳道专项比对。
- 格式:CCITT 传真 PDF 图;原始显微格式(OME-TIFF / CZI)。
- 报告:批处理导出、跨文件 CSV 汇总、对比裁图自动排版。
- 分发:npm 包 / 持久化 DSH bundle 的完善安装体验。
限制与免责声明 · Limitations
- 检测基于启发式算法(感知哈希 + 分块匹配),结果需人工复核,不构成学术结论。
- 单文件 > 25MB 跳过;目录模式默认限制 1000 张(可调
limit);拖拽模式单批 ≤60 张;PDF 单文件 ≤100MB、检测限时 240s。 - 规则性重复纹理(如细胞培养板孔、凝胶泳道)可能触发误报——这通常是值得人工确认的信号。
- 同源显微照片(同一组织的不同视野/倍率)缩略后可能被判为“近重复”,可提高阈值或开启「仅报跨页重复」降低噪声。
- PDF 中的纯矢量图形不会被当作图片(无内嵌位图);CCITT 传真压缩图(老旧扫描件)暂不支持。
License
MIT — 见 LICENSE。收录 ≠ 背书;请只对你有权使用的图片运行检测。
© 2026 PetCT