news 2026/9/14 3:16:51

Zerox OCR:3步把PDF和扫描件转成Markdown,让AI直接读懂文档

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zerox OCR:3步把PDF和扫描件转成Markdown,让AI直接读懂文档

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/inputsshared/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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 3:15:59

OpenClaude 如何在终端快速接上 200+ 模型?完整上手指南

OpenClaude 如何在终端快速接上 200 模型?完整上手指南 【免费下载链接】openclaude runs anywhere. uses anything 项目地址: https://gitcode.com/GitHub_Trending/op/openclaude OpenClaude 是一款开源的多模型 AI 编程 CLI:写代码、调试、跑代…

作者头像 李华
网站建设 2026/9/14 3:14:27

夜间行人安全防护与应急反应指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 3:12:39

STM32C562 DAC固定电压输出全链路工程实践

1. 项目概述:为什么在STM32C562上做DAC固定电压输出这件事值得深挖我第一次接到这个需求时,客户只说了一句:“要从MCU直接输出一个稳定、可调、不抖动的2.5V直流电压,驱动后级运放,不能用外部DAC芯片。”——当时手头只…

作者头像 李华
网站建设 2026/9/14 3:12:10

嵌入式软件架构设计:让变化成本可控的三层实践

1. 为什么“堆代码”是嵌入式开发最隐蔽的慢性毒药我带过三支嵌入式团队,从工业PLC控制器到车载ADAS域控制器,见过太多人把“功能跑通”当成交付终点——UART能发数据、ADC采样值能打印、LED能按按键闪烁,就认为“开发完成了”。结果呢&#…

作者头像 李华
网站建设 2026/9/14 3:10:53

电气工程师能力标尺:四维长度描述法

1. 这不是简历模板,而是电气人真实能力的“刻度尺”“电气职业及技能长度描述”——这八个字乍看像HR系统里的字段名,但在我跑过37个变电站、带过12届技校实习生、亲手拆装过400多台PLC柜子之后,才真正明白:它根本不是填表时应付的…

作者头像 李华
网站建设 2026/9/14 3:07:50

Superpowers不是开关:AI编程工具链的权限中枢解析

1. “Superpowers”不是功能开关,而是AI编程工具链的权限中枢最近在多个开发者社区和内部技术分享会上,总有人一上来就问:“Superpowers怎么打开?”“点哪里能激活Superpowers?”——这问题本身已经暴露了对当前AI编程…

作者头像 李华