news 2026/2/14 4:30:13

如何用OCR模型提取发票信息?cv_resnet18_ocr-detection来搞定

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用OCR模型提取发票信息?cv_resnet18_ocr-detection来搞定

如何用OCR模型提取发票信息?cv_resnet18_ocr-detection来搞定

1. 引言:发票信息提取的痛点与技术选型

在企业财务、税务管理及自动化报销等场景中,发票信息的快速准确提取是实现流程自动化的关键环节。传统人工录入方式效率低、成本高且易出错,而通用OCR工具在复杂版式、模糊图像或倾斜排版的发票上表现不佳。

为此,基于深度学习的文字检测模型成为更优解。本文聚焦于cv_resnet18_ocr-detection这一专为文字区域检测设计的OCR模型镜像,结合其内置WebUI系统,详细介绍如何高效完成发票信息提取任务。

该镜像由开发者“科哥”构建并开源,集成ResNet-18骨干网络与文本检测头,具备轻量级、高精度和易部署的特点,特别适合中文发票这类密集小字文本的检测任务。


2. 环境准备与服务启动

2.1 镜像环境说明

cv_resnet18_ocr-detection是一个预配置好的Docker镜像,包含以下核心组件:

  • 模型架构:ResNet-18 + FPN + DBHead(可变形卷积)
  • 推理框架:PyTorch + ONNX Runtime
  • 前端交互:Gradio WebUI
  • 支持格式:JPG、PNG、BMP

镜像已封装完整依赖,无需手动安装CUDA、cuDNN或PyTorch等复杂环境。

2.2 启动OCR服务

进入容器后执行以下命令启动WebUI服务:

cd /root/cv_resnet18_ocr-detection bash start_app.sh

成功启动后输出如下提示:

============================================================ WebUI 服务地址: http://0.0.0.0:7860 ============================================================

此时可通过浏览器访问http://<服务器IP>:7860打开图形化操作界面。

注意:若无法访问,请检查防火墙是否开放7860端口,并确认Docker容器映射了正确端口。


3. 单张发票信息提取实战

3.1 操作流程详解

步骤1:上传发票图片

在WebUI首页选择“单图检测”Tab页,点击“上传图片”区域,选择待处理的发票文件(建议清晰度高于300dpi)。

步骤2:设置检测参数

调整“检测阈值”滑块至合适位置: - 发票文字清晰 → 设置为0.2~0.3- 图片模糊或有阴影 → 调低至0.1~0.2- 避免误检 → 可提高至0.4

步骤3:执行检测

点击“开始检测”按钮,系统将自动完成以下流程: 1. 图像预处理(归一化、尺寸缩放) 2. 文本区域定位(生成边界框) 3. 输出可视化结果与结构化数据

步骤4:查看与导出结果

检测完成后显示三部分内容: -识别文本内容:按行编号列出所有检测到的文字 -检测结果图:原始图像叠加红色边框标注文本区域 -JSON坐标数据:包含每行文本的四点坐标、置信度和推理耗时

示例输出片段:

{ "texts": [ ["增值税专用发票"], ["购买方名称:北京某某科技有限公司"] ], "boxes": [ [120, 50, 300, 50, 300, 80, 120, 80], [90, 120, 500, 120, 500, 150, 90, 150] ], "scores": [0.97, 0.94], "inference_time": 2.87 }

3.2 提取关键字段的方法

发票中的关键信息通常包括: - 发票代码/号码 - 开票日期 - 购买方/销售方名称 - 金额(不含税、税额、价税合计)

通过分析JSON输出中的文本内容及其空间位置,可编写脚本进行规则匹配或正则提取。例如:

import re def extract_invoice_number(texts): for line in texts: match = re.search(r"发票号码[::\s]*(\d+)", line[0]) if match: return match.group(1) return None # 示例调用 invoice_num = extract_invoice_number(result_json['texts']) print("发票号码:", invoice_num)

对于多页发票或批量处理,建议结合PDF转图像工具(如pdf2image)先行转换。


4. 批量处理与生产级应用

4.1 批量检测操作指南

当需要处理大量发票时,使用“批量检测”功能更为高效:

  1. 在对应Tab页上传多张图片(支持Ctrl/Shift多选)
  2. 设置统一的检测阈值
  3. 点击“批量检测”按钮
  4. 查看结果画廊并下载处理后的图像

性能参考: - CPU环境(4核):约3秒/张 - GPU环境(RTX 3090):约0.2秒/张

建议单次上传不超过50张,避免内存溢出。


4.2 自动化集成建议

为实现端到端自动化,可将WebAPI接入业务系统。虽然当前WebUI未直接暴露REST API,但可通过Selenium或Playwright模拟操作,或修改源码启用FastAPI接口。

另一种方案是直接调用底层模型进行编程式推理:

from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks # 加载文字检测管道 ocr_detection = pipeline( task=Tasks.ocr_detection, model='damo/cv_resnet18_ocr-detection-line-level_damo' ) # 推理单张发票 result = ocr_detection('invoice_001.jpg') # 获取检测框与文本 boxes = result['boxes'] texts = result['texts']

此方法更适合嵌入到Python后端服务中。


5. 模型微调:适配特定发票样式

5.1 为什么需要微调?

尽管预训练模型对常见发票已有较好表现,但在以下情况仍需微调: - 特殊字体(如手写体、艺术字) - 固定模板布局(如某省电子发票) - 低质量扫描件或手机拍摄图像

微调能显著提升检测准确率与鲁棒性。


5.2 数据准备规范

训练数据需遵循ICDAR2015标准格式,目录结构如下:

custom_data/ ├── train_images/ # 原始发票图片 ├── train_gts/ # 标注文件(.txt) ├── train_list.txt # 训练集路径列表 ├── test_images/ ├── test_gts/ └── test_list.txt

每个.txt标注文件内容格式为:

x1,y1,x2,y2,x3,y3,x4,y4,文本内容

推荐使用LabelImg、PPOCRLabel等工具辅助标注。


5.3 微调操作步骤

  1. 将准备好的数据集上传至服务器路径(如/root/custom_data
  2. 在WebUI“训练微调”Tab页填写:
  3. 训练数据目录:/root/custom_data
  4. Batch Size:8(根据显存调整)
  5. Epoch数:5~10
  6. 学习率:0.007
  7. 点击“开始训练”
  8. 训练完成后模型保存于workdirs/目录

微调后的模型可用于替换原模型,进一步提升特定场景下的检测效果。


6. ONNX导出与跨平台部署

6.1 导出ONNX模型的优势

将PyTorch模型导出为ONNX格式,具有以下优势: - 支持跨平台运行(Windows/Linux/macOS/Android/iOS) - 兼容TensorRT、OpenVINO、NCNN等推理引擎 - 易于集成至C++、Java、C#项目


6.2 导出操作流程

在WebUI“ONNX导出”Tab页中:

  1. 设置输入尺寸(建议800×800以平衡速度与精度)
  2. 点击“导出ONNX”按钮
  3. 等待提示“导出成功!”后,获取模型路径
  4. 点击“下载ONNX模型”保存本地

导出的模型文件名为model_<height>x<width>.onnx,如model_800x800.onnx


6.3 ONNX推理示例代码

import onnxruntime as ort import cv2 import numpy as np # 加载ONNX模型 session = ort.InferenceSession("model_800x800.onnx") # 读取并预处理图像 image = cv2.imread("invoice.jpg") h, w = image.shape[:2] input_blob = cv2.resize(image, (800, 800)) input_blob = input_blob.transpose(2, 0, 1)[np.newaxis, ...].astype(np.float32) / 255.0 # 推理 outputs = session.run(None, {"input": input_blob}) # 后处理:解析检测框与得分 boxes = outputs[0] # [N, 8] 形状 scores = outputs[1] # [N, 1] 形状 # 过滤低置信度结果 threshold = 0.2 valid_indices = scores > threshold valid_boxes = boxes[valid_indices.flatten()]

该代码可在无PyTorch环境的设备上独立运行,适用于边缘计算场景。


7. 故障排查与优化建议

7.1 常见问题解决方案

问题现象可能原因解决方法
页面无法打开服务未启动或端口被占用执行lsof -ti:7860检查端口,重启服务
检测结果为空阈值过高或图片无文字降低检测阈值至0.1,确认图片含文字
内存不足崩溃图片过大或批量过多缩小图片尺寸,减少单次处理数量
训练失败数据格式错误检查train_list.txt路径是否正确,标注文件是否符合ICDAR格式

7.2 性能优化策略

  1. 图像预处理优化
  2. 对倾斜发票进行旋转校正
  3. 使用CLAHE增强对比度
  4. 去除背景噪点(高斯滤波)

  5. 硬件加速建议

  6. 使用GPU实例(至少8GB显存)
  7. 开启TensorRT加速(需自行编译ONNX-TensorRT)

  8. 并发处理设计

  9. 多进程并行处理不同发票
  10. 使用消息队列(如RabbitMQ)实现异步任务调度

8. 应用场景扩展与总结

8.1 其他适用场景

除发票外,该模型还可应用于: -身份证/营业执照识别:提取姓名、证件号、地址等 -合同文档结构化:定位条款、签名区、金额栏 -医疗票据处理:医保结算单、门诊收费明细 -物流面单识别:快递单号、收发件人信息提取

只需针对性微调即可迁移至新领域。


8.2 总结

本文系统介绍了如何利用cv_resnet18_ocr-detection镜像实现发票信息的高效提取,涵盖从环境部署、单图检测、批量处理到模型微调与ONNX导出的全流程。

核心要点总结如下:

  1. 开箱即用:镜像集成完整WebUI,无需编码即可操作
  2. 精准检测:基于ResNet-18的DB算法对中文文本检测效果优异
  3. 灵活扩展:支持自定义数据微调与ONNX跨平台部署
  4. 工程友好:提供结构化JSON输出,便于后续自动化处理

对于企业级文档自动化需求,该方案兼具实用性与可扩展性,是构建智能财税系统的理想起点。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

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

DeepSeek-R1边缘计算:物联网设备部署实践

DeepSeek-R1边缘计算&#xff1a;物联网设备部署实践 1. 引言 随着物联网&#xff08;IoT&#xff09;终端智能化需求的不断增长&#xff0c;传统依赖云端推理的AI模型面临延迟高、隐私泄露和网络不稳定等问题。在这一背景下&#xff0c;边缘侧本地大模型成为解决上述痛点的关…

作者头像 李华
网站建设 2026/2/5 0:17:39

如何将‘二零零八年’转为‘2008年’?用FST ITN-ZH镜像一键实现

如何将‘二零零八年’转为‘2008年’&#xff1f;用FST ITN-ZH镜像一键实现 在自然语言处理的实际应用中&#xff0c;我们经常遇到一个看似简单却影响深远的问题&#xff1a;如何将口语化或书面化的中文数字、时间、金额等表达转换为标准化的格式&#xff1f;例如&#xff0c;…

作者头像 李华
网站建设 2026/2/11 12:42:38

制造业设备语音监控:FSMN-VAD工业场景部署案例

制造业设备语音监控&#xff1a;FSMN-VAD工业场景部署案例 1. 引言 在智能制造与工业自动化不断深化的背景下&#xff0c;设备运行状态的实时感知正从传统的振动、温度监测向多模态数据融合演进。其中&#xff0c;音频信号作为一种非侵入式、高灵敏度的信息载体&#xff0c;在…

作者头像 李华
网站建设 2026/2/2 3:42:54

Qwen2.5-7B部署指南:多模型协同工作配置方案

Qwen2.5-7B部署指南&#xff1a;多模型协同工作配置方案 1. 引言 随着大语言模型在实际业务场景中的广泛应用&#xff0c;单一模型已难以满足复杂任务的需求。通义千问Qwen2.5系列的发布为开发者提供了从0.5B到720B参数规模的多样化选择&#xff0c;其中 Qwen2.5-7B-Instruct…

作者头像 李华
网站建设 2026/2/7 13:19:47

10分钟部署GLM-ASR:云端GPU小白也能上手

10分钟部署GLM-ASR&#xff1a;云端GPU小白也能上手 你是不是也遇到过这样的问题&#xff1a;手头有一堆老录音&#xff0c;想转成文字却无从下手&#xff1f;尤其是地方戏曲、老人口述这些带有浓重方言的内容&#xff0c;普通语音识别工具根本听不懂。更头疼的是&#xff0c;…

作者头像 李华
网站建设 2026/2/10 20:44:08

小白也能懂的YOLOv13:官方镜像助你30分钟跑通demo

小白也能懂的YOLOv13&#xff1a;官方镜像助你30分钟跑通demo 在自动驾驶感知系统实时识别行人、工业质检设备精准定位缺陷、智能监控平台自动追踪目标的背后&#xff0c;目标检测技术正扮演着“视觉之眼”的核心角色。而在这场AI视觉革命中&#xff0c;YOLO&#xff08;You O…

作者头像 李华