Scanbook To Digital(扫描书 → 数字书)
Overview
把一摞书籍扫描照片(通常是左右双页展开)变成按页码顺序、可检索、可点击跳转的
Word / 网页 / PDF。核心难点不在 OCR,而在:① 用多模态视觉逐页「精读」繁体/竖排原文
(比普通 OCR 准,但需并行派发子 Agent);② 视觉模型常把 3 位数页码的百位读丢
(322→122),必须重建真实页码;③ 页眉页码被误读进正文,需清洗。
When To Use
- 用户有一目录书籍扫描图/拍照图,要求转成 Word、网页或可检索电子书。
- 用户要求「按图片内页码顺序整合」「做成可点击目录」「加全文搜索」「导出 PDF」。
- 关键词触发:扫描书转档、图片转 Word、照片做成电子书、按页码排序、OCR 书籍。
不适用:单张图片提取文字(用普通 OCR/视觉即可,不必走此流水线);
PDF 转 Word(那是 docx/ocr 技能的范畴)。
Prerequisites
建立隔离 Python venv 并安装依赖(WorkBuddy 管理的 python 优先):
pip install opencc-python-reimplemented python-docx reportlab
Workflow
完整编排见 references/workflow.md。五步法:
Step 1 · 拆批
运行 scripts/01_manifest.py --src (图片目录) --batch 10,生成 manifest.json
(文件字典序即假设阅读顺序,每张图 = 2 物理页)。
Step 2 · 视觉精读(多模态,并行派发子 Agent)
读取 references/vision_prompt.md,按批次 key 并行派发子 Agent:
- 每张图读左、右两页,逐字转录(保留繁体、不润色),写 vision_batches/batch_NNN.jsonl。
- 全部完成后,用脚本按 JSON 对象计数校验每批记录数 == 2×图片数;缺失/空回包则重跑。
- 实战规模参考:287 张图 → 29 批、574 物理页。
Step 3 · 合并 + 页码重建
运行 scripts/02_merge.py --work vision_batches --out merged_ordered.jsonl。
按批顺序拼接,用「已知页码 (pn−index) 的中位数」求 offset,得
true_page = index + offset(对百位误读鲁棒),输出 merged_ordered.jsonl
(核心数据源,务必留存)。
Step 4 · 清洗 + 转简体 + 生成 docx / 网页
运行 scripts/03_build_docx_html.py --src merged_ordered.jsonl --title 《书名》。
自动剥掉页眉冗余页码、繁→简转换,产出:
- 《书名》_按页码整合版.docx(繁体)
- 《书名》_简体版.docx
- 《书名》_网页版.html(左侧固定目录可点击跳转 + 全文搜索框,手机端自适应)
Step 5 · 生成 PDF
运行 scripts/04_build_pdf.py --src merged_ordered.jsonl --title 《书名》。
产出 《书名》_简体版.pdf,目录页可点击跳转,阅读器侧边栏有章节大纲(书签)。
Key Pitfalls(详见 references/workflow.md)
- 百位页码误读:绝不要用模型返回的
page_number直接排序,必须用 Step 3 中位数偏移重建。 - 页眉冗余页码:Step 4 清洗只剥开头 1~2 行末尾等于本页页码的数字,正文句末不会误伤。
- 顺序假设:默认文件字典序=阅读顺序;扫描乱序需人工校正。
- 双页 vs 单页:本流水线按双页设计(每图 2 条);单页扫描要改 Step 2 提示词与 Step 3 的 2× 阈值。
- 子 Agent 空回包:以「文件落盘 + 记录数自查」为完成证据。
Resources
scripts/01_manifest.py— 图片拆批scripts/02_merge.py— 合并 + 真实页码重建scripts/03_build_docx_html.py— 清洗 + 简繁转换 + docx/网页scripts/04_build_pdf.py— 生成可点击目录 PDFreferences/vision_prompt.md— 视觉转录子 Agent 派发提示词模板references/workflow.md— 完整工作流、坑点与输出清单