GitHub用户反馈
C2PA 检测脚本误报:无元数据的图片也被判定为带水印
用户在检查图片是否残留 C2PA 来源水印时发现,检测脚本 inspect_image.py 在 c2patool 安装后对任何文件都报告 C2PA: True。原因是对 c2patool 输出中的 'claim' 子串匹配与逻辑优先级错误,导致'无清单'结果被误判为有清单,检测结果不可信。
查看原始信号github:guillaumemeyer/watermarks-remover
目标用户
需要清理或核验 AI 生成内容来源标记的创作者、内容运营和开发者,他们要在发布前确认图片/文本不再携带 C2PA 等溯源信息。
潜在需求
需要一个对 C2PA/metadata 是否存在给出可靠真/假判断的检测逻辑,而不能因字符串包含 'claim' 或运算符优先级错误把'无清单'误报为'有清单',否则清理前后的核验都不可信。
发生场景
用户用 watermarks-remover 的 inspect_image.py 配合 c2patool 检查一张无任何元数据的 1x1 PNG,期望输出 C2PA: False,脚本却因把 'No claim found' 误判为存在 claim 而报 C2PA: True。
来源证据
用户报告 inspect_image.py 在安装 c2patool 后对任何文件都报告 C2PA: True,因为 c2patool 的 no-manifest 输出包含子串 'claim' 且逻辑优先级错误,导致无清单文件被误判为有清单。
inspect_image.py: has_manifest always true — 'No claim found' matches 'claim', and precedence makes the guards inert `inspect_image.py` reports `C2PA: True` for every file once `c2patool` is installed. `c2patool`'s "no manifest" output is `Error: No claim found`, which contains the substring `claim` — and operator precedence makes the `no claim` / `no jumbf` guards inert. ## Repro Freshly generated 1×1 PNG with no metadata whatsoever: ```python import zlib, struct def chunk(t, d): returnhttps://github.com/guillaumemeyer/watermarks-remover/issues/1
为什么值得留意
这是用户报告的真实工具缺陷,暴露了清理 AI 溯源标记流程中最关键的一环——事后核验——可能给出完全错误的结论;检测误报会让'已清理'的承诺失去意义,也让自动化清理工具难以被信任。
已有方案
- c2patool(外部 C2PA 清单检查工具,存在误判触发的输出文本)
未满足部分
- 检测脚本对 c2patool 输出的解析存在字符串误匹配,无法正确识别'无清单'状态
- 同仓库 README 承认无法证明水印清除通过官方检测,核验仍是开放问题
可能延伸 · 模型推测
- 按退出码或结构化输出解析 c2patool,而不是匹配文本子串(模型推测)
- 为检测结果附加置信度或'仅能证明元数据已剥离'的说明(模型推测)
- 类似解析逻辑可复用于其他依赖外部 CLI 的格式检测流程(模型推测)
目前未知
- issue 报告时间与版本未知,问题是否已修复未知
- 用户提到的 c2patool 新旧仓库链接均指向同一工具
- 误报之外的实际清理效果(元数据是否真被剥离)未经该 issue 验证
继续核实
- 除了该 issue 报告者,还有多少用户依赖这类 C2PA 检测输出做发布前核验?
- 其他 C2PA/溯源清理工具是否也存在类似的外部命令输出解析误判?
- 创作者在实际发布流程中如何验证'溯源信息已清除',是否有可靠标准做法?
主题词
ai provenance removalc2pa metadata strippingcontent authenticitymetadata inspectiontext watermark removal