ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Zerox 实战案例解析:加州驾驶执照的视觉 OCR 与 Markdown 结构化输出

Zerox 实战案例解析:加州驾驶执照的视觉 OCR 与 Markdown 结构化输出 OCRAI 应用【免费下载链接】zeroxOCR Document Extraction using vision models项目地址https://gitcode.com/GitHub_Trending/ze/zerox点击查看免费下载本文以 Zerox 项目测试样本集中的真实案例——一张 1984 版加州驾驶执照California Driver License的扫描图shared/inputs/0029.png及其 OCR 结果shared/outputs/0029.md为主线完整还原视觉模型驱动的文档转 Markdown 全流程从输入图片、系统提示词约束、图像预处理到最终的结构化输出与自动化关键词验证。读完本文你将掌握 Zerox 如何处理证件类高密度版式文档、输出中的每个字段如何对应原图元素以及如何用仓库自带的测试框架复现并验证这一过程。案例概览从证件扫描图到 Markdown本案例的输入是位于 shared/inputs/0029.png 的一张加州驾驶执照扫描图1448×2048 像素约 1.56 MB输出是 shared/outputs/0029.md。这是一张 1984 年格式的老式加州驾照版式要素包括州名与证件类型标题、持有者姓名、地址、驾照编号、身体特征表性别/发色/瞳色/身高/体重/驾照前期有效期、出生日期、限制条件矫正镜片、车型类别CLASS 3、车辆法规条款、签名栏以及卡面提示文字。Zerox 的处理哲学是文档本质上是视觉呈现README 开篇即强调Documents are meant to be a visual representation after all. With weird layouts, tables, charts, etc. The vision models just make sense!。因此它对证件、票据、表格这类复杂版式不依赖传统 OCR 引擎逐字识别而是交给视觉大模型直接看图说话输出 Markdown。整个管线在 README.md 中被概括为四步传入文件PDF、DOCX、图片等将文件转换为一系列图片把每张图片交给视觉模型并要求返回 Markdown聚合各页响应输出完整 Markdown。本案例走的是其中直接图片输入分支文件本身是.png无需 PDF 转换直接进入视觉模型处理环节对应 node-zerox/src/index.ts 中extension .png的分支逻辑。原始输出文档0029.md 全文以下是 Zerox 对该加州驾照生成的完整 Markdown 输出即关联文档原貌未做任何删改**CALIFORNIA | DRIVER LICENSE** MUST BE CARRIED WHEN OPERATING A MOTOR VEHICLE AND WHEN APPLYING FOR RENEWAL **EXPIRES ON BIRTHDAY** **1984** - W0209369 - James Scott Garner - 35 Oakmont Dr - Los Angeles CA 90049 | SEX | HAIR | EYES | HEIGHT | WEIGHT | PRE LIC EXP | | --- | ---- | ---- | ------ | ------ | ----------- | | M | Blk | Brn | 6-3 | 210 | 80 | **DATE OF BIRTH** 4-7-23 **MUST WEAR CORRECTIVE LENSES** □ **SEE OVER FOR ANY OTHER CONDITIONS** **OTHER ADDRESS** CLASS 3 **SECTION 12804 VEHICLE CODE** **X** James S. Garner 3-25-80 | Gln rc **DO NOT LAMINATE**这份输出有四个值得注意的结构化特征直接体现了 shared/systemPrompt.txt 中 RULES 的约束效果要点列表承载关键信息驾照编号W0209369、姓名James Scott Garner、地址35 Oakmont Dr / Los Angeles CA 90049被组织为 Markdown 无序列表保证字段级信息不会被遗漏表格承载身体特征数据SEX / HAIR / EYES / HEIGHT / WEIGHT / PRE LIC EXP 六个维度被转换为规范表格字段名保留原卡面缩写复选框符号保留状态语义MUST WEAR CORRECTIVE LENSES □使用□未勾选而非臆造其状态正是系统提示词中Prefer using ☐ and ☑ for check boxes规则的应用原文无样式区分输出以加粗层级还原视觉强调卡面上的大号印刷文字如 CALIFORNIA | DRIVER LICENSE、DO NOT LAMINATE以**加粗**形式保留其强调语义。从源码角度印证这些规则全部来自 Zerox 的默认系统提示词。Node SDK 侧的基础提示词定义在 node-zerox/src/constants.ts 的SYSTEM_PROMPT_BASE其中包括必须包含页面上所有信息不得遗漏页眉页脚或副文本图表与信息图需转换为 Markdown优先表格形式复选框优先使用 ☐ 与 ☑等条款Python SDK 则通过 LiteLLM 调用同一套约束默认提示词可被custom_system_prompt覆盖见 py_zerox/pyzerox/core/zerox.py 中if custom_system_prompt: vision_model.system_prompt custom_system_prompt。输出字段与原图元素的映射关系将 shared/outputs/0029.md 与加州驾照的真实版式对照可以逐项确认视觉模型的识别精度输出中的内容对应卡面元素CALIFORNIA \| DRIVER LICENSE州名与证件类型标题MUST BE CARRIED ... FOR RENEWAL卡面顶部提示文案EXPIRES ON BIRTHDAY/1984到期规则说明与年份标识W0209369驾照编号DL NumberJames Scott Garner持证人姓名35 Oakmont Dr/Los Angeles CA 90049住址与邮编SEX/HAIR/EYES/HEIGHT/WEIGHT 表格性别M、发色Blk、瞳色Brn、身高6-3、体重210PRE LIC EXP列值80驾照前期有效期信息DATE OF BIRTH 4-7-23出生日期MUST WEAR CORRECTIVE LENSES □矫正镜片限制条件及勾选状态CLASS 3驾照车型类别SECTION 12804 VEHICLE CODE相关车辆法规条款引用X James S. Garner签名栏X 标记 签名姓名字迹3-25-80 \| Gln rc卡面签发相关记录DO NOT LAMINATE卡面底部保管提示值得注意的是模型不仅识别了文字还识别了版式的功能语义将证件编号/姓名/地址这类数据字段归纳为列表将维度一致的测量指标归纳为表格将签名区的X标记单独保留说明视觉模型在结构化归纳上的能力远超传统 OCR 的逐字符转录。从图片到 Markdown 的完整处理流水线在zerox()内部图片输入会经过一段可复现的处理链核心实现在 node-zerox/src/index.ts参数校验缺失credentials或filePath时直接抛错Missing credentials/Missing file path临时目录创建在tempDir默认系统临时目录下创建zerox-temp-随机数工作目录文件下载与类型判断downloadFile得到本地路径后按扩展名分流——PNG/JPG/JPEG 直接作为图片、HEIC 转 JPEG、其余格式经 LibreOffice 转 PDF 再转图本案例的0029.png属于直接图片分支imagePaths [localPath]图片压缩可选若maxImageSize大于 0 且图片超限按质量 90 起步、每次递减 10 的循环压缩到目标体积实现见 node-zerox/src/utils/image.ts 的compressImage低于质量 20 仍超限则返回原图图像预处理cleanupImage依次执行边缘裁剪、方向矫正、超高图拆分详见下一节视觉模型推理createModel按modelProvider创建对应模型实例本案例走 OpenAI 分支node-zerox/src/models/openAI.ts将图片编码为data:image/png;base64的image_url消息发送给https://api.openai.com/v1/chat/completions并发与重试非maintainFormat模式下用p-limit(concurrency)控制并发默认 10单页失败按maxRetries默认 1重试errorMode决定失败是忽略还是抛出结果聚合按页汇总pages统计inputTokens/outputTokens/completionTime若配置outputDir则把各页内容以\n\n连接写入文件名.mdnode-zerox/src/index.ts 中outputDir分支文件名会被清洗并截断到 255 字符清理cleanup为 true默认时删除临时目录。Python 侧流程与之对等见 py_zerox/pyzerox/core/zerox.pydownload_file→convert_pdf_to_images→ 按concurrency分批调用 LiteLLM 模型process_pages_in_batches→ 聚合写入output_dir/文件名.md并支持select_pages预先生成子集 PDF、maintain_format顺序处理、custom_system_prompt覆盖默认提示词。关键预处理机制方向矫正、边缘裁剪与超高图拆分证件扫描常出现旋转、白边、超长版式三类问题Zerox 在把图片交给视觉模型前会逐一处理node-zerox/src/utils/image.ts 的cleanupImage边缘裁剪trimEdges默认开启调用sharp().trim()裁掉与左上角像素色相近的四周像素消除扫描白边让视觉模型的注意力集中在证面内容上方向矫正correctOrientation默认开启借助 Tesseract 的detect任务对图片做方向探测tessedit_pageseg_mode: PSM.OSD_ONLY拿到orientation_degrees后按该角度旋转日志会输出Reorienting image X degrees (confidence: Y%)Tesseract worker 由调度器统一管理默认先启动 3 个NUM_STARTING_WORKERS定义于 node-zerox/src/constants.ts页数多时按需扩容上限受maxTesseractWorkers默认 -1 不设限约束node-zerox/src/utils/tesseract.ts超高图拆分splitTallImage当图片高宽比超过阈值 5ASPECT_RATIO_THRESHOLD时将图片转为灰度并逐行统计空白像素占比 95% 的行把连续空白区高度 ≥ 5 像素作为候选切分点按目标高度在切分点附近 ±150 像素内寻找最近的空白带切开切分结果会作为多张子图依次送审。这一机制对长截图类文档尤其重要本案例的 1448×2048 驾照扫描高宽比约 1.41低于阈值因此不触发拆分。系统提示词如何塑造输出格式shared/systemPrompt.txt 是本案例的幕后导演其规则逐条映射到 0029.md 的格式特征提示词规则在本案例输出中的体现You must include all information on the page. Do not exclude headers, footers, or subtext.卡面顶部提示语、底部DO NOT LAMINATE均被保留未被当作噪声丢弃Return tables in an HTML format./Charts infographics must be interpreted to a markdown format. Prefer table format when applicable.身体特征六个维度被整理为规范 Markdown 表格Logos should be wrapped in brackets.若卡面含州徽等 Logo 元素会被以方括号包裹保留本案例输出中未见说明原图该区域未触发Prefer using ☐ and ☑ for check boxes.矫正镜片限制以□呈现同时提示词明确要求Return only the markdown with no explanation text. Do not include delimiters因此输出干净、无模型闲聊。Node 侧还有formatMarkdown兜底清洗node-zerox/src/utils/common.ts会把模型误带的markdown/html代码围栏剥除同时保留其他语言代码块。自动化验证0029.png 的关键词测试闭环仓库内置了一套关键词回归测试用于量化评估输出质量本案例正是被测样本之一。测试输入定义在 shared/test.json 中0029.png的expectedKeywords列出了 20 个关键字段词CALIFORNIA、OPERATING、1984、W0209369、James Scott Garner、35 Oakmont Dr、90049、Blk、Brn、6-3、PRE LIC EXP、4-7-23、CORRECTIVE、CONDITIONS、CLASS 3、SECTION 12804、James S. Garner、3-25-80、Gln rc、LAMINATE——与 shared/outputs/0029.md 中出现的字段逐一对应测试执行器测试入口 node-zerox/tests/index.ts 会遍历test.json对每个输入调用zerox()cleanup: false、model: ModelOptions.OPENAI_GPT_4O并把逐页输出写入时间戳命名的结果目录评分逻辑评分函数位于 node-zerox/tests/utils.ts 的compareKeywords做法是大小写不敏感的子串包含匹配——将页面内容toLowerCase()后逐一检查期望关键词是否出现最终统计keywordsFound/keywordsMissing并计算命中率百分比。对照可见0029.md 的输出几乎完整覆盖了全部期望关键词编号、姓名、地址、身体特征缩写、日期、法规条款均命中这既验证了本案例输出的字段保真度也说明关键词命中率是该项目衡量 OCR 质量的工程化手段。在本地复现本案例要在本地复现驾照图片 → Markdown这一案例先安装 Node SDK 及系统依赖PDF 场景需要 graphicsmagick 与 ghostscript图片场景可跳过Linux 下安装命令见 README.mdnpm install zerox随后编写调用代码参考 README.md 的 Usage 与 node-zerox/tests/index.tsimport { zerox } from zerox; import path from path; const result await zerox({ filePath: path.resolve(__dirname, shared/inputs/0029.png), credentials: { apiKey: process.env.OPENAI_API_KEY }, modelProvider: ModelProvider.OPENAI, model: ModelOptions.OPENAI_GPT_4O, outputDir: path.resolve(__dirname, shared/outputs), maintainFormat: false, concurrency: 10, correctOrientation: true, trimEdges: true, });Python 侧等价调用参考 py_zerox/pyzerox/core/zerox.py 与 README.mdimport asyncio, os from pyzerox import zerox os.environ[OPENAI_API_KEY] your-api-key async def main(): result await zerox( file_pathshared/inputs/0029.png, modelgpt-4o-mini, output_dirshared/outputs, select_pagesNone, concurrency10, ) return result result asyncio.run(main()) print(result)几个与本案例直接相关的参数取值建议correctOrientation: true默认证件扫描常见旋转交由 Tesseract 方向探测矫正可显著提升字段识别顺序正确性trimEdges: true默认裁剪扫描白边聚焦证面内容maintainFormat: false默认单页证件无需跨页格式一致保持并发以换取速度多页表格类文档才建议开启该模式下前一页输出会作为后一页的附加上下文请求转为串行速度明显下降outputDir指定后会在目录下生成文件名.md本仓库的shared/outputs/0029.md即此类产物的示例maxImageSize: 15超过 15 MB 的图片会被渐进压缩后再送审防止超长证件扫描触发模型输入上限。小结通过加州驾照这一真实样本可以看到 Zerox 证件类 OCR 的完整能力闭环shared/inputs/0029.png经图像预处理裁剪、纠偏后送入视觉模型在shared/systemPrompt.txt规则约束下输出保留全部卡面信息的结构化 Markdownshared/outputs/0029.md再通过shared/test.json的期望关键词与compareKeywords评分器完成自动化回归。这套视觉模型 强提示词约束 关键词回归的组合使票据、证件、报表等高密度版式文档的数字化具备可工程化、可量化的质量保障。赞分享OCRAI 应用【免费下载链接】zeroxOCR Document Extraction using vision models项目地址https://gitcode.com/GitHub_Trending/ze/zerox点击查看免费下载相关推荐zerox 视觉模型 OCR 实战从加州驾照样张到结构化 Markdown 抽取zerox 视觉模型 OCR 实战从加州驾照样张到结构化 Markdown 抽取 导读 本文以 zerox 仓库内置的加州驾照样张 shared/inputOCRAI 应用External Secrets Operator 实战使用 dataFrom 一次性提取远端密钥为单个 Kubernetes SecretExternal Secrets Operator 实战使用 dataFrom 一次性提取远端密钥为单个 Kubernetes Secret ExternalOCRAI 应用证件类文档 OCR 实战Zerox 视觉模型把田纳西州驾照转成 Markdown 的完整解析证件类文档 OCR 实战Zerox 视觉模型把田纳西州驾照转成 Markdown 的完整解析 导读 本文以 shared/outputs/0023.md htOCRAI 应用上一篇BT 下载总卡在 99%trackerslist 公共 Tracker 清单配置实录下一篇Envoy Composite Cluster 完整指南按重试次数选集群创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表