Zerox OCR:三步把破损古籍扫描件变成可检索文本
【免费下载链接】zeroxOCR & Document Extraction using vision models项目地址: https://gitcode.com/GitHub_Trending/ze/zerox
档案室里有一叠扫描件,纸面泛黄、墨迹发灰,传统识别方式一碰到斑驳底纹就抓瞎。Zerox OCR 换了个思路:不先做复杂的图像修复,而是让视觉大模型直接"读懂"每一页,输出结构化 Markdown 文本。
先看效果
左边是带表格和代码块的原始页面,右边是 OCR 识别后的 Markdown 结果——表头、行序、缩进都保留了。仓库里还有一张 1986 年的旧证件扫描件,边角磨损、表面有划痕:
对应的提取结果在shared/outputs/0024.md,模糊的表格被还原成了 Markdown 表格,字段名变成了加粗标题,直接可检索。
快速上手
🚀 装完调一次就通。
第一步,安装:
pip install py-zerox装依赖这一步同时确认系统里有 poppler(PDF 渲染引擎,负责把 PDF 逐页转成图片)。
第二步,一次调用:
import os, asyncio from pyzerox import zerox os.environ["OPENAI_API_KEY"] = "your-api-key" result = asyncio.run(zerox( file_path="shared/inputs/0002.pdf", model="gpt-4o-mini", output_dir="./output", concurrency=10, )) print(result.pages[0].content)这一步把扫描件路径和模型名交给 Zerox,剩下的它自己处理。
第三步,拿结果。Markdown 已写入output_dir,每页内容也在返回对象里。Node 环境则用npm install zerox,API 基本一致,入口在 py_zerox/pyzerox/core/zerox.py,图片编码在 py_zerox/pyzerox/processor/image.py,PDF 转页在 py_zerox/pyzerox/processor/pdf.py。
它内部在做什么
整条数据流很短。先把文件下载到临时目录,支持本地路径和 URL;再用 poppler 按 300 DPI 把 PDF 逐页渲染成高分辨率图片,这一步决定了后续识别的清晰度上限。接着每页图片被编码成 base64,连同系统提示词发给视觉模型(GPT-4o、Claude、Gemini 等,由 py_zerox/pyzerox/models/base.py 定义统一接口),要求它直接输出 Markdown。最后按页序把各页结果拼接成一份文件写入磁盘。
有两个容易忽略的环节。Node 版会用 Tesseract(老牌 OCR 引擎)跑 OSD(自动版面方向检测),扫描歪了的页面会被自动转正,见 node-zerox/src/utils/tesseract.ts;打开maintain_format后,每一页请求会带上前一页已生成的 Markdown 作为上下文,跨页表格和编号能接得上,相当于用上下文语义做了一轮校正。
几个容易被忽略的细节
古籍文字提取支持批量并发
concurrency参数配合信号量控制并行度,默认同时跑 10 页。一批 100 页的破损文档做 OCR 批量处理,不用串行排队,单页失败也不会拖垮整批。
指定页码做文档增强
破损往往只集中在几页。select_pages可以只处理第 3、7、42 页,先在临时目录切出一个子集 PDF 再走渲染流程,省 token 也省时间。
自定义提示词干预排版
Python 版支持custom_system_prompt覆盖默认提示词,比如"表格保留原始列序"这类要求,文本处理工具 还会清理模型输出里多余的外层代码块标记,保证导出的 Markdown 干净。
适合谁用 / 什么时候别用
适合:图书馆和档案馆的批量数字化、个人收藏的旧报刊家书、需要把扫描件变成可搜索文本库的文档工作者。
边界也要说清楚:手写信、草书签名类内容它只是尽量转写,准确率有限;重度污渍、大面积缺失(比如页面损失过半)时视觉模型也会猜错;中英日韩混排效果取决于所选视觉模型本身的多语言能力。
完整参数与多厂商模型配置见 README,也可以 git clone https://gitcode.com/GitHub_Trending/ze/zerox 拿自己的破损扫描件跑一遍。
【免费下载链接】zeroxOCR & Document Extraction using vision models项目地址: https://gitcode.com/GitHub_Trending/ze/zerox
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考