
在《光学字符识别?也学点新的》一文中,我提到了使用 Gemini CLI 自动化处理 OCR 任务的方法。那时候还有 Gemini CLI(现在我用 Antigravity),那时候还没有 Skill(我把工作流写在系统提示词里)。虽然处理结果不尽如人意,但也是一番心意。
之后,我在小红书评论区的指引下走了 PaddleOCR 之类专业的弯路。效果令人满意,但跨页衔接是个问题,校对起来还是很繁琐,而这些事情理应全自动执行。
最近 Gemini 接连推出了好几个 Flash 模型,可以重启这个全自动 OCR 项目了,直接写成一个 Skill:pdf-book-ocr。
文中使用模型均为 Gemini 3.8 Flash,使用 Agent 均为 Antigravity。
PDF -> EPUB

输入是原始 PDF,输出是规范排版的 EPUB。
和之前的翻译器 TransLit 一样,我需要一个好的成品,但完全不需要保持最初的排版。
工作流很自然,重要的几步大致是这样:
- 切分 PDF;
- 子 Agent 分批并行 OCR;
- 合并内容;
- Markdown 转 EPUB。
还有一些处理细节,可能不太值得详细写,比如:
- 数字版 PDF 不同于扫描版 PDF 的处理流程;
- 处理电子书标题层级——在分派子 Agent 前限定大标题,在转 EPUB 之前检查全部标题层级;
- 删除版权信息等页面——反正 PDF 主要是盗版。
附上 Agent 绘制的流程图,以供参考:
1 | [原始 PDF 图书] |
插图的处理方式

之前在 Google AI Studio 窗口做 OCR,自是只能处理小说之类的“字书”。Paddle OCR 等工具倒是可以理解排版,保存截图到合适的位置。
用上 Agent 之后,就有了更好的处理思路。
在子 Agent 做 OCR 的同时,遇到插图就会记录类似于这样的标记:
1 | <!-- FIGURE: page=3 bbox=[150, 80, 520, 920] --> |
其中包括插图的页码、位置(上下左右坐标)、图题以及占位用的文件名。
当全部子 Agent 转写完毕之后,调用脚本在 PDF 中相应位置截图并保存。
这个脚本还有一点数字图像处理的思路,AI 说这叫 投影轮廓吸附(Projection Profile Snapping)——先在大模型给出的坐标基础上外扩一圈,防止图像不全;之后做边缘检测(为了不把图题截下来,还会检测图题和图像中的空白缝隙),删去白边。
结语
如果效果不满意,可以在任务完成之后和 Agent 交流改进。
有快要过期的余量的话,这个 Skill 值得一试。
