游乐游手机版
首页/AI热点日报/热点详情

打造自己的RAG解析大模型可商用OCR全服务部署文本表格版面

类型:热点整理2026-06-26
还记得吗?在上一篇文章里,我们已经成功地将文本检测、方向分类与文本识别等模型串联起来,构建了一个基础的OCR文本识别服务。不过,仅凭这些能力去处理复杂的PDF文档,显然还远远不够。要想真正实现PDF的全方位解析,尤其是那些包含表格、版面布局混乱的文档,还需要引入更多“重量级”模型——例如表格识别和版

还记得吗?在上一篇文章里,我们已经成功地将文本检测、方向分类与文本识别等模型串联起来,构建了一个基础的OCR文本识别服务。不过,仅凭这些能力去处理复杂的PDF文档,显然还远远不够。要想真正实现PDF的全方位解析,尤其是那些包含表格、版面布局混乱的文档,还需要引入更多“重量级”模型——例如表格识别和版面分析模型。

这一次,我们接着前两篇文章的进度,深入探讨如何将文本、表格、版面这三个模型真正串联并部署在一起。通过这样一套组合拳,系统不仅能读取文字,还能解析复杂的表格及图文混排的版面。做到这一步,OCR系统才算真正具备了商用的底气。

从实战经验来看,这种串联后的文档解析系统能够处理不少棘手场景,例如发片、合同、金融报表等结构复杂、信息密集的文档。它不仅仅局限于传统的文字识别,还能识别数学公式、表格、图表等内容。最关键的是,解析结果可灵活输出为JSON、Markdown、HTML等多种格式,满足不同场景的需求。

将这些模型串联部署好后,用户可以快速搭建出一个完整的OCR文档解析服务。此外,该架构还支持企业自行训练模型、上传部署,甚至进一步封装为云平台的API服务。换句话说,企业完全可以基于自身业务需求定制模型,并将其发布成服务供用户调用——这能极大提升文档处理的效率和业务适配度。

关于Windows环境下如何安装模型的运行环境、如何发布OCR文本识别服务,具体步骤和说明已在之前的文章中详细阐述,这里不再重复。

直接进入正题。

全部模型串联

PaddleOCR实现整套模型串联的方式,是通过PaddleHub Serving来发布整合后的模型包,利用structure_system模块打通整个文档解析流程。整个过程如下:

  • 模型串联:PaddleOCR的structure_system模块将文本检测、方向分类、表格识别和版面分析等模型粘合在一起,形成一个完整的解析系统。简单来说,第一步是文本检测模型定位文档中的文字块位置;接着方向分类模型将这些文字块的方向矫正;然后识别模型逐字提取文字。至于表格和版面,则有专门的模型负责结构和布局的识别。

具体的工作原理,拆解如下:

  • 文本检测模型:定位图像中的文字区域,输出对应的检测框。
  • 方向分类模型:矫正文字检测框的方向,确保字符排列正确。
  • 文本识别模型:从矫正后的框中提取文字,输出识别结果。
  • 表格识别:针对表格内容,模型会分析其结构和单元格坐标,进而提取文本内容及位置关系。
  • 版面识别:版面识别不仅能读取文字,还能理解文档的版面结构,例如哪里是标题、正文段落或图片区域。

版面识别预测的标签

版面识别模型会对文档中的每个词(word)预测一个标签,相同标签的词会聚合在一起,形成一个实体(如标题、正文、页眉等)。该实体的外接框由其所包含的所有词的框合并而成。常用的标签包括:

text
title
figure
figure_caption
table
table_caption
header
footer
reference
equation

可视化结果看起来大致如下(不同颜色代表不同类型的实体,如红色为标题,青色为表格,蓝色为页眉,绿色为脚注):

版面识别可视化结果

表格结构识别

谈及表格识别,首先需要明确表格分为两种:全框表格和半框表格。无论哪种,准确识别的前提都是先定位表格区域,然后分析表格结构(行列关系),最后提取每个单元格内的文本。

基于PaddleHub Serving的服务部署

PaddleHub Serving是PaddleOCR提供的一种部署工具,专门用于快速搭建和发布OCR服务。它模块化、API结构易用,可将PaddleOCR的模型迅速转化为真正的在线服务。在hubserving的部署目录下,包含了文本检测、方向分类、文本识别、以及文本检测+方向分类+文本识别三阶段串联、版面分析、表格识别和PP-Structure等多种服务包。你可以根据实际需求选择对应的服务包进行安装和启动。目录结构大致如下:

deploy/hubserving/
├─ ocr_cls            文本方向分类模块服务包
├─ ocr_det            文本检测模块服务包
├─ ocr_rec            文本识别模块服务包
├─ ocr_system         文本检测+文本方向分类+文本识别串联服务包
├─ structure_layout   版面分析服务包
├─ structure_table    表格识别服务包
├─ structure_system   PP-Structure服务包
├─ kie_ser            关键信息抽取-SER服务包
├─ kie_ser_re         关键信息抽取-SER+RE服务包

每个服务包下都包含3个文件。以PP-Structure服务包为例,目录结构如下:

deploy/hubserving/structure_system/
├─ __init__.py   空文件,必选
├─ config.json   配置文件,可选,启动服务时作为参数传入
├─ module.py     主模块,必选,包含服务的完整逻辑
└─ params.py     参数文件,必选,包含模型路径、前后处理参数等

1. 模型下载

在安装服务模块之前,需要先将推理模型准备好,并放置到正确的路径下。下表列出了默认的模型路径:

模型路径
检测模型./inference/ch_PP-OCRv4_det_infer/
识别模型./inference/ch_PP-OCRv4_rec_infer/
方向分类器./inference/ch_ppocr_mobile_v2.0_cls_infer/
表格识别模型./inference/ch_ppstructure_mobile_v2.0_SLANet_infer/
版面分析模型./inference/picodet_lcnet_x1_0_fgd_layout_cdla_infer/

这些路径可在params.py文件中查看和修改,如果你自行训练并转换好了模型,直接替换路径即可。

2. 安装服务模块

PaddleOCR提供了5种服务模块,其中PP-Structure为全服务模型。在Linux环境下(Windows下请将/替换为\),安装命令如下表:

服务模块命令
全服务串联hub install deploy/hubserving/structure_system

执行安装命令后,看到类似如下输出,即表示安装成功:

[2024-10-10 21:56:43,853] [INFO] - Successfully uninstalled structure_system
[2024-10-10 21:56:44,570] [    INFO] - Successfully installed structure_system-1.0.0

3. 启动服务

接下来,启动全服务模型串联structure_system服务。端口默认8866,并发任务数默认设置为2*cpu_count-1

命令行命令启动(仅支持CPU)

hub serving start --modules Module1==Version1, Module2==Version2, ... --port 8866 --use_multiprocess --workers

参数说明:

参数说明
--modules/-mPaddleHub Serving预安装模型,以'Module==Version'键值对形式列出;不指定Version时默认选择最新版本
--port/-p服务端口,默认为8866
--use_multiprocess是否启用并发方式,默认单进程;推荐多核CPU机器使用,Windows仅支持单进程
--workers并发方式下指定的任务数,默认为2*cpu_count-1

启动全服务串联:

hub serving start -m structure_system

执行后出现以下输出,即表示服务已启动。

4. 请求服务

进入PaddleOCR源码路径,在paddle_env的Python环境下,执行以下命令验证服务是否可用:

python ./tools/test_hubserving.py --server_url=http://127.0.0.1:8866/predict/structure_system --image_dir=./doc/imgs/train_1430.jpg --visualize=true

验证图片如下:

验证图片

执行结果如下:

{'regions': [{'bbox': [178, 161, 769, 214], 'img_idx': 0, 'res': [{'confidence': 0.9866982698440552, 'text': '(二)现任及报告期内离任董事、监事和高级管理人 员的任职情况', 'text_region': [[179.0, 160.0], [773.0, 160.0], [773.0, 188.0], [179.0, 188.0]]}, {'confidence': 0.996711254119873, 'text': '1.', 'text_region': [[179.0, 195.0], [223.0, 195.0], [223.0, 214.0], [179.0, 214.0]]}, {'confidence': 0.9996092319488525, 'text': '在股东单位任职情况', 'text_region': [[213.0, 191.0], [415.0, 191.0], [415.0, 219.0], [213.0, 219.0]]}], 'score': 0.8759905099868774, 'type': 'text'}, {'bbox': [160, 563, 1083, 1523], 'img_idx': 0, 'res': {'cell_bbox': [[...]], 'html': '...
'}, 'score': 0.977480947971344, 'type': 'table'}, ...]}

结果说明:返回结果为一个列表(list),列表中的每一项是一个字典(dict)。每个字典包含以下字段:

字段名称数据类型意义
textstr文本内容
confidencefloat文本识别置信度或角度分类置信度
text_regionlist文本位置坐标
htmlstr表格的HTML字符串
regionslist版面分析+表格识别+OCR的结果,每一项是一个list,包含表示区域坐标的bbox、区域类型的type和区域结果的res

说明:如果需要增加、删除或修改返回字段,可在对应模块的module.py文件中直接修改。

总结

当文本检测、方向分类、文本识别、表格识别和版面识别这几个模型成功串联并发布后,整个系统便能够完整解析PDF、图片等文档中的内容。百度提供的通用OCR模型已能覆盖大部分业务场景对PDF和图片数据的解析需求。返回结果为JSON格式,表格内容以HTML形式展现。这套服务已具备基本的商用能力,可直接承接文档解析业务。如果再结合一个APP应用层,系统的应用范围还能进一步扩展。

更进一步,如果发布SER(结构化实体识别)模型,系统还能实现对发片、证件等特殊文档的关键信息提取,提供更强大的文档解析能力。而该架构最大的优势在于支持自定义模型的发布。用户可根据行业需求对模型进行精调和微调——结合实际业务场景标注数据、训练模型、然后部署上线——从而极大提升行业专用模型的性能和适配度。

总体来看,这样的架构不仅满足了通用的文档解析需求,也为用户提供了极高的灵活性和扩展性,足以应对各种复杂多变的业务场景。

来源:https://www.53ai.com/news/RAG/2024101034561.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。