[paddleocr]PP-StructureV3 产线使用教程

PP-StructureV3 产线使用教程

1. PP-StructureV3 产线介绍

版面解析是一种从文档图像中提取结构化信息的技术,主要用于将复杂的文档版面转换为机器可读的数据格式。这项技术在文档管理、信息提取和数据数字化等领域具有广泛的应用。版面解析通过结合光学字符识别(OCR)、图像处理和机器学习算法,能够识别和提取文档中的文本块、标题、段落、图片、表格以及其他版面元素。此过程通常包括版面分析、元素分析和数据格式化三个主要步骤,最终生成结构化的文档数据,提升数据处理的效率和准确性。 PP-StructureV3 产线在通用版面解析v1产线的基础上,强化了版面区域检测、表格识别、公式识别的能力,增加了图表理解能力和多栏阅读顺序的恢复能力、结果转换 Markdown 文件的能力,在多种文档数据中,表现优异,可以处理较复杂的文档数据。 本产线同时提供了灵活的服务化部署方式,支持在多种硬件上使用多种编程语言调用。不仅如此,本产线也提供了二次开发的能力,您可以基于本产线在您自己的数据集上训练调优,训练后的模型也可以无缝集成。

PP-StructureV3 产线中包含以下6个模块。每个模块均可独立进行训练和推理,并包含多个模型。有关详细信息,请点击相应模块以查看文档。

在本产线中,您可以根据下方的基准测试数据选择使用的模型。

文档图像方向分类模块:

| 模型 | 模型下载链接 | Top-1 Acc(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小(M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| PP-LCNet_x1_0_doc_ori | 推理模型 / 训练模型 | 99.06 | 2.31 / 0.43 | 3.37 / 1.27 | 7 | 基于PP-LCNet_x1_0的文档图像分类模型,含有四个类别,即0度,90度,180度,270度 |

文本图像矫正模块:

模型模型下载链接CER模型存储大小(M)介绍
UVDoc推理模型 / 训练模型0.17930.3 M高精度文本图像矫正模型

版面区域检测模块: * 版面检测模型,包含20个常见的类别:文档标题、段落标题、文本、页码、摘要、目录、参考文献、脚注、页眉、页脚、算法、公式、公式编号、图像、表格、图和表标题(图标题、表格标题和图表标题)、印章、图表、侧栏文本和参考文献内容

| 模型 | 模型下载链接 | mAP(0.5)(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小(M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| PP-DocLayout_plus-L | 推理模型 / 训练模型 | 83.2 | 34.6244 / 10.3945 | 510.57 / - | 126.01 M | 基于RT-DETR-L在包含中英文论文、多栏杂志、报纸、PPT、合同、书本、试卷、研报、古籍、日文文档、竖版文字文档等场景的自建数据集训练的更高精度版面区域定位模型 |
| |

注:以上精度指标的评估集是自建的版面区域检测数据集,包含中英文论文、杂志、报纸、研报、PPT、试卷、课本等 1300 张文档类型图片。 * 文档图像版面子模块检测,包含1个 版面区域 类别,能检测多栏的报纸、杂志的每个子文章的文本区域:

| 模型 | 模型下载链接 | mAP(0.5)(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小(M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| PP-DocBlockLayout | 推理模型 / 训练模型 | 95.9 | 34.6244 / 10.3945 | 510.57 / - | 123.92 M | 基于RT-DETR-L在包含中英文论文、多栏杂志、报纸、PPT、合同、书本、试卷、研报、古籍、日文文档、竖版文字文档等场景的自建数据集训练的文档图像版面子模块检测模型 |
| |

注:以上精度指标的评估集是自建的版面子区域检测数据集,包含中英文论文、杂志、报纸、研报、PPT、试卷、课本等 1000 张文档类型图片。 * 版面检测模型,包含23个常见的类别:文档标题、段落标题、文本、页码、摘要、目录、参考文献、脚注、页眉、页脚、算法、公式、公式编号、图像、图表标题、表格、表格标题、印章、图表标题、图表、页眉图像、页脚图像、侧栏文本

| 模型 | 模型下载链接 | mAP(0.5)(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小(M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| PP-DocLayout-L | 推理模型 / 训练模型 | 90.4 | 34.6244 / 10.3945 | 510.57 / - | 123.76 M | 基于RT-DETR-L在包含中英文论文、杂志、合同、书本、试卷和研报等场景的自建数据集训练的高精度版面区域定位模型 |
| PP-DocLayout-M | 推理模型 / 训练模型 | 75.2 | 13.3259 / 4.8685 | 44.0680 / 44.0680 | 22.578 | 基于PicoDet-L在包含中英文论文、杂志、合同、书本、试卷和研报等场景的自建数据集训练的精度效率平衡的版面区域定位模型 |
| PP-DocLayout-S | 推理模型 / 训练模型 | 70.9 | 8.3008 / 2.3794 | 10.0623 / 9.9296 | 4.834 | 基于PicoDet-S在中英文论文、杂志、合同、书本、试卷和研报等场景上自建数据集训练的高效率版面区域定位模型 |

注:以上精度指标的评估集是自建的版面区域检测数据集,包含中英文论文、报纸、研报和试卷等 500 张文档类型图片。 > ❗ 以上列出的是版面检测模块重点支持的 5个核心模型 ,该模块总共支持 13个全量模型 ,包含多个预定义了不同类别的模型,完整的模型列表如下:👉模型列表详情* 表格版面检测模型

| 模型 | 模型下载链接 | mAP(0.5)(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小(M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| PicoDet_layout_1x_table | 推理模型 / 训练模型 | 97.5 | 8.02 / 3.09 | 23.70 / 20.41 | 7.4 M | 基于PicoDet-1x在自建数据集训练的高效率版面区域定位模型,可定位表格这1类区域 |

  • 3类版面检测模型,包含表格、图像、印章

| 模型 | 模型下载链接 | mAP(0.5)(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小(M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| PicoDet-S_layout_3cls | 推理模型 / 训练模型 | 88.2 | 8.99 / 2.22 | 16.11 / 8.73 | 4.8 | 基于PicoDet-S轻量模型在中英文论文、杂志和研报等场景上自建数据集训练的高效率版面区域定位模型 |
| PicoDet-L_layout_3cls | 推理模型 / 训练模型 | 89.0 | 13.05 / 4.50 | 41.30 / 41.30 | 22.6 | 基于PicoDet-L在中英文论文、杂志和研报等场景上自建数据集训练的效率精度均衡版面区域定位模型 |
| RT-DETR-H_layout_3cls | 推理模型 / 训练模型 | 95.8 | 114.93 / 27.71 | 947.56 / 947.56 | 470.1 | 基于RT-DETR-H在中英文论文、杂志和研报等场景上自建数据集训练的高精度版面区域定位模型 |

  • 5类英文文档区域检测模型,包含文字、标题、表格、图片以及列表

| 模型 | 模型下载链接 | mAP(0.5)(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小(M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| PicoDet_layout_1x | 推理模型 / 训练模型 | 97.8 | 9.03 / 3.10 | 25.82 / 20.70 | 7.4 | 基于PicoDet-1x在PubLayNet数据集训练的高效率英文文档版面区域定位模型 |

  • 17类区域检测模型,包含17个版面常见类别,分别是:段落标题、图片、文本、数字、摘要、内容、图表标题、公式、表格、表格标题、参考文献、文档标题、脚注、页眉、算法、页脚、印章

| 模型 | 模型下载链接 | mAP(0.5)(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小(M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| PicoDet-S_layout_17cls | 推理模型 / 训练模型 | 87.4 | 9.11 / 2.12 | 15.42 / 9.12 | 4.8 | 基于PicoDet-S轻量模型在中英文论文、杂志和研报等场景上自建数据集训练的高效率版面区域定位模型 |
| PicoDet-L_layout_17cls | 推理模型 / 训练模型 | 89.0 | 13.50 / 4.69 | 43.32 / 43.32 | 22.6 | 基于PicoDet-L在中英文论文、杂志和研报等场景上自建数据集训练的效率精度均衡版面区域定位模型 |
| RT-DETR-H_layout_17cls | 推理模型 / 训练模型 | 98.3 | 115.29 / 104.09 | 995.27 / 995.27 | 470.2 | 基于RT-DETR-H在中英文论文、杂志和研报等场景上自建数据集训练的高精度版面区域定位模型 |

表格结构识别模块:

| 模型 | 模型下载链接 | 精度(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小 (M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| SLANeXt_wired | 推理模型 / 训练模型 | 69.65 | – | – | 351M | SLANeXt 系列是百度飞桨视觉团队自研的新一代表格结构识别模型。相较于 SLANet 和 SLANet_plus,SLANeXt 专注于对表格结构进行识别,并且对有线表格(wired)和无线表格(wireless)的识别分别训练了专用的权重,对各类型表格的识别能力都得到了明显提高,特别是对有线表格的识别能力得到了大幅提升。 |
| SLANeXt_wireless | 推理模型 / 训练模型 |

表格分类模块模型:

| 模型 | 模型下载链接 | Top1 Acc(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小 (M) |
|:—😐:—😐:—😐:—😐:—😐:—😐
| PP-LCNet_x1_0_table_cls | 推理模型 / 训练模型 | 94.2 | 2.35 / 0.47 | 4.03 / 1.35 | 6.6M |

表格单元格检测模块模型:

| 模型 | 模型下载链接 | mAP(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小 (M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| RT-DETR-L_wired_table_cell_det | 推理模型 / 训练模型 | 82.7 | 35.00 / 10.45 | 495.51 / 495.51 | 124M | RT-DETR 是第一个实时的端到端目标检测模型。百度飞桨视觉团队基于 RT-DETR-L 作为基础模型,在自建表格单元格检测数据集上完成预训练,实现了对有线表格、无线表格均有较好性能的表格单元格检测。 |
| RT-DETR-L_wireless_table_cell_det | 推理模型 / 训练模型 |

文本检测模块:

| 模型 | 模型下载链接 | 检测Hmean(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小(M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| PP-OCRv5_server_det | 推理模型 / 训练模型 | 83.8 | 89.55 / 70.19 | 371.65 / 371.65 | 84.3 | PP-OCRv5 的服务端文本检测模型,精度更高,适合在性能较好的服务器上部署 |
| PP-OCRv5_mobile_det | 推理模型 / 训练模型 | 79.0 | 8.79 / 3.13 | 51.00 / 28.58 | 4.7 | PP-OCRv5 的移动端文本检测模型,效率更高,适合在端侧设备部署 |
| PP-OCRv4_server_det | 推理模型 / 训练模型 | 69.2 | 83.34 / 80.91 | 442.58 / 442.58 | 109 | PP-OCRv4 的服务端文本检测模型,精度更高,适合在性能较好的服务器上部署 |
| PP-OCRv4_mobile_det | 推理模型 / 训练模型 | 63.8 | 8.79 / 3.13 | 51.00 / 28.58 | 4.7 | PP-OCRv4 的移动端文本检测模型,效率更高,适合在端侧设备部署 |

文本识别模块:

| 模型 | 模型下载链接 | 识别 Avg Accuracy(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小(M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| PP-OCRv5_server_rec | 推理模型 / 训练模型 | 86.38 | 8.45/2.36 | 122.69/122.69 | 81 M | PP-OCRv5_rec 是新一代文本识别模型。该模型致力于以单一模型高效、精准地支持简体中文、繁体中文、英文、日文四种主要语言,以及手写、竖版、拼音、生僻字等复杂文本场景的识别。在保持识别效果的同时,兼顾推理速度和模型鲁棒性,为各种场景下的文档理解提供高效、精准的技术支撑。 |
| PP-OCRv5_mobile_rec | 推理模型 / 训练模型 | 81.29 | 1.46/5.43 | 5.32/91.79 | 16 M |
| PP-OCRv4_server_rec_doc | 推理模型 / 训练模型 | 86.58 | 6.65 / 2.38 | 32.92 / 32.92 | 181 M | PP-OCRv4_server_rec_doc是在PP-OCRv4_server_rec的基础上,在更多中文文档数据和PP-OCR训练数据的混合数据训练而成,增加了部分繁体字、日文、特殊字符的识别能力,可支持识别的字符为1.5万+,除文档相关的文字识别能力提升外,也同时提升了通用文字的识别能力 |
| PP-OCRv4_mobile_rec | 推理模型 / 训练模型 | 83.28 | 4.82 / 1.20 | 16.74 / 4.64 | 88 M | PP-OCRv4的轻量级识别模型,推理效率高,可以部署在包含端侧设备的多种硬件设备中 |
| PP-OCRv4_server_rec | 推理模型 / 训练模型 | 85.19 | 6.58 / 2.43 | 33.17 / 33.17 | 151 M | PP-OCRv4的服务器端模型,推理精度高,可以部署在多种不同的服务器上 |
| en_PP-OCRv4_mobile_rec | 推理模型 / 训练模型 | 70.39 | 4.81 / 0.75 | 16.10 / 5.31 | 66 M | 基于PP-OCRv4识别模型训练得到的超轻量英文识别模型,支持英文、数字识别 |

❗ 以上列出的是文本识别模块重点支持的 6个核心模型 ,该模块总共支持 20个全量模型 ,包含多个多语言文本识别模型,完整的模型列表如下:👉模型列表详情

文本行方向分类模块(可选):

| 模型 | 模型下载链接 | Top-1 Acc(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小(M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| PP-LCNet_x0_25_textline_ori | 推理模型 / 训练模型 | 95.54 | - | - | 0.32 | 基于PP-LCNet_x0_25的文本行分类模型,含有两个类别,即0度,180度 |

公式识别模块:

| 模型 | 模型下载链接 | En-BLEU(%) | Zh-BLEU(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小 (M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| UniMERNet | 推理模型 / 训练模型 | 85.91 | 43.50 | 2266.96/- | -/- | 1.53 G | UniMERNet是由上海AI Lab研发的一款公式识别模型。该模型采用Donut Swin作为编码器,MBartDecoder作为解码器,并通过在包含简单公式、复杂公式、扫描捕捉公式和手写公式在内的一百万数据集上进行训练,大幅提升了模型对真实场景公式的识别准确率 |
| PP-FormulaNet-S | 推理模型 / 训练模型 | 87.00 | 45.71 | 202.25/- | -/- | 224 M | PP-FormulaNet 是由百度飞桨视觉团队开发的一款先进的公式识别模型,支持5万个常见LateX源码词汇的识别。PP-FormulaNet-S 版本采用了 PP-HGNetV2-B4 作为其骨干网络,通过并行掩码和模型蒸馏等技术,大幅提升了模型的推理速度,同时保持了较高的识别精度,适用于简单印刷公式、跨行简单印刷公式等场景。而 PP-FormulaNet-L 版本则基于 Vary_VIT_B 作为骨干网络,并在大规模公式数据集上进行了深入训练,在复杂公式的识别方面,相较于PP-FormulaNet-S表现出显著的提升,适用于简单印刷公式、复杂印刷公式、手写公式等场景。 |
| PP-FormulaNet-L | 推理模型 / 训练模型 | 90.36 | 45.78 | 1976.52/- | -/- | 695 M |
| PP-FormulaNet_plus-S | 推理模型 / 训练模型 | 88.71 | 53.32 | 191.69/- | -/- | 248 M | PP-FormulaNet_plus 是百度飞桨视觉团队在 PP-FormulaNet 的基础上开发的增强版公式识别模型。与原版相比,PP-FormulaNet_plus 在训练中使用了更为丰富的公式数据集,包括中文学位论文、专业书籍、教材试卷以及数学期刊等多种来源。这一扩展显著提升了模型的识别能力。 其中,PP-FormulaNet_plus-M 和 PP-FormulaNet_plus-L 模型新增了对中文公式的支持,并将公式的最大预测 token 数从 1024 扩大至 2560,大幅提升了对复杂公式的识别性能。同时,PP-FormulaNet_plus-S 模型则专注于增强英文公式的识别能力。通过这些改进,PP-FormulaNet_plus 系列模型在处理复杂多样的公式识别任务时表现更加出色。 |
| PP-FormulaNet_plus-M | 推理模型 / 训练模型 | 91.45 | 89.76 | 1301.56/- | -/- | 592 M |
| PP-FormulaNet_plus-L | 推理模型 / 训练模型 | 92.22 | 90.64 | 1745.25/- | -/- | 698 M |
| LaTeX_OCR_rec | 推理模型 / 训练模型 | 74.55 | 39.96 | 1244.61/- | -/- | 99 M | LaTeX-OCR是一种基于自回归大模型的公式识别算法,通过采用 Hybrid ViT 作为骨干网络,transformer作为解码器,显著提升了公式识别的准确性。 |

印章文本检测模块:

| 模型 | 模型下载链接 | 检测Hmean(%) | GPU推理耗时(ms)
[常规模式 / 高性能模式] | CPU推理耗时(ms)
[常规模式 / 高性能模式] | 模型存储大小(M) | 介绍 |
|:—😐:—😐:—😐:—😐:—😐:—😐:—😐
| PP-OCRv4_server_seal_det | 推理模型 / 训练模型 | 98.21 | 74.75 / 67.72 | 382.55 / 382.55 | 109 | PP-OCRv4的服务端印章文本检测模型,精度更高,适合在较好的服务器上部署 |
| PP-OCRv4_mobile_seal_det | 推理模型 / 训练模型 | 96.47 | 7.82 / 3.09 | 48.28 / 23.97 | 4.6 | PP-OCRv4的移动端印章文本检测模型,效率更高,适合在端侧部署 |

图表解析模块:

模型模型下载链接模型参数规模(B)模型存储大小(GB)模型分数介绍
PP-Chart2Table推理模型0.581.4PP-Chart2Table是飞桨团队自研的一款专注于图表解析的多模态模型,在中英文图表解析任务中展现出卓越性能。团队采用精心设计的数据生成策略,构建了近70万条高质量的图表解析多模态数据集,全面覆盖饼图、柱状图、堆叠面积图等常见图表类型及各类应用场景。同时设计了二阶段训练方法,结合大模型蒸馏实现对海量无标注OOD数据的充分利用。在内部业务的中英文场景测试中,PP-Chart2Table不仅达到同参数量级模型中的SOTA水平,更在关键场景中实现了与7B参数量级VLM模型相当的精度。

测试环境说明:

  • 性能测试环境

    • 测试数据集:

      • 文档图像方向分类模型:自建的内部数据集,覆盖证件和文档等多个场景,包含 1000 张图片。

      • 文本图像矫正模型: DocUNet

      • 版面区域检测模型:PaddleOCR 自建的版面区域分析数据集,包含中英文论文、杂志和研报等常见的 1w 张文档类型图片。

      • 表格结构识别模型:PaddleX 内部自建英文表格识别数据集。

      • 文本检测模型:PaddleOCR 自建的中文数据集,覆盖街景、网图、文档、手写多个场景,其中检测包含 500 张图片。

      • 中文识别模型: PaddleOCR 自建的中文数据集,覆盖街景、网图、文档、手写多个场景,其中文本识别包含 1.1w 张图片。

      • ch_SVTRv2_rec: PaddleOCR算法模型挑战赛 - 赛题一:OCR端到端识别任务 A榜评估集。

      • ch_RepSVTR_rec: PaddleOCR算法模型挑战赛 - 赛题一:OCR端到端识别任务 B榜评估集。

      • 英文识别模型:自建的内部英文数据集。

      • 多语言识别模型:自建的内部多语种数据集。

      • 文本行方向分类模型:自建的内部数据集,覆盖证件和文档等多个场景,包含 1000 张图片。

      • 印章文本检测模型:自建的内部数据集,包含500张圆形印章图像。

    • 硬件配置:

      • GPU:NVIDIA Tesla T4

      • CPU:Intel Xeon Gold 6271C @ 2.60GHz

      • 其他环境:Ubuntu 20.04 / cuDNN 8.6 / TensorRT 8.5.2.2

  • 推理模式说明

模式GPU配置CPU配置加速技术组合
常规模式FP32精度 / 无TRT加速FP32精度 / 8线程PaddleInference
高性能模式选择先验精度类型和加速策略的最优组合FP32精度 / 8线程选择先验最优后端(Paddle/OpenVINO/TRT等)

如果您更注重模型的精度,请选择精度较高的模型;如果您更在意模型的推理速度,请选择推理速度较快的模型;如果您关注模型的存储大小,请选择存储体积较小的模型。

2. 快速开始

在本地使用 PP-StructureV3 产线前,请确保您已经按照 安装教程 完成了wheel包安装。安装完成后,可以在本地使用命令行体验或 Python 集成。

2.1 命令行方式体验

一行命令即可快速体验 PP-StructureV3 产线效果:

paddleocr pp_structurev3 -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/pp_structure_v3_demo.png
 
# 通过 --use_doc_orientation_classify 指定是否使用文档方向分类模型
paddleocr pp_structurev3 -i ./pp_structure_v3_demo.png --use_doc_orientation_classify True
 
# 通过 --use_doc_unwarping 指定是否使用文本图像矫正模块
paddleocr pp_structurev3 -i ./pp_structure_v3_demo.png --use_doc_unwarping True
 
# 通过 --use_textline_orientation 指定是否使用文本行方向分类模型
paddleocr pp_structurev3 -i ./pp_structure_v3_demo.png --use_textline_orientation False
 
# 通过 --device 指定模型推理时使用 GPU
paddleocr pp_structurev3 -i ./pp_structure_v3_demo.png --device gpu

命令行支持更多参数设置,点击展开以查看命令行参数的详细说明


-
-
-

-
-
-

-
-
-
-

-
-
-

-
-

-
-

-
-

-
-

-
-

-
-

-
-

-
-

-
-

-
-

-
-

-
-

-
-
-
-
-
-
-

运行结果会被打印到终端上,默认配置的 PP-StructureV3 产线的运行结果如下:

👉点击展开


运行结果参数说明可以参考 2.2 Python脚本方式集成 中的结果解释。

注: 由于产线的默认模型较大,推理速度可能较慢,您可以参考第一节的模型列表,替换推理速度更快的模型。

2.2 Python脚本方式集成

命令行方式是为了快速体验查看效果,一般来说,在项目中,往往需要通过代码集成,您可以通过几行代码即可完成产线的快速推理,推理代码如下:

from paddleocr import PPStructureV3
 
pipeline = PPStructureV3()
# ocr = PPStructureV3(use_doc_orientation_classify=True) # 通过 use_doc_orientation_classify 指定是否使用文档方向分类模型
# ocr = PPStructureV3(use_doc_unwarping=True) # 通过 use_doc_unwarping 指定是否使用文本图像矫正模块
# ocr = PPStructureV3(use_textline_orientation=True) # 通过 use_textline_orientation 指定是否使用文本行方向分类模型
# ocr = PPStructureV3(device="gpu") # 通过 device 指定模型推理时使用 GPU
output = pipeline.predict("./pp_structure_v3_demo.png")
for res in output:
    res.print() ## 打印预测的结构化输出
    res.save_to_json(save_path="output") ## 保存当前图像的结构化json结果
    res.save_to_markdown(save_path="output") ## 保存当前图像的markdown格式的结果

如果是PDF文件,会将 PDF 的每一页单独处理,每一页的 Markdown 文件也会对应单独的结果。如果希望整个 PDF 文件转换为 Markdown 文件,建议使用以下的方式运行:

from pathlib import Path
from paddleocr import PPStructureV3
 
input_file = "./your_pdf_file.pdf"
output_path = Path("./output")
 
pipeline = PPStructureV3()
output = pipeline.predict("./pp_structure_v3_demo.png")
 
markdown_list = []
markdown_images = []
 
for res in output:
    md_info = res.markdown
    markdown_list.append(md_info)
    markdown_images.append(md_info.get("markdown_images", {}))
 
markdown_texts = pipeline.concatenate_markdown_pages(markdown_list)
 
mkd_file_path = output_path / f"{Path(input_file).stem}.md"
mkd_file_path.parent.mkdir(parents=True, exist_ok=True)
 
with open(mkd_file_path, "w", encoding="utf-8") as f:
    f.write(markdown_texts)
 
for item in markdown_images:
    if item:
        for path, image in item.items():
            file_path = output_path / path
            file_path.parent.mkdir(parents=True, exist_ok=True)
            image.save(file_path)

注:

  • PP-StructureV3 产线使用的默认文本识别模型为 中英文识别模型 ,对于纯英文的识别能力有限,对于全英文场景,您可以设置 text_recognition_model_name 参数为 en_PP-OCRv4_mobile_rec 等英文识别模型以取得更好的识别效果。对应其他语言场景,也可以参考前文的模型列表,选择对应的语言识别模型进行替换。

  • 在示例代码中, use_doc_orientation_classifyuse_doc_unwarpinguse_textline_orientation 参数默认均设置为 False ,分别表示关闭文档方向分类、文本图像矫正、文本行方向分类功能,如果需要使用这些功能,可以手动设置为 True

在上述 Python 脚本中,执行了如下几个步骤:

(1)实例化 PPStructureV3 实例化产线对象,具体参数说明如下:

参数参数说明参数类型默认值
layout_detection_model_name版面区域检测的模型名称。如果设置为 None ,将会使用产线默认模型。strNone
layout_detection_model_dir版面区域检测模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
layout_threshold版面模型得分阈值。
- float0-1 之间的任意浮点数;
- dict{0:0.1} key为类别ID,value为该类别的阈值;
- None :如果设置为 None , 将默认使用产线初始化的该参数值,初始化为 0.5
`floatdict`
layout_nms版面区域检测模型是否使用NMS后处理。boolNone
layout_unclip_ratio版面区域检测模型检测框的扩张系数。
- float :任意大于 0 浮点数;
- Tuple[float,float] :在横纵两个方向各自的扩张系数;
- 字典 , 字典的key为 int 类型,代表 cls_id , value为 tuple 类型,如 {0: (1.1, 2.0)} , 表示将模型输出的第0类别检测框中心不变,宽度扩张1.1倍,高度扩张2.0倍
- None :如果设置为 None , 将默认使用产线初始化的该参数值,初始化为 1.0
`floatTuple[float,float]
layout_merge_bboxes_mode版面区域检测的重叠框过滤方式。
- strlargesmall , union ,分别表示重叠框过滤时选择保留大框,小框还是同时保留
- dict , 字典的key为 int 类型,代表 cls_id , value为 str 类型, 如 {0: "large", 2: "small"} , 表示对第0类别检测框使用large模式,对第2类别检测框使用small模式
- None :如果设置为 None , 将默认使用产线初始化的该参数值,初始化为 large
`strdict`
chart_recognition_model_name图表解析的模型名称。如果设置为 None ,将会使用产线默认模型。strNone
chart_recognition_model_dir图表解析模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
chart_recognition_batch_size图表解析模型的批处理大小。如果设置为 None ,将默认设置批处理大小为 1intNone
region_detection_model_name文档图像版面子模块检测的模型名称。如果设置为 None ,将会使用产线默认模型。strNone
region_detection_model_dir文档图像版面子模块检测模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
doc_orientation_classify_model_name文档方向分类模型的名称。如果设置为 None ,将会使用产线默认模型。strNone
doc_orientation_classify_model_dir文档方向分类模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
doc_unwarping_model_name文本图像矫正模型的名称。如果设置为 None ,将会使用产线默认模型。strNone
doc_unwarping_model_dir文本图像矫正模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
text_detection_model_name文本检测模型的名称。如果设置为 None ,将会使用产线默认模型。strNone
text_detection_model_dir文本检测模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
text_det_limit_side_len文本检测的最大边长度限制。
- int :大于 0 的任意整数;
- None :如果设置为 None , 将默认使用产线初始化的该参数值,初始化为 960
intNone
text_det_limit_type
- str :支持 minmaxmin 表示保证图像最短边不小于 det_limit_side_lenmax 表示保证图像最长边不大于 limit_side_len
- None :如果设置为 None , 将默认使用产线初始化的该参数值,初始化为 max
strNone
text_det_thresh检测像素阈值,输出的概率图中,得分大于该阈值的像素点才会被认为是文字像素点。
- float :大于 0 的任意浮点数
- None :如果设置为 None , 将默认使用产线初始化的该参数值 0.3
floatNone
text_det_box_thresh检测框阈值,检测结果边框内,所有像素点的平均得分大于该阈值时,该结果会被认为是文字区域。
- float :大于 0 的任意浮点数
- None :如果设置为 None , 将默认使用产线初始化的该参数值 0.6
floatNone
text_det_unclip_ratio文本检测扩张系数,使用该方法对文字区域进行扩张,该值越大,扩张的面积越大。
- float :大于 0 的任意浮点数
- None :如果设置为 None , 将默认使用产线初始化的该参数值 2.0
floatNone
textline_orientation_model_name文本行方向模型的名称。如果设置为 None ,将会使用产线默认模型。strNone
textline_orientation_model_dir文本行方向模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
textline_orientation_batch_size文本行方向模型的批处理大小。如果设置为 None ,将默认设置批处理大小为 1intNone
text_recognition_model_name文本识别模型的名称。如果设置为 None ,将会使用产线默认模型。strNone
text_recognition_model_dir文本识别模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
text_recognition_batch_size文本识别模型的批处理大小。如果设置为 None ,将默认设置批处理大小为 1intNone
text_rec_score_thresh文本识别阈值,得分大于该阈值的文本结果会被保留。
- float :大于 0 的任意浮点数
- None :如果设置为 None , 将默认使用产线初始化的该参数值 0.0 。即不设阈值
floatNone
table_classification_model_name表格分类模型的名称。如果设置为 None ,将会使用产线默认模型。strNone
table_classification_model_dir表格分类模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
wired_table_structure_recognition_model_name有线表格结构识别模型的名称。如果设置为 None ,将会使用产线默认模型。strNone
wired_table_structure_recognition_model_dir有线表格结构识别模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
wireless_table_structure_recognition_model_name无线表格结构识别模型的名称。如果设置为 None ,将会使用产线默认模型。strNone
wireless_table_structure_recognition_model_dir无线表格结构识别模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
wired_table_cells_detection_model_name有线表格单元格检测模型的名称。如果设置为 None ,将会使用产线默认模型。strNone
wired_table_cells_detection_model_dir有线表格单元格检测模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
wireless_table_cells_detection_model_name无线表格单元格检测模型的名称。如果设置为 None ,将会使用产线默认模型。strNone
wireless_table_cells_detection_model_dir无线表格单元格检测模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
seal_text_detection_model_name印章文本检测模型的名称。如果设置为 None ,将会使用产线默认模型。strNone
seal_text_detection_model_dir印章文本检测模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
seal_det_limit_side_len印章文本检测的图像边长限制。
- int :大于 0 的任意整数;
- None :如果设置为 None , 将默认使用产线初始化的该参数值,初始化为 736
intNone
seal_det_limit_type印章文本检测的图像边长限制类型。
- str :支持 minmaxmin 表示保证图像最短边不小于 det_limit_side_lenmax 表示保证图像最长边不大于 limit_side_len
- None :如果设置为 None , 将默认使用产线初始化的该参数值,初始化为 min
strNone
seal_det_thresh检测像素阈值,输出的概率图中,得分大于该阈值的像素点才会被认为是文字像素点。
- float :大于 0 的任意浮点数
- None :如果设置为 None , 将默认使用产线初始化的该参数值 0.2
floatNone
seal_det_box_thresh检测框阈值,检测结果边框内,所有像素点的平均得分大于该阈值时,该结果会被认为是文字区域。
- float :大于 0 的任意浮点数
- None :如果设置为 None , 将默认使用产线初始化的该参数值 0.6
floatNone
seal_det_unclip_ratio印章文本检测扩张系数,使用该方法对文字区域进行扩张,该值越大,扩张的面积越大。
- float :大于 0 的任意浮点数
- None :如果设置为 None , 将默认使用产线初始化的该参数值 0.5
floatNone
seal_text_recognition_model_name印章文本识别模型的名称。如果设置为 None ,将会使用产线默认模型。strNone
seal_text_recognition_model_dir印章文本识别模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
seal_text_recognition_batch_size印章文本识别模型的批处理大小。如果设置为 None ,将默认设置批处理大小为 1intNone
seal_rec_score_thresh印章文本识别阈值,得分大于该阈值的文本结果会被保留。
- float :大于 0 的任意浮点数
- None :如果设置为 None , 将默认使用产线初始化的该参数值 0.0 。即不设阈值
floatNone
formula_recognition_model_name公式识别模型的名称。如果设置为 None ,将会使用产线默认模型。strNone
formula_recognition_model_dir公式识别模型的目录路径。如果设置为 None ,将会下载官方模型。strNone
formula_recognition_batch_size公式识别模型的批处理大小。如果设置为 None ,将默认设置批处理大小为 1intNone
use_doc_orientation_classify是否加载文档方向分类模块。如果设置为 None ,将默认使用产线初始化的该参数值,初始化为 TrueboolNone
use_doc_unwarping是否加载文本图像矫正模块。如果设置为 None ,将默认使用产线初始化的该参数值,初始化为 TrueboolNone
use_seal_recognition是否加载印章识别子产线。如果设置为 None ,将默认使用产线初始化的该参数值,初始化为 TrueboolNone
use_table_recognition是否加载表格识别子产线。如果设置为 None ,将默认使用产线初始化的该参数值,初始化为 TrueboolNone
use_formula_recognition是否加载公式识别子产线。如果设置为 None ,将默认使用产线初始化的该参数值,初始化为 TrueboolNone
use_chart_recognition是否加载图表解析模型。如果设置为 None ,将默认使用产线初始化的该参数值,初始化为 TrueboolNone
use_region_detection是否加载文档图像版面子模块检测模型。如果设置为 None ,将默认使用产线初始化的该参数值,初始化为 TrueboolNone
device用于推理的设备。支持指定具体卡号。
- CPU :如 cpu 表示使用 CPU 进行推理;
- GPU :如 gpu:0 表示使用第 1 块 GPU 进行推理;
- NPU :如 npu:0 表示使用第 1 块 NPU 进行推理;
- XPU :如 xpu:0 表示使用第 1 块 XPU 进行推理;
- MLU :如 mlu:0 表示使用第 1 块 MLU 进行推理;
- DCU :如 dcu:0 表示使用第 1 块 DCU 进行推理;
- None :如果设置为 None , 将默认使用产线初始化的该参数值,初始化时,会优先使用本地的 GPU 0号设备,如果没有,则使用 CPU 设备;
strNone
enable_hpi是否启用高性能推理。boolFalse
use_tensorrt是否使用 TensorRT 进行推理加速。boolFalse
min_subgraph_size最小子图大小,用于优化模型子图的计算。int3
precision计算精度,如 fp32、fp16。strfp32
enable_mkldnn是否启用 MKL-DNN 加速库。如果设置为 None , 将默认启用。boolNone
cpu_threads在 CPU 上进行推理时使用的线程数。int8
paddlex_configPaddleX产线配置文件路径。strNone

(2)调用 PP-StructureV3 产线对象的 predict() 方法进行推理预测,该方法会返回一个结果列表。另外,产线还提供了 predict_iter() 方法。两者在参数接受和结果返回方面是完全一致的,区别在于 predict_iter() 返回的是一个 generator ,能够逐步处理和获取预测结果,适合处理大型数据集或希望节省内存的场景。可以根据实际需求选择使用这两种方法中的任意一种。以下是 predict() 方法的参数及其说明:

参数参数说明参数类型默认值
input待预测数据,支持多种输入类型,必填。
- Python Var :如 numpy.ndarray 表示的图像数据
- str :如图像文件或者PDF文件的本地路径: /root/data/img.jpg如URL链接 ,如图像文件或PDF文件的网络URL: 示例如本地目录 ,该目录下需包含待预测图像,如本地路径: /root/data/ (当前不支持目录中包含PDF文件的预测,PDF文件需要指定到具体文件路径)
- List :列表元素需为上述类型数据,如 [numpy.ndarray, numpy.ndarray]["/root/data/img1.jpg", "/root/data/img2.jpg"]["/root/data1", "/root/data2"]
`Python Varstr
device与实例化时的参数相同。strNone
use_doc_orientation_classify是否在推理时使用文档方向分类模块。boolNone
use_doc_unwarping是否在推理时使用文本图像矫正模块。boolNone
use_textline_orientation是否在推理时使用文本行方向分类模块。boolNone
use_seal_recognition是否在推理时使用印章识别子产线。boolNone
use_table_recognition是否在推理时使用表格识别子产线。boolNone
use_formula_recognition是否在推理时使用公式识别子产线。boolNone
layout_threshold与实例化时的参数相同。`floatdict`
layout_nms与实例化时的参数相同。boolNone
layout_unclip_ratio与实例化时的参数相同。`floatTuple[float,float]
layout_merge_bboxes_mode与实例化时的参数相同。`strdict`
text_det_limit_side_len与实例化时的参数相同。intNone
text_det_limit_type与实例化时的参数相同。strNone
text_det_thresh与实例化时的参数相同。floatNone
text_det_box_thresh与实例化时的参数相同。floatNone
text_det_unclip_ratio与实例化时的参数相同。floatNone
text_rec_score_thresh与实例化时的参数相同。floatNone
seal_det_limit_side_len与实例化时的参数相同。intNone
seal_det_limit_type与实例化时的参数相同。strNone
seal_det_thresh与实例化时的参数相同。floatNone
seal_det_box_thresh与实例化时的参数相同。floatNone
seal_det_unclip_ratio与实例化时的参数相同。floatNone
seal_rec_score_thresh与实例化时的参数相同。floatNone

(3)对预测结果进行处理:每个样本的预测结果均为对应的Result对象,且支持打印、保存为图片、保存为 json 文件的操作:

方法方法说明参数参数类型参数说明默认值
print()打印结果到终端format_jsonbool是否对输出内容进行使用 JSON 缩进格式化True
indentint指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_jsonTrue 时有效4
ensure_asciibool控制是否将非 ASCII 字符转义为 Unicode 。设置为 True 时,所有非 ASCII 字符将被转义; False 则保留原始字符,仅当 format_jsonTrue 时有效False
save_to_json()将结果保存为json格式的文件save_pathstr保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致
indentint指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_jsonTrue 时有效4
ensure_asciibool控制是否将非 ASCII 字符转义为 Unicode 。设置为 True 时,所有非 ASCII 字符将被转义; False 则保留原始字符,仅当 format_jsonTrue 时有效False
save_to_img()将中间各个模块的可视化图像保存在png格式的图像save_pathstr保存的文件路径,支持目录或文件路径
save_to_markdown()将图像或者PDF文件中的每一页分别保存为markdown格式的文件save_pathstr保存的文件路径,支持目录或文件路径
save_to_html()将文件中的表格保存为html格式的文件save_pathstr保存的文件路径,支持目录或文件路径
save_to_xlsx()将文件中的表格保存为xlsx格式的文件save_pathstr保存的文件路径,支持目录或文件路径
concatenate_markdown_pages()将多页Markdown内容拼接为单一文档markdown_listlist包含每一页Markdown数据的列表返回处理后的Markdown文本和图像列表
  • 调用print() 方法会将结果打印到终端,打印到终端的内容解释如下: - input_path: (str) 待预测图像或者PDF的输入路径 - page_index: (Union[int, None]) 如果输入是PDF文件,则表示当前是PDF的第几页,否则为 None - model_settings: (Dict[str, bool]) 配置产线所需的模型参数 - use_doc_preprocessor: (bool) 控制是否启用文档预处理子产线 - use_seal_recognition: (bool) 控制是否启用印章识别子产线 - use_table_recognition: (bool) 控制是否启用表格识别子产线 - use_formula_recognition: (bool) 控制是否启用公式识别子产线 - doc_preprocessor_res: (Dict[str, Union[List[float], str]]) 文档预处理结果字典,仅当use_doc_preprocessor=True时存在 - input_path: (str) 文档预处理子产线接受的图像路径,当输入为numpy.ndarray时,保存为None,此处为None - page_index: None,此处的输入为numpy.ndarray,所以值为None - model_settings: (Dict[str, bool]) 文档预处理子产线的模型配置参数 - use_doc_orientation_classify: (bool) 控制是否启用文档图像方向分类子模块 - use_doc_unwarping: (bool) 控制是否启用文本图像扭曲矫正子模块 - angle: (int) 文档图像方向分类子模块的预测结果,启用时返回实际角度值 - parsing_res_list: (List[Dict]) 解析结果的列表,每个元素为一个字典,列表顺序为解析后的阅读顺序。 - block_bbox: (np.ndarray) 版面区域的边界框。 - block_label: (str) 版面区域的标签,例如text, table等。 - block_content: (str) 内容为版面区域内的内容。 - seg_start_flag: (bool) 标识该版面区域是否是段落的开始。 - seg_end_flag: (bool) 标识该版面区域是否是段落的结束。 - sub_label: (str) 版面区域的子标签,例如text的子标签可能为title_text。 - sub_index: (int) 版面区域的子索引,用于恢复Markdown。 - index: (int) 版面区域的索引,用于显示版面排序结果。 - overall_ocr_res: (Dict[str, Union[List[str], List[float], numpy.ndarray]]) 全局 OCR 结果的字典 - input_path: (Union[str, None]) 图像OCR子产线接受的图像路径,当输入为numpy.ndarray时,保存为None - page_index: None,此处的输入为numpy.ndarray,所以值为None - model_settings: (Dict) OCR子产线的模型配置参数 - dt_polys: (List[numpy.ndarray]) 文本检测的多边形框列表。每个检测框由4个顶点坐标构成的numpy数组表示,数组shape为(4, 2),数据类型为int16 - dt_scores: (List[float]) 文本检测框的置信度列表 - text_det_params: (Dict[str, Dict[str, int, float]]) 文本检测模块的配置参数 - limit_side_len: (int) 图像预处理时的边长限制值 - limit_type: (str) 边长限制的处理方式 - thresh: (float) 文本像素分类的置信度阈值 - box_thresh: (float) 文本检测框的置信度阈值 - unclip_ratio: (float) 文本检测框的膨胀系数 - text_type: (str) 文本检测的类型,当前固定为"general" - text_type: (str) 文本检测的类型,当前固定为"general" - textline_orientation_angles: (List[int]) 文本行方向分类的预测结果。启用时返回实际角度值(如[0,0,1] - text_rec_score_thresh: (float) 文本识别结果的过滤阈值 - rec_texts: (List[str]) 文本识别结果列表,仅包含置信度超过text_rec_score_thresh的文本 - rec_scores: (List[float]) 文本识别的置信度列表,已按text_rec_score_thresh过滤 - rec_polys: (List[numpy.ndarray]) 经过置信度过滤的文本检测框列表,格式同dt_polys - formula_res_list: (List[Dict[str, Union[numpy.ndarray, List[float], str]]]) 公式识别结果列表,每个元素为一个字典 - rec_formula: (str) 公式识别结果 - rec_polys: (numpy.ndarray) 公式检测框,shape为(4, 2),dtype为int16 - formula_region_id: (int) 公式所在的区域编号 - seal_res_list: (List[Dict[str, Union[numpy.ndarray, List[float], str]]]) 印章识别结果列表,每个元素为一个字典 - input_path: (str) 印章图像的输入路径 - page_index: None,此处的输入为numpy.ndarray,所以值为None - model_settings: (Dict) 印章识别子产线的模型配置参数 - dt_polys: (List[numpy.ndarray]) 印章检测框列表,格式同dt_polys - text_det_params: (Dict[str, Dict[str, int, float]]) 印章检测模块的配置参数, 具体参数含义同上 - text_type: (str) 印章检测的类型,当前固定为"seal" - text_rec_score_thresh: (float) 印章识别结果的过滤阈值 - rec_texts: (List[str]) 印章识别结果列表,仅包含置信度超过text_rec_score_thresh的文本 - rec_scores: (List[float]) 印章识别的置信度列表,已按text_rec_score_thresh过滤 - rec_polys: (List[numpy.ndarray]) 经过置信度过滤的印章检测框列表,格式同dt_polys - rec_boxes: (numpy.ndarray) 检测框的矩形边界框数组,shape为(n, 4),dtype为int16。每一行表示一个矩形 - table_res_list: (List[Dict[str, Union[numpy.ndarray, List[float], str]]]) 表格识别结果列表,每个元素为一个字典 - cell_box_list: (List[numpy.ndarray]) 表格单元格的边界框列表 - pred_html: (str) 表格的HTML格式字符串 - table_ocr_pred: (dict) 表格的OCR识别结果 - rec_polys: (List[numpy.ndarray]) 单元格的检测框列表 - rec_texts: (List[str]) 单元格的识别结果 - rec_scores: (List[float]) 单元格的识别置信度 - rec_boxes: (numpy.ndarray) 检测框的矩形边界框数组,shape为(n, 4),dtype为int16。每一行表示一个矩形 - 调用save_to_json() 方法会将上述内容保存到指定的 save_path 中,如果指定为目录,则保存的路径为save_path/{your_img_basename}_res.json,如果指定为文件,则直接保存到该文件中。由于 json 文件不支持保存numpy数组,因此会将其中的 numpy.array 类型转换为列表形式。 - 调用save_to_img() 方法会将可视化结果保存到指定的 save_path 中,如果指定为目录,则会将版面区域检测可视化图像、全局OCR可视化图像、版面阅读顺序可视化图像等内容保存,如果指定为文件,则直接保存到该文件中。(产线通常包含较多结果图片,不建议直接指定为具体的文件路径,否则多张图会被覆盖,仅保留最后一张图) - 调用save_to_markdown() 方法会将转化后的 Markdown 文件保存到指定的 save_path 中,保存的文件路径为save_path/{your_img_basename}.md,如果输入是 PDF 文件,建议直接指定目录,否责多个 markdown 文件会被覆盖。 - 调用 concatenate_markdown_pages() 方法将 PP-StructureV3 pipeline 输出的多页Markdown内容markdown_list合并为单个完整文档,并返回合并后的Markdown内容。 此外,也支持通过属性获取带结果的可视化图像和预测结果,具体如下:
属性属性说明
json获取预测的 json 格式的结果
img获取格式为 dict 的可视化图像
markdown获取格式为 dict 的 markdown 结果
  • json 属性获取的预测结果为字典类型的数据,相关内容与调用 save_to_json() 方法保存的内容一致。 - img 属性返回的预测结果是一个字典类型的数据。其中,键分别为 layout_det_resoverall_ocr_restext_paragraphs_ocr_resformula_res_region1table_cell_imgseal_res_region1,对应的值是 Image.Image 对象:分别用于显示版面区域检测、OCR、OCR文本段落、公式、表格和印章结果的可视化图像。如果没有使用可选模块,则字典中只包含 layout_det_res。 - markdown 属性返回的预测结果是一个字典类型的数据。其中,键分别为 markdown_textsmarkdown_imagespage_continuation_flags,对应的值分别是 markdown 文本,在 Markdown 中显示的图像(Image.Image 对象)和用于标识当前页面第一个元素是否为段开始以及最后一个元素是否为段结束的bool元组。

3. 开发集成/部署

如果产线可以达到您对产线推理速度和精度的要求,您可以直接进行开发集成/部署。

若您需要将产线直接应用在您的Python项目中,可以参考 2.2 Python脚本方式 中的示例代码。

此外,PaddleOCR 也提供了其他两种部署方式,详细说明如下:

🚀 高性能推理:在实际生产环境中,许多应用对部署策略的性能指标(尤其是响应速度)有着较严苛的标准,以确保系统的高效运行与用户体验的流畅性。为此,PaddleOCR 提供高性能推理功能,旨在对模型推理及前后处理进行深度性能优化,实现端到端流程的显著提速,详细的高性能推理流程请参考 高性能推理

☁️ 服务化部署:服务化部署是实际生产环境中常见的一种部署形式。通过将推理功能封装为服务,客户端可以通过网络请求来访问这些服务,以获取推理结果。详细的产线服务化部署流程请参考 服务化部署

以下是基础服务化部署的API参考与多语言服务调用示例:

API参考

对于服务提供的主要操作:

  • HTTP请求方法为POST。

  • 请求体和响应体均为JSON数据(JSON对象)。

  • 当请求处理成功时,响应状态码为 200 ,响应体的属性如下:

名称类型含义
logIdstring请求的UUID。
errorCodeinteger错误码。固定为 0
errorMsgstring错误说明。固定为 "Success"
resultobject操作结果。
  • 当请求处理未成功时,响应体的属性如下:
名称类型含义
logIdstring请求的UUID。
errorCodeinteger错误码。与响应状态码相同。
errorMsgstring错误说明。

服务提供的主要操作如下:

  • infer

进行版面解析。

POST /layout-parsing

  • 请求体的属性如下:
名称类型含义是否必填
filestring服务器可访问的图像文件或PDF文件的URL,或上述类型文件内容的Base64编码结果。默认对于超过10页的PDF文件,只有前10页的内容会被处理。
要解除页数限制,请在产线配置文件中添加以下配置:```cobol
Serving:
extra:
max_num_input_imgs: null
| `fileType`  | `integer` | `null`  | 文件类型。 `0` 表示PDF文件, `1` 表示图像文件。若请求体无此属性,则将根据URL推断文件类型。 | 否 |
| `useDocOrientationClassify`  | `boolean` | `null`  | 请参阅产线对象中 `predict` 方法的 `use_doc_orientation_classify` 参数相关说明。 | 否 |
| `useDocUnwarping`  | `boolean` | `null`  | 请参阅产线对象中 `predict` 方法的 `use_doc_unwarping` 参数相关说明。 | 否 |
| `useTextlineOrientation`  | `boolean` | `null`  | 请参阅产线对象中 `predict` 方法的 `use_textline_orientation` 参数相关说明。 | 否 |
| `useSealRecognition`  | `boolean` | `null`  | 请参阅产线对象中 `predict` 方法的 `use_seal_recognition` 参数相关说明。 | 否 |
| `useTableRecognition`  | `boolean` | `null`  | 请参阅产线对象中 `predict` 方法的 `use_table_recognition` 参数相关说明。 | 否 |
| `useFormulaRecognition`  | `boolean` | `null`  | 请参阅产线对象中 `predict` 方法的 `use_formula_recognition` 参数相关说明。 | 否 |
| `layoutThreshold`  | `number` | `null`  | 请参阅产线对象中 `predict` 方法的 `layout_threshold` 参数相关说明。 | 否 |
| `layoutNms`  | `boolean` | `null`  | 请参阅产线对象中 `predict` 方法的 `layout_nms` 参数相关说明。 | 否 |
| `layoutUnclipRatio`  | `number` | `array` | `object` | `null`  | 请参阅产线对象中 `predict` 方法的 `layout_unclip_ratio` 参数相关说明。 | 否 |
| `layoutMergeBboxesMode`  | `string` | `object` | `null`  | 请参阅产线对象中 `predict` 方法的 `layout_merge_bboxes_mode` 参数相关说明。 | 否 |
| `textDetLimitSideLen`  | `integer` | `null`  | 请参阅产线对象中 `predict` 方法的 `text_det_limit_side_len` 参数相关说明。 | 否 |
| `textDetLimitType`  | `string` | `null`  | 请参阅产线对象中 `predict` 方法的 `text_det_limit_type` 参数相关说明。 | 否 |
| `textDetThresh`  | `number` | `null`  | 请参阅产线对象中 `predict` 方法的 `text_det_thresh` 参数相关说明。 | 否 |
| `textDetBoxThresh`  | `number` | `null`  | 请参阅产线对象中 `predict` 方法的 `text_det_box_thresh` 参数相关说明。 | 否 |
| `textDetUnclipRatio`  | `number` | `null`  | 请参阅产线对象中 `predict` 方法的 `text_det_unclip_ratio` 参数相关说明。 | 否 |
| `textRecScoreThresh`  | `number` | `null`  | 请参阅产线对象中 `predict` 方法的 `text_rec_score_thresh` 参数相关说明。 | 否 |
| `sealDetLimitSideLen`  | `integer` | `null`  | 请参阅产线对象中 `predict` 方法的 `seal_det_limit_side_len` 参数相关说明。 | 否 |
| `sealDetLimitType`  | `string` | `null`  | 请参阅产线对象中 `predict` 方法的 `seal_det_limit_type` 参数相关说明。 | 否 |
| `sealDetThresh`  | `number` | `null`  | 请参阅产线对象中 `predict` 方法的 `seal_det_thresh` 参数相关说明。 | 否 |
| `sealDetBoxThresh`  | `number` | `null`  | 请参阅产线对象中 `predict` 方法的 `seal_det_box_thresh` 参数相关说明。 | 否 |
| `sealDetUnclipRatio`  | `number` | `null`  | 请参阅产线对象中 `predict` 方法的 `seal_det_unclip_ratio` 参数相关说明。 | 否 |
| `sealRecScoreThresh`  | `number` | `null`  | 请参阅产线对象中 `predict` 方法的 `seal_rec_score_thresh` 参数相关说明。 | 否 |
| `useTableCellsOcrResults`  | `boolean`  | 请参阅产线对象中 `predict` 方法的 `use_table_cells_ocr_results` 参数相关说明。 | 否 |
| `useE2eWiredTableRecModel`  | `boolean`  | 请参阅产线对象中 `predict` 方法的 `use_e2e_wired_table_rec_model` 参数相关说明。 | 否 |
| `useE2eWirelessTableRecModel`  | `boolean`  | 请参阅产线对象中 `predict` 方法的 `use_e2e_wireless_table_rec_model` 参数相关说明。 | 否 |

- 请求处理成功时,响应体的 `result` 具有如下属性:

| 名称 | 类型 | 含义 |
|:---:|:---:|:---:|
| `layoutParsingResults`  | `array`  | 版面解析结果。数组长度为1(对于图像输入)或实际处理的文档页数(对于PDF输入)。对于PDF输入,数组中的每个元素依次表示PDF文件中实际处理的每一页的结果。 |
| `dataInfo`  | `object`  | 输入数据信息。 |


`layoutParsingResults` 中的每个元素为一个 `object` ,具有如下属性:

| 名称 | 类型 | 含义 |
|:---:|:---:|:---:|
| `prunedResult`  | `object`  | 产线对象的 `predict` 方法生成结果的 JSON 表示中 `res` 字段的简化版本,其中去除了 `input_path` 和 `page_index` 字段。 |
| `markdown`  | `object`  | markdown结果。 |
| `outputImages`  | `object` | `null`  | 参见产线预测结果的 `img` 属性说明。图像为JPEG格式,使用Base64编码。 |
| `inputImage`  | `string` | `null`  | 输入图像。图像为JPEG格式,使用Base64编码。 |


`markdown` 为一个 `object` ,具有如下属性:

| 名称 | 类型 | 含义 |
|:---:|:---:|:---:|
| `text`  | `string`  | Markdown文本。 |
| `images`  | `object`  | Markdown图片相对路径和base64编码图像的键值对。 |
| `isStart`  | `boolean`  | 当前页面第一个元素是否为段开始。 |
| `isEnd`  | `boolean`  | 当前页面最后一个元素是否为段结束。 |


多语言调用服务示例Python

```cobol
 
import base64
import requests
import pathlib
 
API_URL = "http://localhost:8080/layout-parsing" # 服务URL
 
image_path = "./demo.jpg"
 
# 对本地图像进行Base64编码
with open(image_path, "rb") as file:
    image_bytes = file.read()
    image_data = base64.b64encode(image_bytes).decode("ascii")
 
payload = {
    "file": image_data, # Base64编码的文件内容或者文件URL
    "fileType": 1, # 文件类型,1表示图像文件
}
 
# 调用API
response = requests.post(API_URL, json=payload)
 
# 处理接口返回数据
assert response.status_code == 200
result = response.json()["result"]
for i, res in enumerate(result["layoutParsingResults"]):
    print(res["prunedResult"])
    md_dir = pathlib.Path(f"markdown_{i}")
    md_dir.mkdir(exist_ok=True)
    (md_dir / "doc.md").write_text(res["markdown"]["text"])
    for img_path, img in res["markdown"]["images"].items():
        img_path = md_dir / img_path
        img_path.parent.mkdir(parents=True, exist_ok=True)
        img_path.write_bytes(base64.b64decode(img))
    print(f"Markdown document saved at {md_dir / 'doc.md'}")
    for img_name, img in res["outputImages"].items():
        img_path = f"{img_name}_{i}.jpg"
        with open(img_path, "wb") as f:
            f.write(base64.b64decode(img))
        print(f"Output image saved at {img_path}")

4. 二次开发

如果 PP-StructureV3 产线提供的默认模型权重在您的场景中,精度或速度不满意,您可以尝试利用 您自己拥有的特定领域或应用场景的数据 对现有模型进行进一步的 微调 ,以提升 PP-StructureV3 产线的在您的场景中的识别效果。

4.1 模型微调

由于 PP-StructureV3 产线包含若干模块,模型产线的效果不及预期可能来自于其中任何一个模块。您可以对提取效果差的 case 进行分析,通过可视化图像,确定是哪个模块存在问题,并参考以下表格中对应的微调教程链接进行模型微调。

情形微调模块微调参考链接
版面区域检测不准,如印章、表格未检出等版面区域检测模块链接
表格结构识别不准表格结构识别模块链接
公式识别不准公式识别模块链接
印章文本存在漏检印章文本检测模块链接
文本存在漏检文本检测模块链接
文本内容都不准文本识别模块链接
垂直或者旋转文本行矫正不准文本行方向分类模块链接
整图旋转矫正不准文档图像方向分类模块链接
图像扭曲矫正不准文本图像矫正模块暂不支持微调
4.2 模型应用

当您使用私有数据集完成微调训练后,可获得本地模型权重文件,然后可以通过自定义产线配置文件的方式,使用微调后的模型权重。

  1. 获取产线配置文件

可调用 PaddleOCR 中 PPStructureV3 产线对象的 export_paddlex_config_to_yaml 方法,将当前产线配置导出为 YAML 文件:

from paddleocr import PPStructureV3
 
pipeline = PPStructureV3()
pipeline.export_paddlex_config_to_yaml("PP-StructureV3.yaml")
  1. 修改配置文件

在得到默认的产线配置文件后,将微调后模型权重的本地路径替换至产线配置文件中的对应位置即可。例如

......
SubModules:
  LayoutDetection:
    module_name: layout_detection
    model_name: PP-DocLayout_plus-L
    model_dir: null # 替换为微调后的版面区域检测模型权重路径
......
SubPipelines:
  GeneralOCR:
    pipeline_name: OCR
    text_type: general
    use_doc_preprocessor: False
    use_textline_orientation: False
    SubModules:
      TextDetection:
        module_name: text_detection
        model_name: PP-OCRv5_server_det
        model_dir: null # 替换为微调后的文本测模型权重路径
        limit_side_len: 960
        limit_type: max
        max_side_limit: 4000
        thresh: 0.3
        box_thresh: 0.6
        unclip_ratio: 1.5
 
      TextRecognition:
        module_name: text_recognition
        model_name: PP-OCRv5_server_rec
        model_dir: null # 替换为微调后的文本识别模型权重路径
        batch_size: 1
        score_thresh: 0
......

在产线配置文件中,不仅包含 PaddleOCR CLI 和 Python API 支持的参数,还可进行更多高级配置,具体信息可在 PaddleX模型产线使用概览 中找到对应的产线使用教程,参考其中的详细说明,根据需求调整各项配置。

  1. 在 CLI 中加载产线配置文件

在修改完成配置文件后,通过命令行的 --paddlex_config 参数指定修改后的产线配置文件的路径,PaddleOCR 会读取其中的内容作为产线配置。示例如下:

paddleocr pp_structurev3 --paddlex_config PP-StructureV3.yaml ...
  1. 在 Python API 中加载产线配置文件

初始化产线对象时,可通过 paddlex_config 参数传入 PaddleX 产线配置文件路径或配置字典,PaddleOCR 会读取其中的内容作为产线配置。示例如下:

from paddleocr import PPStructureV3
 
pipeline = PPStructureV3(paddlex_config="PP-StructureV3.yaml")

更多推荐