做了一个给 Claude Code 和 Codex 用的技能,能把扫描件或手机斜拍的文档重新做成干净的 PDF:文字可以搜索、复制,图表和流程图是矢量图,放大不会糊,版式贴近原稿。它不是在图片上加一层 OCR 文字。
我还做了对照实验。测试页由程序生成,每页都有标准答案,类型有练习册、表格、图表、流程图、表单和双栏文章,其中一半是斜着拍、带阴影的手机照片。每页按标准答案给文字、版式、图形和矢量比例打分,1.0 为满分。同一个需求,每个模型做两次,一次不用技能,一次用。下面是两份 9 页文档上的结果,技能从没在这些页面上调过参:
| 模型 | 不用 | 用 |
|---|---|---|
| Haiku 5.5 | 0.841 | 0.997 |
| Fable 5.1 | 0.837 | 0.997 |
| Sonnet 5.5 | 0.994 | 0.998 |
| Opus 5.5 | 0.993 | 0.998 |
耗时:Sonnet 做 9 页从 25.7 分钟降到 16.2 分钟(快 37%),Haiku 基本持平( 9.4 → 9.0 ),Opus 和 Fable 变慢( 13.3 → 14.7 、10.0 → 14.7 )。每个模型只有两份文档,耗时仅供参考。
最早的版本只是一份详细的说明,效果不明显。起作用的是把 agent 容易出错的步骤交给脚本:
- 模型看到的是缩小后的图,位置和小数字只能估。现在由脚本按像素测量,没把握的词裁出来放大,每页汇总成一张校对图。
- 模型发现不了自己漏了什么。现在每次重建都会和原稿叠在一起比对,逐页报告还缺什么。
- 模型倾向于少做步骤。现在起草所有页只要一条命令,改一个错字只要在 JSON 里写一行。
失败的版本也写在 README 里了,比如有一版让 Sonnet 退步,原因是照片比例算错了。评测代码也开源了,欢迎用别的模型试试。
安装:在 Claude Code 里依次执行 /plugin marketplace add 3351666087/scan-to-vector-skill 和 /plugin install scan-to-vector@scan-to-vector-skill,也可以用 README 里的一行命令安装(支持 Claude Code 和 Codex )。脚本需要 Python 3.10+ 和 tesseract 命令,依赖见 README 。MIT 协议。
GitHub: https://github.com/3351666087/scan-to-vector-skill
局限:测试集是合成的英文印刷页,手写和中文都没有测过。起草脚本调用 Tesseract 时不指定语言,只用英文模型,内置字体也只有西文,所以起草脚本目前处理不了中文页面,只装中文语言包不够。它按页消耗 agent 的时间,如果只需要能搜索的文字,直接用 OCRmyPDF 更省事。