Zerox OCR:3步把PDF和扫描件转成Markdown,让AI直接读懂文档
【免费下载链接】zeroxOCR & Document Extraction using vision models项目地址: https://gitcode.com/GitHub_Trending/ze/zerox
如果你手里有一堆扫描版 PDF、发票图片或 Word 文档,想让 AI 读取里面的内容,第一步往往就卡住了:文字提取。传统 OCR(光学字符识别,即从图片里"读出"文字的技术)遇到复杂排版、跨页表格、图表,经常拆得七零八落,你得手工整理半天。Zerox 换了一个思路——不逐字识别,而是把整页文档交给视觉大模型,直接产出一份结构完整的 Markdown。读完这篇,你可以用 3 步跑通它:一个文件进,一份 AI 能直接消费的 Markdown 出。
什么是 Zerox:用视觉模型做文档 OCR
一句话定位:Zerox 是一个用视觉模型做文档 OCR 的开源项目,核心是把 PDF、Word、扫描件等各种文档转成 Markdown,方便喂给大模型。
它没有自研识别引擎,流程朴素到有点"暴力":把文件逐页转成图片 → 把每页图片发给视觉模型,请它"转成 Markdown" → 把每页结果拼接成一份完整文档。听起来简单,但对表格、图表、复选框这类传统 OCR 的"老大难",视觉模型的理解能力反而更好使。
30 秒跑通:一行代码把 PDF 转 Markdown
Python 版安装后(系统需先装好 poppler,这是 PDF 转图片的依赖库):
import asyncio, os from pyzerox import zerox os.environ["OPENAI_API_KEY"] = "your-key" result = asyncio.run(zerox(file_path="assets/cs101.pdf", model="gpt-4o-mini")) print(result.pages[0].content)无需额外配置:不需要选引擎、调参数、装识别包。只要一个模型服务的 API Key,输出就是逐页的 Markdown 内容。仓库自带示例文件assets/cs101.pdf,拿来就能试。
能力拆解:三个模块撑起整条流水线
模块一:文档转图像,先让模型"看清楚"
- 它是什么:一条文件预处理管线,把 PDF、DOCX、PPT 等 20 多种格式统一转成 300 DPI 的页面图片。
- 为什么重要:视觉模型只认图片,格式统一了,后面所有文档才走同一条路,你不用为每种格式单独写逻辑。
- 具体怎么体现:核心实现在 py_zerox/pyzerox/processor/pdf.py,通过 pdf2image 按页切图;Node 版还支持方向矫正(correctOrientation)和边缘裁剪(trimEdges),扫描件歪斜、留白多也能先"摆正"再识别。
模块二:多供应商视觉模型,不绑定一家大模型
- 它是什么:统一的模型接入层,Python 版通过 LiteLLM(一个"统一调用各家大模型"的中间库)接入 OpenAI、Azure、AWS Bedrock、Google Gemini、Vertex AI 等。
- 为什么重要:识别质量跟模型强相关,你能按预算和效果在 gpt-4o、Claude、Gemini 之间随时切换,不会被单一厂商锁死。
- 具体怎么体现:模型定义集中在 py_zerox/pyzerox/models/,Node 版对应 node-zerox/src/models/,换模型只需改一个参数。各家调用方式可参考 examples/node/ 下的 azure.ts、bedrock.ts、google.ts 等示例。
模块三:跨页格式保持,表格不会被拦腰截断
- 它是什么:结果聚合层。每页的 Markdown 按页码拼接成一份完整文档;开启
maintainFormat后,还会把上一页的输出作为上下文传给下一页。 - 为什么重要:跨页表格是文档转 Markdown 最容易坏的地方,上下文传递让模型"记得"上一页的表头长什么样。
- 具体怎么体现:转换规则写死在 shared/systemPrompt.txt 里——图表优先转表格、无文字图片替换为
描述、复选框用 ☐/☑ 表示。你可以直观看到"每页图片 → 一份 Markdown"的完整约定。
真实演示:一张物流发票的前后对比
仓库里放了 40 组"输入文档 → 输出 Markdown"的样本(shared/inputs与shared/outputs一一对应),这是其中一组:
输入是一张双栏排版、含两个运单块的物流发票扫描件(上图)。Zerox 输出的 shared/outputs/0020.md 片段:
# ZESTADO EXPRESS **Bill To:** Custom Board Makers ... **SHIPPING INVOICE 10112** Issue Date: 8th December 2021 ## Waybill No: 012345A ### Main Shipping Information **Customer Reference:** GC12345 ...一句话结果:原来散落在双栏排版里的字段,变成了带标题层级、加粗标签的结构化 Markdown,两个 Waybill 区块各自独立成节,AI 直接引用即可。仓库还配了自动校验脚本:把输出与 shared/test.json 里的期望关键词逐页比对,跑一遍npm run test就知道关键内容有没有丢,见 node-zerox/tests/README.md。
适合谁:适用场景与边界
适合你,如果:
- 你需要把 PDF、发票、合同、手册批量转成 Markdown 给 RAG / AI 问答系统做语料;
- 文档排版复杂(表格、图表混排),传统 OCR 输出需要大量手工修补;
- 你已有任一主流视觉模型的 API Key,不想自建识别流水线。
这些情况要诚实面对:
- 它不是独立 OCR 引擎,识别质量和成本都取决于你选的模型——换个更弱的模型,效果就跟着变弱;
- 有系统依赖:Node 处理 PDF 需要 graphicsmagick,Python 版需要 poppler;
- 两端功能不完全对齐:结构化数据抽取(按 schema 抽字段)、错误处理模式只在 Node 版提供;自定义系统提示词只在 Python 版提供;
- 它面向的是现代文档(发票、报告、教材、手册)。对严重破损、手写的古籍扫描件,它没有专门的修复或增强能力,效果取决于模型本身的容错。
资源入口与下一步
- 完整文档与参数表:README.md
- 输入/输出对照样本:shared/inputs/ 与 shared/outputs/
- Node 版调用示例:examples/node/openai.ts
- 想本地跑起来的话,clone 仓库地址:https://gitcode.com/GitHub_Trending/ze/zerox
建议的路径:先用仓库自带的assets/cs101.pdf跑通第一遍,再把自己的一个真实文档丢进shared/inputs看看输出质量——3 步之内,你就能判断它能不能接进你现在的文档流程里。
【免费下载链接】zeroxOCR & Document Extraction using vision models项目地址: https://gitcode.com/GitHub_Trending/ze/zerox
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考