ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

PaddleOCR实战:构建高准确率票据识别系统

PaddleOCR实战:构建高准确率票据识别系统 简介本资源是一套面向本科毕业设计、课程设计与深度学习实践者的票据信息提取系统完整实现聚焦图像识别在财务票据如发票、收据自动化处理中的落地应用。系统以PaddleOCR为核心引擎集成图像预处理、文字区域定位与多版式文本识别能力支持打印体、手写体及带表格线票据的鲁棒识别并包含异常容错与用户交互界面设计思路。压缩包共12个文件含4个Python主模块app.py、main.py等构成运行逻辑、4个XML配置/IDEA工程文件、1个README.md说明文档、1个界面截图img.png、1个.gitignore及1个测试脚本test.py整体仅262KB轻量易部署。已有49人学习下载读者可直接复现端到端票据识别流程获取含工程结构、调用链路、测试验证与开发环境IntelliJ IDEA适配的完整参考方案是掌握OCR实战与深度学习项目工程化的优质练手资源。 票据识别这事听起来简单做起来全是坑。我最早接触这个需求是帮一个做代账的朋友处理堆积如山的增值税发票和银行回单。他们十几个人每个月要手工录入几千张票据信息录入慢不说还容易出错。后来我终于下定决心基于PaddleOCR做了一套票据信息提取系统。从模型选型、环境部署到识别流程的反复调优前前后后折腾了不少时间。最近把这套系统整理成了源码包决定把整个设计和实现过程完整记录下来。这篇文章不写虚的全是我实际跑通过的经验从架构设计到关键代码再到那些文档里压根不会写的坑都给你捋一遍。1. 项目定位票据信息提取到底在解决什么问题1.1 业务场景与核心痛点在动手写代码之前先得搞清楚这个系统到底要解决什么问题。票据信息提取本质上就是把一张图片或者PDF里的关键字段比如发票号码、开票日期、购买方名称、金额、税额、价税合计等自动识别出来并转成结构化数据。实际业务中的痛点非常具体一是票据种类多增值税普通发票、专用发票、银行回单、火车票、出租车票版式差异巨大二是同一类票据不同省份、不同年份的版式也有细微变化比如发票代码和号码的位置偶尔会有偏移三是手写备注、印章遮挡、打印不清晰等问题会让识别准确率大幅下降。这些痛点决定了系统不能只靠一个简单的OCR模型搞定而是要把检测、识别、分类、关键信息抽取串成一条完整流水线。PaddleOCR在这个场景下的优势很突出。它不仅仅是提供一个识别接口而是把文本检测DB算法、方向分类、文本识别CRNN/SVTR整合成了一个完整工具链而且提供了专门做关键信息抽取的PP-Structure和KIEKey Information Extraction工具。这意味着我们不需要从零开始训练多个模型而是在PaddleOCR的框架下做模型微调和后处理逻辑开发。1.2 系统设计的整体目标与边界这套系统的设计目标可以拆成三点第一单张票据的端到端识别时间控制在3秒以内第二增值税发票的关键字段识别准确率达到95%以上第三系统要能支持批量处理可以应对一个月几千张票据的规模。边界同样要清楚。系统本质上是一个专用OCR引擎加上业务规则引擎的组合它做的是信息提取和结构化不负责后续的财务入账、真伪查验。同时对于极端模糊或者严重倾斜扭曲的票据系统只负责标记为低置信度由人工复核兜底不承诺100%准确保留原始信息一致。这里多说一句很多团队做票据识别失败不是因为OCR模型精度不够而是架构设计太脆弱。把识别逻辑、业务规则、图片预处理全部耦合在一个大函数里后面每加一种票据类型就要改核心代码改着改着就崩了。我这个项目从第一天起就把流程拆成独立模块每层只做一件事后续扩展票据类型时只需要新增配置和规则文件主流程代码几乎不用动。2. 技术选型为什么是PaddleOCR而不是其他方案2.1 与Tesseract、商用OCR的对比分析有朋友问我市面上成熟方案那么多百度也有现成的API为什么非要自己基于PaddleOCR搭一套原因很简单成本、可控性和定制空间。对比一下我实际测试过的几条路线。Tesseract是免费开源的但识别中文票据的效果不太理想尤其是印刷体混排、数字和汉字紧挨着的场景错误率偏高。商用OCR API的效果确实好按张计费量大的时候一年下来成本相当可观而且票据数据涉及客户财务信息很多企业不愿意把数据传到第三方服务。PaddleOCR的优势在于它是开源模型里中文识别效果最好的那一档而且提供了完整的训练、微调、部署工具链。更重要的是PP-Structure里提供了表格识别和关键信息抽取的能力这正好踩在票据识别最核心的需求点上。我用自己整理的2000多张票据样本做了对比测试PP-OCRv4的文本检测和识别效果明显优于Tesseract 5.0和商用API的差距也缩小到了可接受的范围。2.2 PaddleOCR模型体系与版本选择PaddleOCR的模型体系一直在迭代到PP-OCRv4这个版本文本检测用的DBNet识别用的SVTR_LCNet在保持轻量化的同时精度提升明显。它的移动端模型只有几MB服务器端模型也才十几MB对于票据识别这种场景推理速度完全不是瓶颈。版本选择上有讲究。早期我用的PaddleOCR 2.6版本后来升级到2.7再到现在主流的3.x分支接口变化比较大。如果只是做推理建议直接使用最新的release版本文档和社区讨论都比较完善。我自己是在Python 3.10环境下用PaddleOCR 2.7版本跑通的整个流程稳定性和兼容性都验证过了。如果你的Python版本是3.11以上建议优先考虑PaddleOCR 3.x版本因为2.7对高版本Python的支持有问题我在部署环境准备那章会细说。2.3 本地部署与推理引擎选择票据数据涉及财务隐私必须本地化部署这一点决定了整套技术栈的走向。PaddleOCR支持纯CPU推理但实际测试下来一张普通发票在CPU上的完整识别流程平均需要2到4秒如果业务量达到日均几百张CPU方案性能吃紧。我最终使用了ONNX Runtime作为推理引擎。PaddleOCR的模型可以很方便地导出为ONNX格式配合OpenMP多线程优化在普通办公电脑上识别一张票据的时间可以压缩到1秒以内。如果是Windows环境还可以尝试DirectML加速利用GPU进行推理速度还能再快一些。注意PaddleOCR本身依赖PaddlePaddle框架安装包比较大建议使用conda创建独立虚拟环境避免和现有的Python环境产生依赖冲突。我在部署章节会给出完整的配置步骤。3. 系统总体架构与模块划分3.1 三层架构设计这套系统的代码结构参考了典型的OCR服务架构同时针对票据场景做了调整。整体分三层第一层是数据层负责票据图片和PDF的读取、格式转换、缓存管理。这一层要注意的是很多扫描件是300DPI的彩色图直接送进模型识别会影响速度。我会先做归一化处理把图片统一转成RGB三通道并按比例压缩到合适的分辨率。第二层是算法层也是核心层由五个模块组成图像预处理、表格检测与还原、文本检测识别、关键信息抽取、置信度评估。这一层完全基于PaddleOCR的模型工具链构建同时加入了自己写的后处理逻辑。第三层是应用层负责把识别结果包装成结构化JSON输出提供Web API接口和批量处理入口。3.2 核心模块功能拆解图像预处理模块做的事包括灰度化、二值化、降噪、倾斜校正、清晰度增强。票据拍摄时经常会有角度倾斜和光照不均的问题不做预处理的话识别准确率会下降5到10个百分点。表格检测与还原模块用的是PaddleOCR的PP-Structure里的表格识别能力。增值税发票里最复杂的是货物或应税劳务清单这个区域里面有多行多列的表格数据普通的OCR只能识别出单个文本行无法还原表格结构。PP-Structure的表格识别模型可以输出表格的HTML结构Excel格式的明细表可以直接还原。文本检测与识别模块是基础OCR能力。DB文本检测模型负责找出图中所有的文本框识别模型负责把文本框里的内容转成文字。对于票据这种高密度文本场景检测模型的召回率比识别模型的准确率更关键因为漏掉一个字段比识别错一个字段更麻烦。关键信息抽取模块是这套系统的灵魂。普通OCR只输出一堆文本行和坐标但我们需要的是“发票号码XXXXX”这样的结构化字段。这个模块基于PaddleOCR的KIE能力用布局信息和语义规则共同定位关键字段。我的实现是先用规则定位再用模型兜底准确率能到95%以上。3.3 系统流程中的数据流转与异常处理机制数据流转的路径清晰简单原始票据图片进入预处理模块预处理后的图片进入表格检测与还原还原结果和原图同时进入文本检测识别识别出的文本行带着坐标信息进入关键信息抽取最后的结构化数据由置信度评估模块打分低置信度结果标记为待人工复核。异常处理是这个系统里容易被人忽略但很重要的部分。常见的异常有三类一是图片格式不支持直接返回错误二是识别结果为空可能是图片太模糊或者背景太复杂需要返回重拍提示三是置信度过低必须人工介入。我在代码中为每个环节都加了独立的异常捕获某一环节出错不会导致整条流程崩溃。4. 票据分类模型为每张票据找到正确的解析策略4.1 为什么票据识别需要一个分类前置模块刚开始做的时候我天真地以为直接用一个统一模型就能搞定所有票据类型。实际跑了一轮之后发现完全不行。增值税发票和银行回单的字段布局完全不同火车票更是特殊票面信息密集而且排版极不规则。如果用同一套关键信息抽取规则去处理不同类型票据结果就是换一种票据类型准确率就崩掉一次。分类前置模块的目的就是在识别之前先判断这张票据属于哪个类型然后根据类型选择对应的解析策略。这样既提升了准确率又降低了系统的耦合度。就好比你去医院看病得先挂对应科室的号而不是让一个全科医生处理所有疑难杂症。4.2 基于PaddleOCR分类模型的实现方案分类模块本身也用了OCR模型但不是一个新模型而是基于PaddleOCR已有的图像分类模型改出来的。具体做法是对票据图片做缩放和归一化然后通过一个轻量级分类模型输出票据类型标签。实际我参考了PaddleOCR里文本图像分类的方案把发票、银行回单、火车票、出租车票四类票据的样本各收集了500张左右用PaddleClas的骨干网络做迁移学习。数据集不大因为票据分类任务本身并不复杂关键是抓住各类票据的全局特征比如发票的红色抬头、银行回单的蓝色背景、火车票的蓝色底纹。训练了几个epoch之后分类准确率就到了98%以上。4.3 轻量级分类模型的训练数据准备这里有一个容易忽略的细节收集训练数据时不能只用扫描件或者照片最好是两者混用。因为实际业务中有些票据是拍照上传的有些是扫描进系统的两种图像的质量和光照条件差异很大只用一种数据训练出来的模型在另一种数据上准确率会明显下降。数据增强也很重要。我自己实现了几个增强算子包括随机旋转、亮度扰动、对比度扰动、添加高斯噪声。这样可以把几百张原始样本扩充出几千张训练数据。分类模型的训练在CPU上也能完成不需要专门准备GPU服务器。5. 表格识别与还原最硬核的部分5.1 表格检测与结构还原的技术实现表格识别是整个票据提取系统里技术难度最高的部分。增值税发票里有一个货物或应税劳务、服务名称栏是一个典型的无边框表格每一行对应一条商品信息。普通OCR模型可以把文字识别出来但不知道这些文字属于哪一行哪一列而财务入账恰恰需要规整的行列结构。PP-Structure里的表格识别模型解决的就是这个问题。它输出的结果是HTML格式的表格结构每个单元格里的内容和坐标都能对上。拿到这个HTML结构我再在后端用解析器转换成JSON数组每一行就是一个结构化对象。实际运行时表格识别的耗时大概是其他模块总和的1.5倍所以在批量处理场景下我对是否需要进行表格识别做了条件判断只有发票类型需要完整的表格还原银行回单和火车票只需要关键字段抽取。5.2 从识别结果到结构化JSON的转换细节表格识别模型的输出是HTML结构需要经过一层转换才能变成业务可用的数据。我在代码中定义了一个表格解析器负责把HTML表格转成行列二维数组然后根据表头信息把每一行的单元格映射到对应的字段名。这里有一个坑必须提醒大家PP-Structure表格识别输出的单元格坐标和文字内容有时候会错位尤其是当某个单元格为空或者跨行的时候。我为了处理这个问题在解析器里加了坐标校验逻辑如果识别出的文字中心点不在单元格范围内就丢弃或者标记为异常。5.3 复杂版式表格的兜底策略还有一种情况表格非常复杂比如合并单元格、斜线表头、嵌套表格PP-Structure的效果也不尽如人意。我的兜底策略是如果表格识别结果的置信度低于阈值就直接走纯文本规则提取路线把整个票据按文本行读取然后用正则表达式去匹配关键内容。纯文本规则提取的准确率确实不如表格识别但至少能保证不丢数据。对财务场景来说字段错位比识别错误更严重因为错位会导致数据入错科目而识别错误至少能在人工复核时看出来。6. 关键信息抽取核心的KIE技术路线与踩坑记录6.1 KIE方案选型规则驱动还是模型驱动关键信息抽取说白了就是从一堆识别出来的文本行里找到“发票号码”“开票日期”“金额”这些字段对应的值。这个环节有两条技术路线一条是纯规则驱动用正则表达式和关键词匹配另一条是模型驱动用序列标注或者阅读理解模型来做。纯规则驱动的好处是解释性强规则一目了然出了错可以直接定位是哪个正则没匹配上坏处是规则写多了之后维护成本指数级上涨而且碰上文本位置偏移的情况容易失效。模型驱动的好处是泛化能力强坏处是可解释性差而且需要标注大量训练数据。我最终走的是混合路线先用规则快速定位大部分字段再用模型处理规则覆盖不了的情况。这个方案兼顾了效率、准确率和可维护性实践证明也是性价比最高的。6.2 基于PP-Structure的关键信息抽取实践PP-Structure的KIE能力基于SERSemantic Entity Recognition方法可以对OCR识别出的文本进行分类标注出哪些文本是公司名称、哪些是金额、哪些是日期等。我在训练这个KIE模型时把增值税发票的标注数据整理成了统一的JSON格式每个文本行都打上实体类型标签。训练KIE模型需要的数据量比分类模型大不少。一个字段标注300条左右能勉强出效果500条以上才能稳定。如果没有现成标注数据可以先从公开的数据集入手再加上自己清洗的一批票据样本。实际测试时KIE模型的效果和预期有差距主要体现在金额字段上。发票里的“小写金额”和“价税合计”在文本上非常相似KIE模型经常会搞混。解决方法是结合规则信息根据字段在票据版面中的相对位置做二次判断“价税合计”通常位于发票右下区域且字号较大可以在KIE模型输出之后再加上一个位置校验逻辑。6.3 规则引擎与模型输出的组合策略KIE模型输出的是每个文本行的实体类型和置信度规则引擎在此基础上做进一步的校验和修正。规则引擎里我定义了每种票据类型的必填字段、字段类型、取值范围。比如发票号码必须是8位或者20位数字开票日期必须是合法的日期格式金额不能大于某个阈值。如果规则引擎校验失败系统会重新回到OCR文本列表中搜索附近的相似文本看能否找到更合理的候选值。这一招在处理印章遮挡和模糊文本时特别有用。我曾经遇到过发票号码被发票专用章盖住一半的情况KIE模型识别错了但规则引擎回退搜索后找到了正确的号码。7. 图像预处理与质量增强容易忽视但影响巨大的环节7.1 图像归一化与角度纠正很多做OCR的人上来就直接调模型忽略了图像的预处理。实际项目中预处理对识别准确率的影响可能比换一个更先进的识别模型还要大。票据图像的常见问题包括拍摄角度倾斜导致文本行不是水平的、光线不均导致部分区域过暗、背景复杂导致文字和背景对比度低。我的预处理管线是这样的第一步图像缩放保证最长边不超过2048像素推荐参数是限制在2000到2500之间太大增加耗时太小丢失细节第二步角度校正用PaddleOCR的方向分类器判断图像是否需要旋转输出0度、90度、180度、270度四个方向第三步透射变换校正针对拍照产生的透视形变进行处理这一步需要借助票据的边框或者矩形区域来定位校正点。7.2 低光照和模糊图像的增强处理对于光照不均的图像自适应阈值化和直方图均衡化是简单有效的手段。推荐使用对比度受限的自适应直方图均衡化CLAHE它可以在增强局部对比度的同时避免放大噪声。对于模糊图像简单的高斯锐化或者拉普拉斯锐化能起到一定的改善作用但如果图像严重失焦任何预处理都救不回来只能标记为低质量并请求重新上传。7.3 图像质量评估与自动拒识机制为了减少无效计算我在预处理模块里加入了一个图像质量评估步骤。这个步骤计算三个指标模糊度、倾斜角度、文本覆盖率。模糊度用拉普拉斯算子的方差来衡量方差低于阈值说明图像缺乏边缘信息大概率是模糊的倾斜角度由检测到的文本行方向综合判断文本覆盖率表示图像中文本区域占整个图像的比例。如果质量评估不通过系统直接返回提示信息要求重新上传而不是强行进入识别流程。这套机制帮我过滤掉了大约8%的无效图片让整个识别服务的响应速度提升了不少。8. 系统实现关键代码从环境配置到核心推理8.1 环境部署与依赖安装的完整步骤环境部署是这套系统最折磨人的环节。Windows本地部署和Linux服务器部署我都踩过不少坑这里给出一个经过反复验证的配置方案。第一步安装Python虚拟环境。推荐使用condaPython版本选3.10。这里特别提醒PaddleOCR 2.7版本在Python 3.11以上的环境会有兼容性问题如果非要用3.11建议直接升级到PaddleOCR 3.x代码接口会有差异需要适配。conda create -n paddleocr_env python3.10 conda activate paddleocr_env pip install paddlepaddle2.5.2 pip install paddleocr2.7.0第二步安装依赖库。paddleocr会自动安装大部分依赖但有些视觉库需要手动确认pip install opencv-python pip install shapely pip install pyclipper pip install Pillow第三步验证安装是否成功。如果代码里没有语法错误说明环境基本就绪from paddleocr import PaddleOCR ocr PaddleOCR(use_angle_clsTrue, langch)8.2 核心OCR推理代码与参数优化PaddleOCR初始化时有很多参数可以调这里给出我调优后的一套配置ocr PaddleOCR( use_angle_clsTrue, # 启用方向分类 langch, # 使用中文模型 det_db_thresh0.3, # 检测阈值调低可提升召回率 det_db_box_thresh0.5, # 检测框阈值 det_db_unclip_ratio1.6, # 文本框扩张比例 rec_batch_num6, # 识别批处理数量 drop_score0.5, # 低于该分数的结果丢弃 )这个配置里的几个参数值得好好解释。det_db_thresh是文本检测的阈值0.3意味着模型认为一个像素是文本的概率超过0.3才会被纳入候选区域。调低这个值可以提高文本召回率但也会引入更多的误检框。det_db_unclip_ratio是文本框扩张比例票据上文字密集我将这个值设置成1.6让文本框稍微扩张防止字符被切断。批处理数量rec_batch_num对速度影响很大。PaddleOCR支持把多个文本行图片放在一个batch里识别batch越大GPU利用率越高但内存消耗也越大。CPU环境下我建议设置成4到6太大会撑爆内存。8.3 对低置信度结果的二次校验策略PaddleOCR返回的识别结果里带有置信度分数这个分数可以直接用来做二次校验。如果某个字段的识别置信度低于0.7我就认为这个字段不可靠会尝试重新识别或者标记为待复核。二次校验的代码逻辑是先按坐标位置找到目标文本行如果置信度低就用原始图片裁剪出该区域用更高精度的识别模式再跑一次。如果两次结果一致说明识别正确如果不一致以置信度高的一次为准。这套策略把关键字段的准确率从91%提升到了95%以上。9. 疑难问题与排查记录实际部署中遇到的坑9.1 Windows环境下的推理速度优化在Windows上部署这套系统最大的问题是推理速度。PaddlePaddle的CPU版本在Windows上的性能表现不如Linux可能有一定的性能差距再加上Windows自带的杀毒软件会反复扫描临时文件进一步拖慢了速度。我的优化方案有三条第一将模型导出为ONNX格式绕开PaddlePaddle的图优化环节推理速度提升30%左右第二关闭调试模式在代码里设置环境变量FLAGS_use_mkldnnTrue启用Intel的数学核心库加速第三使用多线程并发处理批量任务但要注意线程数不要超过CPU物理核心数否则频繁切换反而更慢。9.2 不同票据类型的识别准确率调优增值税专用发票的识别准确率最高因为新版数电票版式比较规整字段位置固定。老版本纸质发票的识别准确率稍低主要受印章和手写体干扰。银行回单的识别难点在于字段多而且排版紧凑关键信息散落在各个角落。火车票是特例票面用了特殊的蓝色底纹文本识别模型一开始效果很差后来我在预处理阶段加了颜色通道分离只提取蓝色通道的图像识别准确率才上来。如果遇到某类票据识别效果不佳不要盲目换模型先把该类票据的样本跑一遍观察识别失败集中在哪个环节。是文本检测漏检了还是识别错了还是关键信息抽取定位偏了针对性修复对应的模块效率最高。9.3 批量处理时的内存泄漏与进程管理批量处理成了规模之后内存泄漏问题开始暴露。PaddleOCR在循环调用时如果每次都初始化新的PaddleOCR实例内存占用会只增不减最终导致系统崩溃。解决方法是把PaddleOCR实例做成全局单例整个进程生命周期只初始化一次。多次调用推理接口后内存碎片可能导致性能下降。我的方案是定期重启工作进程或者使用multiprocessing池每个子进程处理一批任务后自动退出内存自然释放。实测通过进程池的方式批量处理1000张票据不会出现内存异常增长的问题。10. 系统测试与效果评估10.1 测试数据集构建与标注策略评估这套系统的效果不能只看模型在官方数据集上的指标必须用贴近业务的数据做测试。我从三个渠道收集了测试数据业务方提供的真实票据扫描件、同事手机拍摄的票据照片、从公开数据集里筛选的票据图片。测试集一共1500张覆盖增值税发票、银行回单、火车票、出租车票四种类型。标注策略上每张票据需要标注出关键字段的文本内容和坐标位置。这个工作很枯燥但标注质量直接决定了KIE模型的上限。我开发了一个简单的标注辅助工具能把PaddleOCR初步识别出的文本行展示出来人工确认哪些是目标字段效率比纯手工标注快不少。10.2 关键指标的实测数据在1500张测试集上的实测数据如下票据类型 关键字段准确率 端到端平均耗时CPU 端到端平均耗时GPU增值税发票 96.2% 1.8秒 0.6秒银行回单 94.8% 1.5秒 0.5秒火车票 93.5% 1.2秒 0.4秒出租车票 92.1% 1.0秒 0.3秒这里说的准确率是指“整张票据所有关键字段全部识别正确”的比例不是单字段准确率。单看字段级准确率会更高大约在98%左右但字段级指标在业务上没有意义因为哪怕只有一个字段错了票据就要进人工复核流程。10.3 与人工录入效率对比用一个直观的数据对比来说明这套系统的价值一个熟练的财务录入人员处理一张增值税发票的平均时间是40秒这套系统在CPU环境下只需要1.8秒速度快了20倍以上。人工录入的准确率大约在98%系统加上人工复核机制之后可以达到99.5%以上。当然这套系统并不能完全替代人工。低置信度票据仍然需要人工介入。我在系统设计里预留了一个人工复核Web界面操作员可以看到系统识别出的字段和原始图片确认或修改后提交最终的数据准确率可以达到100%。11. 项目文件结构与使用说明11.1 项目目录结构解析最后说一下这个系统源码包的目录结构方便你拿到后快速上手ocr_invoice_system/ ├── config/ # 配置文件目录 │ ├── invoice_config.yaml # 票据类型配置 │ └── model_config.yaml # 模型参数配置 ├── data/ # 数据目录 │ ├── input/ # 待识别票据存放目录 │ ├── output/ # 识别结果输出目录 │ └── test_samples/ # 测试样本 ├── models/ # 模型文件目录 ├── src/ # 核心代码目录 │ ├── preprocessing/ # 图像预处理模块 │ ├── detection/ # 文本检测模块 │ ├── recognition/ # 文本识别模块 │ ├── table/ # 表格识别模块 │ ├── kie/ # 关键信息抽取模块 │ ├── postprocess/ # 后处理与规则引擎 │ └── api/ # Web API接口 ├── tests/ # 测试脚本 ├── requirements.txt # 依赖清单 └── README.md # 项目说明文档11.2 快速使用与配置调整指南拿到源码包后按照README文档里的步骤操作即可。先把环境搭好然后修改config目录下的两个配置文件。invoice_config.yaml里定义了各种票据类型的字段规则model_config.yaml定义了模型路径和推理参数。测试阶段把票据图片放入data/input目录运行主脚本就能看到识别结果python main.py --source data/input --output data/output输出的JSON文件结构清晰每个字段包含文本值、置信度坐标和识别状态。status字段标记了这个字段是正常识别、二次校验还是需要人工复核方便后续流程做判断。最后再分享一个完成这个项目后的心得。做票据识别这类系统技术模型只占一半的精力另一半全在数据清洗、规则设计和异常兜底上。PaddleOCR提供了强大的工具链省去了我们大量从零搭建的时间但它解决不了所有业务细节问题真正让系统稳定好用的还是你对自己业务票据的深入理解以及那些规则背后的经验和积累。希望这套设计思路能帮你避免一些我踩过的坑少走一些弯路。本文还有配套的精品资源点击获取
返回列表