资讯动态

Zerox 视觉模型 OCR 实战:从加拿大护照扫描页到结构化 Markdown 的完整转换

发布时间:2026/10/3 1:53:46 来源:尧图企业网站定制
OCRAI 应用【免费下载链接】zeroxOCR Document Extraction using vision models项目地址https://gitcode.com/GitHub_Trending/ze/zerox点击查看免费下载导读本文以仓库中的真实样本shared/outputs/0034.md一张加拿大护照页的 Zerox 视觉模型 OCR 输出为核心案例深入剖析 Zerox「图片 → 视觉模型 → Markdown」的完整转换链路。读完本文你将掌握 Zerox 处理复杂版式证件文档双语字段、签名区、机读区 MRZ、防伪底纹的原理、系统提示词对输出保真度的决定性影响以及如何通过 Python API 参数复现同类结果并评估其质量。案例背景一份典型的「复杂版式」文档护照页是 OCR 场景中最具挑战性的文档类型之一同一页面上同时存在双语标签英语/法语、密集的键值对字段、签名区、机读码MRZ以及水印与防伪底纹。传统基于字符识别的 OCR 引擎在这种版式下往往顾此失彼而 Zerox 的思路是直接让视觉模型「看图说话」——这正是它的核心设计理念Documents are meant to be a visual representation after all. With weird layouts, tables, charts, etc. The vision models just make sense!见 README.md。仓库shared/inputs/目录存放了一批待处理样本PDF 与 PNG 混合shared/outputs/目录存放对应输出。其中0034 号样本的输入是一张 1427×1902 的护照页扫描图shared/inputs/0034.png输出即本文的主角 shared/outputs/0034.md。上图即 0034 号样本的原始输入上方为签注页含持证人签名下方为加拿大护照个人信息页含照片、双语字段与两行 ICAO 标准机读区。原样继承0034 号输出的完整内容首先完整还原该样本的 Markdown 输出即 shared/outputs/0034.md 全文它是本文所有分析的事实基准**ENDORSEMENTS AND LIMITATIONS** This passport is valid for all countries unless otherwise specified. The bearer must comply with any visa or other entry regulations of the countries to be visited. SEE OBSERVATIONS BEGINNING ON PAGE 5 (IF APPLICABLE) **MENTIONS ET RESTRICTIONS** Ce passeport est valable pour tous les pays, sauf indication contraire. Le titulaire doit se conformer aux formalités relatives aux visas ou aux autres formalités dentrée des pays où il a lintention de se rendre. VOIR LES OBSERVATIONS DÉBUTANT À LA PAGE 5 (LE CAS ÉCHÉANT) [Signature] **Signature of bearer - Signature du titulaire** HK444152 --- **CANADA** **PASSPORT** **PASSEPORT** **Type/Type** P **Issuing Country/Pays émetteur** CAN **Passport No./N° de passeport** HK444152 **Surname/Nom** WITTMACK **Given names/Prénoms** BRIAN FREDRICK **Nationality/Nationalité** CANADIAN/CANADIENNE **Date of birth/Date de naissance** 01 NOV 47 **Sex/Sexe** M **Place of birth/Lieu de naissance** CONSORT CAN **Date of issue/Date de délivrance** 13 JUNE/JUIN 16 **Date of expiry/Date dexpiration** 13 JUNE/JUIN 26 **Issuing Authority/Autorité de délivrance** MISSISSAUGA PCANWITTMACKBRIANFREDRICK HK4441525CAN4711018M260613006 EGD69494可以看到这份输出几乎逐字段、逐符号地复刻了页面内容英文签注段、法语对应段、签名区、护照身份信息字段键值对、两行 MRZ 机读码、乃至页面边缘的防伪字符EGD69494都无一遗漏。接下来我们从源码角度解释它是如何做到的。Zerox 的核心工作流PDF/图片 → 视觉模型 → MarkdownZerox 的整体逻辑见 README.md 的 The general logic只有四步传入一个文件PDF、DOCX、图片等将文件转换成一系列图片把每张图片交给视觉模型请其输出 Markdown聚合各页响应返回完整 Markdown。在 Python 实现中这一流程由异步入口函数zerox()编排py_zerox/pyzerox/core/zerox.py关键调用链如下download_file(...)下载/定位本地输入文件支持本地路径与 URLconvert_pdf_to_images(...)调用pdf2image的convert_from_path把 PDF 按页渲染成 PNG 图片py_zerox/pyzerox/processor/pdf.pyprocess_pages_in_batches(...)用asyncio.Semaphore(concurrency)限制并发对每页图片调用process_page→ 模型completionpdf.pyformat_markdown(...)用正则剔除模型输出中可能包裹的 markdown/code 代码块标记py_zerox/pyzerox/processor/text.py若指定了output_dir将聚合结果写入{file_name}.md文件名由原始文件名清洗而来非字母数字字符替换为下划线、统一小写、截断到 255 字符见 zerox.py。对 0034 号这样的图片输入仓库的inputs/与outputs/对应关系0034.png → 0034.md0011.png → 0011.md 等以及 README 特性对照表中「Image Processing ✓」均表明Zerox 的 Node 与 Python 版本都直接支持图片输入同一套「图片 → 视觉模型 → Markdown」链路即可处理。提示词即规则系统提示词如何决定输出保真度护照输出的「逐符号复刻」并非偶然而是由系统提示词中的硬性规则驱动的。仓库中并存两份提示词一份是 Python 包的默认提示词py_zerox/pyzerox/constants/prompts.py一份是本次样本批处理实际使用的 shared/systemPrompt.txt。后者规定必须包含页面全部信息不得丢弃页眉、页脚或辅助文字——这正是HK444152、EGD69494等边角字符能保留下来的直接原因无文字的图片需替换为Description of image占位描述双表头表格优先新增列Logo 用方括号包裹如[Coca-Cola]复选框优先使用☐和☑。回看 0034 输出签名区被处理为[Signature]占位符正文段落完整保留键值对字段用 Markdown 加粗标签**Label** value呈现机读码按原文以纯文本逐行保留——全部符合提示词规则。默认提示词prompts.py还额外规定水印包裹为watermark.../watermark、页码包裹为page_number.../page_number、表格优先返回 HTML 格式这些规则保证了不同版式文档输出的结构化一致性。在请求组装层面py_zerox/pyzerox/models/modellitellm.py 的_prepare_messages将系统提示词置于system角色再把图片以data:image/png;base64,...的形式作为user消息内容发出。模型包装类还会在请求前做三道校验validate_environment检查 API Key 等环境变量、validate_model用litellm.supports_vision确认是视觉模型、validate_access校验密钥有效性任一不满足都会抛出对应异常。输出结构与质量评估ZeroxOutput 与 Page护照输出并不是一段裸文本而是被封装成结构化对象。Python 端由数据类定义py_zerox/pyzerox/core/types.py数据类字段说明ZeroxOutputcompletion_time总耗时毫秒floatfile_name清洗后的文件名如0034input_tokens全部页累计输入 token 数output_tokens全部页累计输出 token 数pagesList[Page]按页组织的 Markdown 内容Pagecontent该页的 Markdown 文本content_length该页 Markdown 的字符数page页码1 起始指定select_pages时按所选页映射见 zerox.pyREADME 中 Python 示例展示了同类结构ZeroxOutput(completion_time9432.975, file_namecs101, input_tokens36877, output_tokens515, pages[Page(...)])。评估一次护照 OCR 的质量可以从三方面入手字段完整性对照原图逐项核对键值对、双语保真法语标签是否与英语标签并列保留、专有格式MRZ 的行分隔符是否原样、签名/水印是否按规则标记。实战复现用 Python API 处理护照页样本要在本地复现 0034 号样本先安装依赖并按 README.md 的 Python 章节准备环境pip install py-zerox # 系统还需安装 popplerpdf2image 依赖PDF 场景必需注意Python 端通过 LiteLLM 统一对接各家视觉模型模型名采用provider/model格式如azure/gpt-4o-mini、gemini/gemini-1.5-flash-001并按 provider 配置对应环境变量OPENAI_API_KEY、AZURE_API_KEY/AZURE_API_BASE/AZURE_API_VERSION、GEMINI_API_KEY、ANTHROPIC_API_KEY等完整示例见 README.md 的 Python Zerox 一节。核心调用代码from pyzerox import zerox import asyncio async def main(): result await zerox( file_pathshared/inputs/0034.png, # 本地路径或 URL 均可 modelgpt-4o-mini, # 默认模型必须是视觉模型 output_dirmy_outputs, # 聚合结果将写入 my_outputs/0034.md select_pagesNone, # None 处理全部页也可传 int 或 list[int]1 起始 ) print(result) asyncio.run(main())关键参数速查签名定义见 zerox.py参数默认值作用cleanupTrue处理后是否删除临时目录concurrency10并发处理的页数上限file_path输入文件路径或 URL为空抛FileUnavailableimage_density300DPIPDF 转图片的分辨率image_height(None, 1056)图片高度上限PDFConversionDefaultOptions.SIZE见 conversion.pymaintain_formatFalse是否把上一页 Markdown 作为上下文传入以维持跨页格式一致串行、更慢modelgpt-4o-mini视觉模型名LiteLLM provider 格式output_dirNone聚合 Markdown 的保存目录temp_dirNone临时目录已存在会被清空重建custom_system_promptNone覆盖默认系统提示词覆盖时会给出友好警告select_pagesNone仅处理指定页int 或可迭代对象1 起始**kwargs—透传给litellm.acompletion的额外参数如 Vertex AI 的vertex_credentialsPDF 转图环节由 pdf.py 与 conversion.py 中的默认配置控制格式固定为png、线程数4、use_pdftocairoTrue。对于含大量表格、图表或跨页表格的文档建议开启maintain_formatTrue其机制是在请求中追加一条 system 消息Markdown must maintain consistent formatting with the following page: 上一页 Markdown见 modellitellm.py代价是请求退化为串行执行。从护照案例看 Zerox 的适用边界与选型建议通过 0034 号样本可以总结出 Zerox 在证件/票据类场景的几点实践结论字段化文档天生适合视觉模型键值对、双栏、双语标签这类「人类一眼看懂」的布局恰恰是传统 OCR 的痛点而视觉模型按提示词规则可稳定输出结构化 Markdown提示词是保真度的上限默认提示词「不得丢弃页眉、页脚、辅助文字」的硬约束决定了边角编号、防伪字符这类易被忽略内容的去留如需更强的抽取例如只输出关键字段应通过custom_system_prompt定制而非事后清洗成本与速度的权衡concurrency决定并行度select_pages可跳过无关页面以节省 token护照这类单页证件样本一次调用即可完成而百页文档则可借助maintain_format保证表格跨页格式一致README 中 Node 端还提供了maxRetries、errorMode等更多容错选项Python 端当前以concurrency/temp_dir/select_pages为主结果可审计ZeroxOutput中的input_tokens/output_tokens/completion_time与逐页Page.content为质量回溯提供了量化依据。Zerox 用「让视觉模型直接看文档」的方式把复杂的版式理解问题转化为提示词约束问题。0034 号护照样本的输出证明只要提示词规则与模型能力匹配即便是双语字段、机读区、签名区混杂的证件页也能在一条异步调用中得到可读、可检索、近乎无损的 Markdown 结果。赞分享OCRAI 应用【免费下载链接】zeroxOCR Document Extraction using vision models项目地址https://gitcode.com/GitHub_Trending/ze/zerox点击查看免费下载相关推荐Civitai Scanner Audit 待迁移清单ClickHouse 与 Postgres 双端去重重构实战指南Civitai Scanner Audit 待迁移清单ClickHouse 与 Postgres 双端去重重构实战指南 导读 本文是 Civitai 仓库中OCRAI 应用zerox 视觉模型 OCR 实战从加州驾照样张到结构化 Markdown 抽取zerox 视觉模型 OCR 实战从加州驾照样张到结构化 Markdown 抽取 导读 本文以 zerox 仓库内置的加州驾照样张 shared/inputOCRAI 应用Zerox 视觉模型 OCR 实战将美国护照页提取为结构化 Markdown 的全流程解析Zerox 视觉模型 OCR 实战将美国护照页提取为结构化 Markdown 的全流程解析 Zerox 是一款用视觉大模型Vision Model替代传统OCRAI 应用上一篇chrome-extensions-samples 实战用 chrome.scripting API 实现程序化注入与动态内容脚本声明下一篇NES.css终极指南打造8位像素风格的现代网站创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑