资讯动态

Zerox 视觉模型 OCR 实战:将提单(Bill of Lading)物流单据无损转换为 Markdown

发布时间:2026/10/3 1:59:09 来源:尧图企业网站定制
OCRAI 应用【免费下载链接】zeroxOCR Document Extraction using vision models项目地址https://gitcode.com/GitHub_Trending/ze/zerox点击查看免费下载本文以 Zerox 仓库中一份真实的 OCR 输出 shared/outputs/0011.md 为切入点完整拆解一份北美公路货运提单Bill of Lading如何被视觉模型逐字段还原为 Markdown从单据头部、地址区块、复选框、货物表格到法律条款与签章栏。文章同时结合 systemPrompt.txt 与 py_zerox/pyzerox 源码讲清页面图片 → 视觉模型 → 结构化 Markdown的完整管线并给出 Python / Node SDK 的可运行参数配置读者可据此在自己的单据提取场景中直接复用。为什么用视觉模型做单据 OCR单据提单、发票、报税表、化验单本质上是一种视觉呈现版式不固定、含有嵌套表格、复选框、印章、页眉页脚小字等传统 OCR 难以稳定处理的信息。Zerox 的思路非常直白见 README.md传入一个文件PDF、DOCX、图片等把文件转换为一系列页面图片将每张图片交给视觉模型要求其输出 Markdown聚合各页结果返回完整 Markdown。它把版面理解交给视觉模型而不是传统字符识别引擎因此在处理复杂表格、勾选项与多语种混排时表现稳定。当前仓库同时提供 Node 与 Python 两个 SDKNode 版node-zerox/src与 Python 版py_zerox/pyzerox二者能力对照表见 README.md。一份真实输出0011.md 全貌解读shared/outputs/0011.md 是仓库中 40 份转换样例之一对应输入图像 shared/inputs/0011.png。它是一份北美 LTL零担运输提单模型把它还原成了层次分明的 Markdown。逐区块看1. 单据头与编号# Bill of Lading **Ship Date** September 13, 2021 **Bill of Lading Number:** 21099992723文档标题映射为一级标题#关键业务字段发货日期、提单号以加粗标签 值的形式保留便于后续程序化解析。2. 地址区块发货方 / 收货方 / 第三方计费## Ship From **Example Pick Up Company** 123 Pick Up Street Vancouver, BCV5K 0A4, Canada **Location Type:** Business without Dock or Forklift (123) 456-7890 (Example Pick Up Contact) **Pickup Hours:** 9:00AM to 5:00PM **SID#:** N/A **Special Handling:** Protect From FreezeShip From、Ship To、Third Party Freight Charges Bill To三个区块分别映射为二级标题##公司名、街道、城市邮编、联系电话、营业时间、特殊处理要求等全部原样保留包括SID#: N/A这类值为空的字段——这正是提示词规则必须包含页面所有信息的直接体现。3. 复选框Freight Charges Term**Freight Charges Term** (prepaid unless otherwise marked) - [ ] Prepaid - [ ] Collect - [x] 3rd Party运费的付款方式预付 / 到付 / 第三方是一组勾选选项模型选择了 GitHub 任务列表语法- [ ] / - [x]来表达勾选状态。有趣的是在另一份样例 shared/outputs/0001.md美国 1040 报税表中同样的提示词下模型则使用了☑/□符号。这说明视觉模型会根据单据类型自适应选择最贴切的复选框表达方式提示词只做偏好引导而非硬性约束。4. 货物表格Handling Unit## Handling Unit | Qty | Type | Wt | Hzmt | Non-Stackable? | Description | NMFC | Class | |-----|-------|-----|------|----------------|-----------------|------|-------| | 1 | Pallet| 300 lb | No | No (48x40x48 in) | Example Goods | | | **TOTAL WEIGHT 300 Lbs**托盘数量、类型、重量、危化品标记列Hzmt、是否可堆叠、体积尺寸、货物描述均落入标准 Markdown 表格表头缩写如 Hzmt被原样保留空列NMFC、Class也被如实呈现。紧随其后的TOTAL WEIGHT 300 Lbs以加粗文本单独成行。5. 法律条款与签章区**Note:** Liability Limitation for loss or damage in this shipment may be applicable. See 49 U.S.C. -14706(c)(1)(A) and (B). | Freight Loaded | Freight Counted | |----------------|-----------------| | By Shipper | By Shipper | | By Driver | By Driver/pallets said to contain | | | By Driver Pieces| **Shipper Signature** ______________________ **Date** ___________ **Carrier Signature** ______________________ **Pickup Date** ___________页脚的 DOT 法规声明、责任限制条款引用、货运装载确认表、以及托运人/承运人签名与日期留白全部被完整保留。对于需要存档审计的物流单据这种不丢小字的能力至关重要。字段级还原对照表原单据要素0011.md 中的表示转换策略文档标题 Bill of Lading# Bill of Lading一级标题Ship Date / 提单号**Ship Date** .../**Bill of Lading Number:** 21099992723加粗标签 值Ship From / Ship To / 第三方付款## Ship From/## Ship To/## Third Party Freight Charges Bill To区块二级标题地址、电话、营业时间、SID/CID普通段落 加粗标签空值写N/A原样保留付款方式勾选- [ ]/- [x]任务列表复选框语法Handling Unit 货物明细标准 Markdown 表格 **TOTAL WEIGHT**表格化法规条款 / 装载确认表正文段落 双列表格原样保留签名与日期留白______________________下划线保留留白语义让模型按规则办事的系统提示词生成 0011.md 这类输出所依赖的提示词就保存在 shared/systemPrompt.txt全文仅十余行规则如下Convert the following document to markdown. Return only the markdown with no explanation text. Do not include delimiters like markdown or . RULES: - You must include all information on the page. Do not exclude headers, footers, or subtext. - Charts infographics must be interpreted to a markdown format. Prefer table format when applicable. - Images without text must be replaced with Description of image - For tables with double headers, prefer adding a new column. - Logos should be wrapped in square brackets. Ex: [Coca-Cola] - Prefer using ☐ and ☑ for check boxes.规则含义在 0011.md 中的体现必须包含页面所有信息不得省略页眉、页脚、小字页脚 DOT 声明、签名栏均被保留图表/信息图转为 Markdown优先表格结构化呈现Handling Unit、Freight Loaded/Counted 均成表格无文字图片替换为Description of image图片占位符本单据无此类图片双表头表格优先新增一列避免歧义0001.md 的 Dependents 表将重复表头拆为 (1)(2)(3)(4) 多列Logo 用方括号包裹品牌元素占位本单据无 Logo复选框偏好 ☐/☑勾选状态表达本例模型选择了- [ ] / - [x]语法注意Python 包内置的默认提示词见 py_zerox/pyzerox/constants/prompts.py其中表格规则为Return tables in an HTML format并额外定义了水印、页码的占位写法如watermarkOFFICIAL COPYwatermark、page_number14page_number。两份提示词略有差异实际使用时以对应 SDK 版本为准。源码级流程拆解从页面图片到 Markdown0011.md 的生成过程可以在 Python 源码中完整追踪。入口是 py_zerox/pyzerox/core/zerox.py 中的异步函数zerox()整体分四步1. PDF 转图片zerox()首先通过download_file把本地路径或 URL 指向的文件拉取到临时目录然后调用 convert_pdf_to_images底层基于pdf2image的convert_from_path。默认参数定义在 py_zerox/pyzerox/constants/conversion.py默认值含义DPI 300渲染分辨率保证小字可读FORMAT png图片格式SIZE (None, 1056)图片最大高度 1056px宽度自适应THREAD_COUNT 4转换线程数USE_PDFTOCAIRO True优先使用 pdftocairo 渲染如需只处理部分页面可传select_pages源码会先通过create_selected_pages_pdf生成只含所选页的子 PDF 再转图zerox.py。2. 构造多模态消息页面图片通过 encode_image_to_base64 异步读取并编码为 base64然后在 modellitellm.py 的 _prepare_messages 中组装请求首条消息固定为system角色内容是系统提示词若开启maintain_format会追加一条包含前一页 Markdown 的 system 消息Markdown must maintain consistent formatting with the following page...用户消息的content是data:image/png;base64,...格式的图片 URL。随后调用litellm.acompletionmodellitellm.py完成推理并回传input_tokens/output_tokens。模型实例化时还会做三重校验modellitellm.py环境变量是否齐全、模型是否为视觉模型litellm.supports_vision、API Key 是否有效任一不满足都会抛出对应异常。3. 并发处理与格式保持默认maintain_formatFalse走 process_pages_in_batches用asyncio.Semaphore(concurrency)限流各页并行交给视觉模型默认并发 10。开启maintain_formatTrue后则改为逐页串行——把前一页输出作为上下文带入下一页zerox.py以换取跨页表格格式的一致性代价是速度明显下降。README 中给出了这一串行链路Request #1 page_1_imageRequest #2 page_1_markdown page_2_imageREADME.md。4. 输出聚合与清洗每页结果经 format_markdown 清洗通过正则剔除模型偶尔输出的markdown /code 围栏只保留纯 Markdown 正文。最后所有页面以空行拼接若指定output_dir则写入{file_name}.mdzerox.py并返回ZeroxOutput含completion_time、file_name、input_tokens、output_tokens、pages列表。参数与运行方式Python SDK 用法from pyzerox import zerox import os import asyncio os.environ[OPENAI_API_KEY] your-api-key # 以 OpenAI 为例 async def main(): result await zerox( file_pathpath/to/bill_of_lading.pdf, # 本地路径或 URL 均可 modelgpt-4o-mini, # 必须是视觉模型 output_dir./output, # 保存合并后的 .md select_pagesNone, # None 表示全部页可为 int 或 list1 起始 ) return result result asyncio.run(main()) print(result)zerox()的完整签名与默认值见 py_zerox/pyzerox/core/zerox.py参数类型 / 默认值说明cleanupbool True处理完成后清理临时文件concurrencyint 10并发处理的页数上限file_pathstr 本地路径或文件 URL为空则抛FileUnavailableimage_densityint 300PDF 转图片的 DPIimage_heighttuple (None, 1056)转换后的图片最大高度maintain_formatbool False用前一页输出保持跨页格式串行、较慢modelstr gpt-4o-mini模型名需按 LiteLLM 的provider/model格式如azure/gpt-4o-mini、gemini/gemini-1.5-flashoutput_dirstr None指定后把聚合 Markdown 写入该目录temp_dirstr None临时目录若已存在内容会被清空custom_system_promptstr None覆盖默认系统提示词select_pagesint / Iterable None只处理指定页1 起始**kwargsdict透传给litellm.completion如vertex_credentials除 OpenAI 外Python 版还通过 LiteLLM 支持 Azure OpenAIazure/deployment、Geminigemini/model、Anthropicclaude-3-*与 Vertex AIvertex_ai/model完整示例见 README.md。Node 版node-zerox则额外提供结构化数据提取schema、extractOnly、extractPerPage、错误处理模式errorMode、方向校正correctOrientation、边缘裁剪trimEdges等能力并支持 OpenAI / Azure / Bedrock / Google 四类 provider参数对照见 README.md。质量保障关键字校验测试仓库用 shared/test.json 对每份样例做了预期关键字校验。以0011.png为例其预期关键字test.json包含 Bill of Lading、21099992723、123 Pick Up Street、800-866-4870、Pallet、48x40x48 in、300 Lbs、TOTAL WEIGHT、14706(c)(1)(A)、Shipper Signature、Freight Loaded、3rd Party 等逐条对照 shared/outputs/0011.md 均可定位到对应内容。这说明提单号、地址、联系方式、货物明细、法律条款引用等关键业务字段在视觉模型转换后都能被稳定检索到可作为下游自动化处理如账单核对、仓单录入的可靠数据源。小结一份看似普通的提单在 Zerox 的视觉模型管线下被完整还原为层次分明的 Markdown标题层级、加粗键值、任务列表复选框、标准表格与保留留白的签章区一应俱全页脚法律声明也未丢失。这套流程同样适用于发票、报税表、化验单等版式复杂的单据核心能力来自三点明确的系统提示词规则、PDF→图片→base64 的多模态请求管线以及支持并发与跨页格式保持的 SDK 参数设计。需要复现时直接参考 shared/systemPrompt.txt、py_zerox/pyzerox/core/zerox.py 与仓库 shared/outputs 下的 40 份输出样例即可。赞分享OCRAI 应用【免费下载链接】zeroxOCR Document Extraction using vision models项目地址https://gitcode.com/GitHub_Trending/ze/zerox点击查看免费下载相关推荐Jupytext 处理无效单元格键将 IRKernel 0.8.12 的 R 笔记本转换为 MyST Markdown 实战Jupytext 处理无效单元格键将 IRKernel 0.8.12 的 R 笔记本转换为 MyST Markdown 实战 导读 本文以 Jupytext开发工具如何利用Zerox OCR实现物流单据自动跟踪与信息提取完整指南如何利用Zerox OCR实现物流单据自动跟踪与信息提取完整指南 Zerox是一款基于视觉模型的OCR和文档提取工具能够快速识别各类文档中的关键信息特别适OCRAI 应用PaddleOCR doc2md无需 OCR 即可将 Word、Excel 与 PowerPoint 一键转换为 MarkdownPaddleOCR doc2md无需 OCR 即可将 Word、Excel 与 PowerPoint 一键转换为 Markdown doc2md 是 Padd人工智能计算机视觉深度学习上一篇Fathom Lite服务网格流量管理Istio规则下一篇Puma请求处理流程从Binder接收连接到Server响应创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

免费获取报价 →
↑