PaddleOCR/docs/pipeline_usage/PP-ChatOCRv4.md
zhang-prog 2357c63a9a
add new docs (pipelines, modules, legacy) (#15096)
* add ocr doc

* add docs

* fix

* add pipeline docs

* add module docs

* update the descriptions of parameters

* update

* update the description of  predict_iter

* update

* delete 2.2python脚本

* add char_recognition and region_detection

* modify in predict

* remove redundant 2.2 Python scripts

* modify use_wired_table_cells_trans_to_html

* add use_chart_recognition and use_region_detection

* add information

* add use_orc_model

* add legacy docs

* update

---------

Co-authored-by: guoshengjian <guoshengjian@baidu.com>
2025-05-18 21:09:53 +08:00

111 KiB
Raw Blame History

comments
comments
true

文档场景信息抽取v4产线使用教程

1. 文档场景信息抽取v4产线介绍

文档场景信息抽取v4PP-ChatOCRv4是飞桨特色的文档和图像智能分析解决方案结合了 LLM、MLLM 和 OCR 技术,一站式解决版面分析、生僻字、多页 pdf、表格、印章识别等常见的复杂文档信息抽取难点问题结合文心大模型将海量数据和知识相融合准确率高且应用广泛。本产线同时提供了灵活的服务化部署方式支持在多种硬件上部署。不仅如此本产线也提供了二次开发的能力您可以基于本产线在您自己的数据集上训练调优训练后的模型也可以无缝集成。

文档场景信息抽取v4产线中包含版面区域检测模块表格结构识别模块表格分类模块表格单元格定位模块文本检测模块文本识别模块印章文本检测模块文本图像矫正模块文档图像方向分类模块。其中相关的模型是以子产线的方式集成,您可以通过产线配置来查看不同模块的模型配置。

文档场景信息抽取v4产线中包含以下9个模块。每个模块均可独立进行训练和推理并包含多个模型。有关详细信息请点击相应模块以查看文档。

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

文档图像方向分类模块(可选):
模型模型下载链接 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.179 30.3 M 高精度文本图像矫正模型
版面区域检测模块模型:
模型模型下载链接 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在中英文论文、杂志、合同、书本、试卷和研报等场景上自建数据集训练的高效率版面区域定位模型
PicoDet_layout_1x推理模型/训练模型 86.8 9.03 / 3.10 25.82 / 20.70 7.4 基于PicoDet-1x在PubLayNet数据集训练的高效率版面区域定位模型可定位包含文字、标题、表格、图片以及列表这5类区域
PicoDet_layout_1x_table推理模型/训练模型 95.7 8.02 / 3.09 23.70 / 20.41 7.4 M 基于PicoDet-1x在自建数据集训练的高效率版面区域定位模型可定位包含表格这1类区域
PicoDet-S_layout_3cls推理模型/训练模型 87.1 8.99 / 2.22 16.11 / 8.73 4.8 基于PicoDet-S轻量模型在中英文论文、杂志和研报等场景上自建数据集训练的高效率版面区域定位模型包含3个类别表格图像和印章
PicoDet-S_layout_17cls推理模型/训练模型 70.3 9.11 / 2.12 15.42 / 9.12 4.8 基于PicoDet-S轻量模型在中英文论文、杂志和研报等场景上自建数据集训练的高效率版面区域定位模型包含17个版面常见类别分别是段落标题、图片、文本、数字、摘要、内容、图表标题、公式、表格、表格标题、参考文献、文档标题、脚注、页眉、算法、页脚、印章
PicoDet-L_layout_3cls推理模型/训练模型 89.3 13.05 / 4.50 41.30 / 41.30 22.6 基于PicoDet-L在中英文论文、杂志和研报等场景上自建数据集训练的高效率版面区域定位模型包含3个类别表格图像和印章
PicoDet-L_layout_17cls推理模型/训练模型 79.9 13.50 / 4.69 43.32 / 43.32 22.6 基于PicoDet-L在中英文论文、杂志和研报等场景上自建数据集训练的高效率版面区域定位模型包含17个版面常见类别分别是段落标题、图片、文本、数字、摘要、内容、图表标题、公式、表格、表格标题、参考文献、文档标题、脚注、页眉、算法、页脚、印章
RT-DETR-H_layout_3cls推理模型/训练模型 95.9 114.93 / 27.71 947.56 / 947.56 470.1 基于RT-DETR-H在中英文论文、杂志和研报等场景上自建数据集训练的高精度版面区域定位模型包含3个类别表格图像和印章
RT-DETR-H_layout_17cls推理模型/训练模型 92.6 115.29 / 104.09 995.27 / 995.27 470.2 基于RT-DETR-H在中英文论文、杂志和研报等场景上自建数据集训练的高精度版面区域定位模型包含17个版面常见类别分别是段落标题、图片、文本、数字、摘要、内容、图表标题、公式、表格、表格标题、参考文献、文档标题、脚注、页眉、算法、页脚、印章
表格结构识别模块(可选):
模型模型下载链接 精度(% GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小 (M) 介绍
SLANet推理模型/训练模型 59.52 103.08 / 103.08 197.99 / 197.99 6.9 M SLANet 是百度飞桨视觉团队自研的表格结构识别模型。该模型通过采用CPU 友好型轻量级骨干网络PP-LCNet、高低层特征融合模块CSP-PAN、结构与位置信息对齐的特征解码模块SLA Head大幅提升了表格结构识别的精度和推理速度。
SLANet_plus推理模型/训练模型 63.69 140.29 / 140.29 195.39 / 195.39 6.9 M SLANet_plus 是百度飞桨视觉团队自研的表格结构识别模型SLANet的增强版。相较于SLANetSLANet_plus 对无线表、复杂表格的识别能力得到了大幅提升,并降低了模型对表格定位准确性的敏感度,即使表格定位出现偏移,也能够较准确地进行识别。
文本检测模块:
模型模型下载链接 检测Hmean% GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M) 介绍
PP-OCRv4_server_det推理模型/训练模型 82.56 83.34 / 80.91 442.58 / 442.58 109 PP-OCRv4 的服务端文本检测模型,精度更高,适合在性能较好的服务器上部署
PP-OCRv4_mobile_det推理模型/训练模型 77.35 8.79 / 3.13 51.00 / 28.58 4.7 PP-OCRv4 的移动端文本检测模型,效率更高,适合在端侧设备部署
PP-OCRv3_mobile_det推理模型/训练模型 78.68 8.44 / 2.91 27.87 / 27.87 2.1 PP-OCRv3 的移动端文本检测模型,效率更高,适合在端侧设备部署
PP-OCRv3_server_det推理模型/训练模型 80.11 65.41 / 13.67 305.07 / 305.07 102.1 PP-OCRv3 的服务端文本检测模型,精度更高,适合在性能较好的服务器上部署
文本识别模块:
模型模型下载链接 识别 Avg Accuracy(%) GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M 介绍
PP-OCRv4_server_rec_doc推理模型/训练模型 81.53 6.65 / 6.65 32.92 / 32.92 74.7 M PP-OCRv4_server_rec_doc是在PP-OCRv4_server_rec的基础上在更多中文文档数据和PP-OCR训练数据的混合数据训练而成增加了部分繁体字、日文、特殊字符的识别能力可支持识别的字符为1.5万+,除文档相关的文字识别能力提升外,也同时提升了通用文字的识别能力
PP-OCRv4_mobile_rec推理模型/训练模型 78.74 4.82 / 4.82 16.74 / 4.64 10.6 M PP-OCRv4的轻量级识别模型推理效率高可以部署在包含端侧设备的多种硬件设备中
PP-OCRv4_server_rec 推理模型/训练模型 80.61 6.58 / 6.58 33.17 / 33.17 71.2 M PP-OCRv4的服务器端模型推理精度高可以部署在多种不同的服务器上
PP-OCRv3_mobile_rec推理模型/训练模型 72.96 5.87 / 5.87 9.07 / 4.28 9.2 M PP-OCRv3的轻量级识别模型推理效率高可以部署在包含端侧设备的多种硬件设备中
模型模型下载链接 识别 Avg Accuracy(%) GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M 介绍
ch_SVTRv2_rec推理模型/训练模型 68.81 8.08 / 8.08 50.17 / 42.50 73.9 M SVTRv2 是一种由复旦大学视觉与学习实验室FVL的OpenOCR团队研发的服务端文本识别模型其在PaddleOCR算法模型挑战赛 - 赛题一OCR端到端识别任务中荣获一等奖A榜端到端识别精度相比PP-OCRv4提升6%。
模型模型下载链接 识别 Avg Accuracy(%) GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M 介绍
ch_RepSVTR_rec推理模型/训练模型 65.07 5.93 / 5.93 20.73 / 7.32 22.1 M RepSVTR 文本识别模型是一种基于SVTRv2 的移动端文本识别模型其在PaddleOCR算法模型挑战赛 - 赛题一OCR端到端识别任务中荣获一等奖B榜端到端识别精度相比PP-OCRv4提升2.5%,推理速度持平。
  • 英文识别模型
模型模型下载链接 识别 Avg Accuracy(%) GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M 介绍
en_PP-OCRv4_mobile_rec推理模型/训练模型 70.39 4.81 / 4.81 16.10 / 5.31 6.8 M 基于PP-OCRv4识别模型训练得到的超轻量英文识别模型支持英文、数字识别
en_PP-OCRv3_mobile_rec推理模型/训练模型 70.69 5.44 / 5.44 8.65 / 5.57 7.8 M 基于PP-OCRv3识别模型训练得到的超轻量英文识别模型支持英文、数字识别
  • 多语言识别模型
模型模型下载链接 识别 Avg Accuracy(%) GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M 介绍
korean_PP-OCRv3_mobile_rec推理模型/训练模型 60.21 5.40 / 5.40 9.11 / 4.05 8.6 M 基于PP-OCRv3识别模型训练得到的超轻量韩文识别模型支持韩文、数字识别
japan_PP-OCRv3_mobile_rec推理模型/训练模型 45.69 5.70 / 5.70 8.48 / 4.07 8.8 M 基于PP-OCRv3识别模型训练得到的超轻量日文识别模型支持日文、数字识别
chinese_cht_PP-OCRv3_mobile_rec推理模型/训练模型 82.06 5.90 / 5.90 9.28 / 4.34 9.7 M 基于PP-OCRv3识别模型训练得到的超轻量繁体中文识别模型支持繁体中文、数字识别
te_PP-OCRv3_mobile_rec推理模型/训练模型 95.88 5.42 / 5.42 8.10 / 6.91 7.8 M 基于PP-OCRv3识别模型训练得到的超轻量泰卢固文识别模型支持泰卢固文、数字识别
ka_PP-OCRv3_mobile_rec推理模型/训练模型 96.96 5.25 / 5.25 9.09 / 3.86 8.0 M 基于PP-OCRv3识别模型训练得到的超轻量卡纳达文识别模型支持卡纳达文、数字识别
ta_PP-OCRv3_mobile_rec推理模型/训练模型 76.83 5.23 / 5.23 10.13 / 4.30 8.0 M 基于PP-OCRv3识别模型训练得到的超轻量泰米尔文识别模型支持泰米尔文、数字识别
latin_PP-OCRv3_mobile_rec推理模型/训练模型 76.93 5.20 / 5.20 8.83 / 7.15 7.8 M 基于PP-OCRv3识别模型训练得到的超轻量拉丁文识别模型支持拉丁文、数字识别
arabic_PP-OCRv3_mobile_rec推理模型/训练模型 73.55 5.35 / 5.35 8.80 / 4.56 7.8 M 基于PP-OCRv3识别模型训练得到的超轻量阿拉伯字母识别模型支持阿拉伯字母、数字识别
cyrillic_PP-OCRv3_mobile_rec推理模型/训练模型 94.28 5.23 / 5.23 8.89 / 3.88 7.9 M 基于PP-OCRv3识别模型训练得到的超轻量斯拉夫字母识别模型支持斯拉夫字母、数字识别
devanagari_PP-OCRv3_mobile_rec推理模型/训练模型 96.44 5.22 / 5.22 8.56 / 4.06 7.9 M 基于PP-OCRv3识别模型训练得到的超轻量梵文字母识别模型支持梵文字母、数字识别
文本行方向分类模块(可选):
模型 模型下载链接 Top-1 Acc% GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M) 介绍
PP-LCNet_x0_25_textline_ori推理模型/训练模型 95.54 - - 0.32 基于PP-LCNet_x0_25的文本行分类模型含有两个类别即0度180度
公式识别模块(可选):
模型模型下载链接 BLEU score normed edit distance ExpRate % GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小
LaTeX_OCR_rec推理模型/训练模型 0.8821 0.0823 40.01 2047.13 / 2047.13 10582.73 / 10582.73 89.7 M
印章文本检测模块(可选):
模型模型下载链接 检测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的移动端印章文本检测模型效率更高适合在端侧部署
测试环境说明:
  • 性能测试环境
    • 测试数据集:
      • 文档图像方向分类模型PaddleX 自建的数据集,覆盖证件和文档等多个场景,包含 1000 张图片。
      • 文本图像矫正模型:DocUNet
      • 版面区域检测模型PaddleOCR 自建的版面区域分析数据集,包含中英文论文、杂志和研报等常见的 1w 张文档类型图片。
      • 表格结构识别模型PaddleX 内部自建英文表格识别数据集。
      • 文本检测模型PaddleOCR 自建的中文数据集,覆盖街景、网图、文档、手写多个场景,其中检测包含 500 张图片。
      • 中文识别模型: PaddleOCR 自建的中文数据集,覆盖街景、网图、文档、手写多个场景,其中文本识别包含 1.1w 张图片。
      • ch_SVTRv2_recPaddleOCR算法模型挑战赛 - 赛题一OCR端到端识别任务A榜评估集。
      • ch_RepSVTR_recPaddleOCR算法模型挑战赛 - 赛题一OCR端到端识别任务B榜评估集。
      • 英文识别模型PaddleX 自建的英文数据集。
      • 多语言识别模型PaddleX 自建的多语种数据集。
      • 文本行方向分类模型PaddleX 自建的数据集,覆盖证件和文档等多个场景,包含 1000 张图片。
      • 印章文本检测模型PaddleX 自建的数据集包含500张圆形印章图像。
    • 硬件配置:
      • GPUNVIDIA Tesla T4
      • CPUIntel 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. 快速开始

在本地使用文档场景信息抽取v4产线前请确保您已经按照安装教程完成了wheel包安装。

在进行模型推理之前,首先需要准备大语言模型的 api_keyPP-ChatOCRv4 支持在百度云千帆平台或者本地部署的标准 OpenAI 接口大模型服务。如果使用百度云千帆平台,可以参考认证鉴权 获取 api_key。如果使用本地部署的大模型服务可以参考PaddleNLP大模型部署文档进行大模型部署对话接口部署和向量化接口部署,并填写对应的 base_url 和 api_key 即可。如果需要使用多模态大模型进行数据融合,可以参考PaddleMIX模型文档中的OpenAI服务部署进行多模态大模型部署并填写对应的 base_url 和 api_key 即可。

注: 如果因本地环境限制无法在本地部署多模态大模型可以将代码中的含有“mllm”变量的行注释掉仅使用大语言模型完成信息抽取。

2.1 命令行方式体验

可以下载 测试文件,使用一行命令即可快速体验产线效果:

paddleocr pp_chatocrv4_doc -i vehicle_certificate-1.png -k 驾驶室准乘人数 --qianfan_api_key your_api_key

# 通过 --invoke_mllm 和 --pp_docbee_base_url 使用多模态大模型
paddleocr pp_chatocrv4_doc -i vehicle_certificate-1.png -k 驾驶室准乘人数 --qianfan_api_key your_api_key --invoke_mllm True --pp_docbee_base_url http://127.0.0.1:8080/
命令行支持更多参数设置,点击展开以查看命令行参数的详细说明
参数 参数说明 参数类型 默认值
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 Var|str|list None
save_path 指定推理结果文件保存的路径。如果设置为None, 推理结果将不会保存到本地。 str None
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 设备;
str None
enable_hpi 是否启用高性能推理。 bool False
use_tensorrt 是否使用 TensorRT 进行推理加速。 bool False
min_subgraph_size 最小子图大小,用于优化模型子图的计算。 int 3
precision 计算精度,如 fp32、fp16。 str fp32
enable_mkldnn 是否启用 MKL-DNN 加速库。如果设置为None, 将默认启用。 bool None
cpu_threads 在 CPU 上进行推理时使用的线程数。 int 8
invoke_mllm 是否使用多模态大模型。 bool False
qianfan_api_key qianfan api_key str None
pp_docbee_base_url 多模态大模型服务的url。 bool False
layout_detection_model_name 用于版面区域检测的模型名称。如果设置为None,将会使用产线默认模型。 str None
layout_detection_model_dir 版面区域检测模型的目录路径。如果设置为None,将会下载官方模型。 str None
doc_orientation_classify_model_name 文档方向分类模型的名称。如果设置为None,将会使用产线默认模型。 str None
doc_orientation_classify_model_dir 文档方向分类模型的目录路径。如果设置为None,将会下载官方模型。 str None
doc_unwarping_model_name 文档去扭曲模型的名称。如果设置为None,将会使用产线默认模型。 str None
doc_unwarping_model_dir 文档去扭曲模型的目录路径。如果设置为None,将会下载官方模型。 str None
text_detection_model_name 文本检测模型的名称。如果设置为None,将会使用产线默认模型。 str None
text_detection_model_dir 文本检测模型的目录路径。如果设置为None,将会下载官方模型。 str None
text_recognition_model_name 文本识别模型的名称。如果设置为None,将会使用产线默认模型。 str None
text_recognition_model_dir 文本识别模型的目录路径。如果设置为None,将会下载官方模型。 str None
text_recognition_batch_size 文本识别模型的批处理大小。如果设置为None,将默认设置批处理大小为1 int None
table_structure_recognition_model_name 表格结构识别模型的名称。如果设置为None,将会使用产线默认模型。 str None
table_structure_recognition_model_dir 表格结构识别模型的目录路径。如果设置为None,将会下载官方模型。 str None
seal_text_detection_model_name 印章文本检测模型的名称。如果设置为None,将会使用产线默认模型。 str None
seal_text_detection_model_dir 印章文本检测模型的目录路径。如果设置为None,将会下载官方模型。 str None
seal_text_recognition_model_name 印章文本识别模型的名称。如果设置为None,将会使用产线默认模型。 str None
seal_text_recognition_model_dir 印章文本识别模型的目录路径。如果设置为None,将会下载官方模型。 str None
seal_text_recognition_batch_size 印章文本识别模型的批处理大小。如果设置为None,将默认设置批处理大小为1 int None
use_doc_orientation_classify 是否加载文档方向分类功能。如果设置为None,将默认使用产线初始化的该参数值,初始化为True bool None
use_doc_unwarping 是否加载文档去扭曲功能。如果设置为None,将默认使用产线初始化的该参数值,初始化为True bool None
use_general_ocr 是否加载通用OCR子产线。如果设置为None,将默认使用产线初始化的该参数值,初始化为True bool None
use_seal_recognition 是否加载印章识别子产线。如果设置为None,将默认使用产线初始化的该参数值,初始化为True bool None
use_table_recognition 是否加载表格识别子产线。如果设置为None,将默认使用产线初始化的该参数值,初始化为True bool None
layout_threshold 版面模型得分阈值。
  • float0-1 之间的任意浮点数;
  • dict {0:0.1} key为类别IDvalue为该类别的阈值
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 0.5
float|dict None
layout_nms 版面区域检测模型是否使用NMS后处理。 bool None
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
float|Tuple[float,float]|dict None
layout_merge_bboxes_mode 版面区域检测的重叠框过滤方式。
  • strlargesmall, union,分别表示重叠框过滤时选择保留大框,小框还是同时保留
  • dict, 字典的key为int类型,代表cls_id, value为str类型, 如{0: "large", 2: "small"}, 表示对第0类别检测框使用large模式对第2类别检测框使用small模式
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 large
str|dict None
text_det_limit_side_len 文本检测的最大边长度限制。
  • int:大于 0 的任意整数;
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 960
int None
text_det_limit_type
  • str:支持 minmaxmin 表示保证图像最短边不小于 det_limit_side_lenmax 表示保证图像最长边不大于 limit_side_len
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 max
str None
text_det_thresh 检测像素阈值,输出的概率图中,得分大于该阈值的像素点才会被认为是文字像素点。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.3
float None
text_det_box_thresh 检测框阈值,检测结果边框内,所有像素点的平均得分大于该阈值时,该结果会被认为是文字区域。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.6
float None
text_det_unclip_ratio 文本检测扩张系数,使用该方法对文字区域进行扩张,该值越大,扩张的面积越大。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 2.0
float None
text_rec_score_thresh 文本识别阈值,得分大于该阈值的文本结果会被保留。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.0。即不设阈值
float None
seal_det_limit_side_len 印章文本检测的图像边长限制。
  • int:大于 0 的任意整数;
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 736
int None
seal_det_limit_type 印章文本检测的图像边长限制类型。
  • str:支持 minmaxmin 表示保证图像最短边不小于 det_limit_side_lenmax 表示保证图像最长边不大于 limit_side_len
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 min
str None
seal_det_thresh 检测像素阈值,输出的概率图中,得分大于该阈值的像素点才会被认为是文字像素点。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.2
float None
seal_det_box_thresh 检测框阈值,检测结果边框内,所有像素点的平均得分大于该阈值时,该结果会被认为是文字区域。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.6
float None
seal_det_unclip_ratio 印章文本检测扩张系数,使用该方法对文字区域进行扩张,该值越大,扩张的面积越大。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.5
float None
seal_rec_score_thresh 印章文本识别阈值,得分大于该阈值的文本结果会被保留。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.0。即不设阈值
float None

运行结果会被打印到终端上,运行结果如下:

驾驶室准乘人数 2

2.2 Python脚本方式集成

命令行方式是为了快速体验查看效果,一般来说,在项目中,往往需要通过代码集成,可以下载 测试文件,使用如下示例代码进行推理:

from paddleocr import PPChatOCRv4Doc

chat_bot_config = {
    "module_name": "chat_bot",
    "model_name": "ernie-3.5-8k",
    "base_url": "https://qianfan.baidubce.com/v2",
    "api_type": "openai",
    "api_key": "api_key",  # your api_key
}

retriever_config = {
    "module_name": "retriever",
    "model_name": "embedding-v1",
    "base_url": "https://qianfan.baidubce.com/v2",
    "api_type": "qianfan",
    "api_key": "api_key",  # your api_key
}

mllm_chat_bot_config = {
    "module_name": "chat_bot",
    "model_name": "PP-DocBee",
    "base_url": "http://127.0.0.1:8080/",  # your local mllm service url
    "api_type": "openai",
    "api_key": "api_key",  # your api_key
}

pipeline = PPChatOCRv4Doc()

visual_predict_res = pipeline.visual_predict(
    input="vehicle_certificate-1.png",
    use_doc_orientation_classify=False,
    use_doc_unwarping=False,
    use_common_ocr=True,
    use_seal_recognition=True,
    use_table_recognition=True,
)

visual_info_list = []
for res in visual_predict_res:
    visual_info_list.append(res["visual_info"])
    layout_parsing_result = res["layout_parsing_result"]

vector_info = pipeline.build_vector(
    visual_info_list, flag_save_bytes_vector=True, retriever_config=retriever_config
)
mllm_predict_res = pipeline.mllm_pred(
    input="vehicle_certificate-1.png",
    key_list=["驾驶室准乘人数"],
    mllm_chat_bot_config=mllm_chat_bot_config,
)
mllm_predict_info = mllm_predict_res["mllm_res"]
chat_result = pipeline.chat(
    key_list=["驾驶室准乘人数"],
    visual_info=visual_info_list,
    vector_info=vector_info,
    mllm_predict_info=mllm_predict_info,
    chat_bot_config=chat_bot_config,
    retriever_config=retriever_config,
)
print(chat_result)

运行后,输出结果如下:

{'chat_res': {'驾驶室准乘人数': '2'}}

PP-ChatOCRv4 预测的流程、API说明、产出说明如下

1调用 PPChatOCRv4Doc 方法实例化PP-ChatOCRv4产线对象。

相关参数说明如下:

参数 参数说明 参数类型 默认值
layout_detection_model_name 用于版面区域检测的模型名称。如果设置为None,将会使用产线默认模型。 str None
layout_detection_model_dir 版面区域检测模型的目录路径。如果设置为None,将会下载官方模型。 str None
doc_orientation_classify_model_name 文档方向分类模型的名称。如果设置为None,将会使用产线默认模型。 str None
doc_orientation_classify_model_dir 文档方向分类模型的目录路径。如果设置为None,将会下载官方模型。 str None
doc_unwarping_model_name 文档去扭曲模型的名称。如果设置为None,将会使用产线默认模型。 str None
doc_unwarping_model_dir 文档去扭曲模型的目录路径。如果设置为None,将会下载官方模型。 str None
text_detection_model_name 文本检测模型的名称。如果设置为None,将会使用产线默认模型。 str None
text_detection_model_dir 文本检测模型的目录路径。如果设置为None,将会下载官方模型。 str None
text_recognition_model_name 文本识别模型的名称。如果设置为None,将会使用产线默认模型。 str None
text_recognition_model_dir 文本识别模型的目录路径。如果设置为None,将会下载官方模型。 str None
text_recognition_batch_size 文本识别模型的批处理大小。如果设置为None,将默认设置批处理大小为1 int None
table_structure_recognition_model_name 表格结构识别模型的名称。如果设置为None,将会使用产线默认模型。 str None
table_structure_recognition_model_dir 表格结构识别模型的目录路径。如果设置为None,将会下载官方模型。 str None
seal_text_detection_model_name 印章文本检测模型的名称。如果设置为None,将会使用产线默认模型。 str None
seal_text_detection_model_dir 印章文本检测模型的目录路径。如果设置为None,将会下载官方模型。 str None
seal_text_recognition_model_name 印章文本识别模型的名称。如果设置为None,将会使用产线默认模型。 str None
seal_text_recognition_model_dir 印章文本识别模型的目录路径。如果设置为None,将会下载官方模型。 str None
seal_text_recognition_batch_size 印章文本识别模型的批处理大小。如果设置为None,将默认设置批处理大小为1 int None
use_doc_orientation_classify 是否加载文档方向分类功能。如果设置为None,将默认使用产线初始化的该参数值,初始化为True bool None
use_doc_unwarping 是否加载文档去扭曲功能。如果设置为None,将默认使用产线初始化的该参数值,初始化为True bool None
use_general_ocr 是否加载通用OCR子产线。如果设置为None,将默认使用产线初始化的该参数值,初始化为True bool None
use_seal_recognition 是否加载印章识别子产线。如果设置为None,将默认使用产线初始化的该参数值,初始化为True bool None
use_table_recognition 是否加载表格识别子产线。如果设置为None,将默认使用产线初始化的该参数值,初始化为True bool None
layout_threshold 版面模型得分阈值。
  • float0-1 之间的任意浮点数;
  • dict {0:0.1} key为类别IDvalue为该类别的阈值
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 0.5
float|dict None
layout_nms 版面区域检测模型是否使用NMS后处理。 bool None
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
float|Tuple[float,float]|dict None
layout_merge_bboxes_mode 版面区域检测的重叠框过滤方式。
  • strlargesmall, union,分别表示重叠框过滤时选择保留大框,小框还是同时保留
  • dict, 字典的key为int类型,代表cls_id, value为str类型, 如{0: "large", 2: "small"}, 表示对第0类别检测框使用large模式对第2类别检测框使用small模式
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 large
str|dict None
text_det_limit_side_len 文本检测的最大边长度限制。
  • int:大于 0 的任意整数;
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 960
int None
text_det_limit_type
  • str:支持 minmaxmin 表示保证图像最短边不小于 det_limit_side_lenmax 表示保证图像最长边不大于 limit_side_len
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 max
str None
text_det_thresh 检测像素阈值,输出的概率图中,得分大于该阈值的像素点才会被认为是文字像素点。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.3
float None
text_det_box_thresh 检测框阈值,检测结果边框内,所有像素点的平均得分大于该阈值时,该结果会被认为是文字区域。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.6
float None
text_det_unclip_ratio 文本检测扩张系数,使用该方法对文字区域进行扩张,该值越大,扩张的面积越大。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 2.0
float None
text_rec_score_thresh 文本识别阈值,得分大于该阈值的文本结果会被保留。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.0。即不设阈值
float None
seal_det_limit_side_len 印章文本检测的图像边长限制。
  • int:大于 0 的任意整数;
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 736
int None
seal_det_limit_type 印章文本检测的图像边长限制类型。
  • str:支持 minmaxmin 表示保证图像最短边不小于 det_limit_side_lenmax 表示保证图像最长边不大于 limit_side_len
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 min
str None
seal_det_thresh 检测像素阈值,输出的概率图中,得分大于该阈值的像素点才会被认为是文字像素点。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.2
float None
seal_det_box_thresh 检测框阈值,检测结果边框内,所有像素点的平均得分大于该阈值时,该结果会被认为是文字区域。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.6
float None
seal_det_unclip_ratio 印章文本检测扩张系数,使用该方法对文字区域进行扩张,该值越大,扩张的面积越大。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.5
float None
seal_rec_score_thresh 印章文本识别阈值,得分大于该阈值的文本结果会被保留。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.0。即不设阈值
float None
retriever_config 向量检索大模型配置参数。配置内容为如下字典:
{
"module_name": "retriever",
"model_name": "embedding-v1",
"base_url": "https://qianfan.baidubce.com/v2",
"api_type": "qianfan",
"api_key": "api_key"  # 请将此设置为实际的API密钥
}
dict None
chat_bot_config 大语言模型配置信息。配置内容为如下字典:
{
"module_name": "chat_bot",
"model_name": "ernie-3.5-8k",
"base_url": "https://qianfan.baidubce.com/v2",
"api_type": "openai",
"api_key": "api_key"  # 请将此设置为实际的API密钥
}
dict None
mllm_chat_bot_config 多模态大模型配置参数。配置内容为如下字典:
{
"module_name": "chat_bot",
"model_name": "PP-DocBee",
"base_url": "http://127.0.0.1:8080/", # 请将此设置为实际的多模态大模型服务的url
"api_type": "openai",
"api_key": "api_key"  # 请将此设置为实际的API密钥
}
dict None
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 Var|str|list None
save_path 指定推理结果文件保存的路径。如果设置为None, 推理结果将不会保存到本地。 str None
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 设备;
str None
enable_hpi 是否启用高性能推理。 bool False
use_tensorrt 是否使用 TensorRT 进行推理加速。 bool False
min_subgraph_size 最小子图大小,用于优化模型子图的计算。 int 3
precision 计算精度,如 fp32、fp16。 str fp32
enable_mkldnn 是否启用 MKL-DNN 加速库。如果设置为None, 将默认启用。 bool None
cpu_threads 在 CPU 上进行推理时使用的线程数。 int 8
2调用 PP-ChatOCRv4 产线对象的 visual_predict() 方法获取视觉预测结果,该方法会返回一个结果列表。另外,产线还提供了 visual_predict_iter() 方法。两者在参数接受和结果返回方面是完全一致的,区别在于 visual_predict_iter() 返回的是一个 generator,能够逐步处理和获取预测结果,适合处理大型数据集或希望节省内存的场景。可以根据实际需求选择使用这两种方法中的任意一种。以下是 visual_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 Var|str|list None
device 与实例化时的参数相同。 str None
use_doc_orientation_classify 是否在推理时使用文档方向分类模块。 bool None
use_doc_unwarping 是否在推理时使用文本图像矫正模块。 bool None
use_textline_orientation 是否在推理时使用文本行方向分类模块。 bool None
use_general_ocr 是否在推理时使用 OCR 子产线。 bool None
use_seal_recognition 是否在推理时使用印章识别子产线。 bool None
use_table_recognition 是否在推理时使用表格识别子产线。 bool None
layout_threshold 与实例化时的参数相同。 float|dict None
layout_nms 与实例化时的参数相同。 bool None
layout_unclip_ratio 与实例化时的参数相同。 float|Tuple[float,float]|dict None
layout_merge_bboxes_mode 与实例化时的参数相同。 str|dict None
text_det_limit_side_len 与实例化时的参数相同。 int None
text_det_limit_type 与实例化时的参数相同。 str None
text_det_thresh 与实例化时的参数相同。 float None
text_det_box_thresh 与实例化时的参数相同。 float None
text_det_unclip_ratio 与实例化时的参数相同。 float None
text_rec_score_thresh 与实例化时的参数相同。 float None
seal_det_limit_side_len 与实例化时的参数相同。 int None
seal_det_limit_type 与实例化时的参数相同。 str None
seal_det_thresh 与实例化时的参数相同。 float None
seal_det_box_thresh 与实例化时的参数相同。 float None
seal_det_unclip_ratio 与实例化时的参数相同。 float None
seal_rec_score_thresh 与实例化时的参数相同。 float None
3对视觉预测结果进行处理。

每个样本的预测结果均为 dict 类型,包含 visual_infolayout_parsing_result 两个字段。通过 visual_info 得到视觉信息(包含 normal_text_dicttable_text_listtable_html_list 等信息),并将每个样本的信息放到 visual_info_list 列表中,该列表的内容会在之后送入大语言模型中。

当然,您也可以通过 layout_parsing_result 获取版面解析的结果,该结果包含文件或图片中包含的表格、文字、图片等内容,且支持打印、保存为图片、保存为json文件的操作:

......
for res in visual_predict_res:
    visual_info_list.append(res["visual_info"])
    layout_parsing_result = res["layout_parsing_result"]
    layout_parsing_result.print()
    layout_parsing_result.save_to_img("./output")
    layout_parsing_result.save_to_json("./output")
    layout_parsing_result.save_to_xlsx("./output")
    layout_parsing_result.save_to_html("./output")
......
方法 方法说明 参数 参数类型 参数说明 默认值
print() 打印结果到终端 format_json bool 是否对输出内容进行使用 JSON 缩进格式化 True
indent int 指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_jsonTrue 时有效 4
ensure_ascii bool 控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_jsonTrue时有效 False
save_to_json() 将结果保存为json格式的文件 save_path str 保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致
indent int 指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_jsonTrue 时有效 4
ensure_ascii bool 控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_jsonTrue时有效 False
save_to_img() 将中间各个模块的可视化图像保存在png格式的图像 save_path str 保存的文件路径,支持目录或文件路径
save_to_html() 将文件中的表格保存为html格式的文件 save_path str 保存的文件路径,支持目录或文件路径
save_to_xlsx() 将文件中的表格保存为xlsx格式的文件 save_path str 保存的文件路径,支持目录或文件路径
  • 调用print() 方法会将结果打印到终端,打印到终端的内容解释如下:

    • input_path: (str) 待预测图像的输入路径

    • page_index: (Union[int, None]) 如果输入是PDF文件则表示当前是PDF的第几页否则为 None

    • model_settings: (Dict[str, bool]) 配置产线所需的模型参数

      • use_doc_preprocessor: (bool) 控制是否启用文档预处理子产线
      • use_general_ocr: (bool) 控制是否启用 OCR 子产线
      • use_seal_recognition: (bool) 控制是否启用印章识别子产线
      • use_table_recognition: (bool) 控制是否启用表格识别子产线
      • use_formula_recognition: (bool) 控制是否启用公式识别子产线
    • parsing_res_list: (List[Dict]) 解析结果的列表,每个元素为一个字典,列表顺序为解析后的阅读顺序。

      • block_bbox: (np.ndarray) 版面区域的边界框。
      • block_label: (str) 版面区域的标签,例如text, table等。
      • block_content: (str) 内容为版面区域内的内容。
    • overall_ocr_res: (Dict[str, Union[List[str], List[float], numpy.ndarray]]) 全局 OCR 结果的字典

      • input_path: (Union[str, None]) 图像OCR子产线接受的图像路径当输入为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) 印章图像的输入路径
      • 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}.json如果指定为文件则直接保存到该文件中。由于json文件不支持保存numpy数组因此会将其中的numpy.array类型转换为列表形式。

  • 调用save_to_img() 方法会将可视化结果保存到指定的save_path中,如果指定为目录,则保存的路径为save_path/{your_img_basename}_ocr_res_img.{your_img_extension},如果指定为文件,则直接保存到该文件中。(产线通常包含较多结果图片,不建议直接指定为具体的文件路径,否则多张图会被覆盖,仅保留最后一张图)

此外,也支持通过属性获取带结果的可视化图像和预测结果,具体如下:

属性 属性说明
json 获取预测的 json 格式的结果
img 获取格式为 dict 的可视化图像
  • json 属性获取的预测结果为dict类型的数据相关内容与调用 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
4调用PP-ChatOCRv4的产线对象的 build_vector() 方法,对文本内容进行向量构建。

以下是 build_vector() 方法的参数及其说明:

参数 参数说明 参数类型 默认值
visual_info 视觉信息,可以是包含视觉信息的字典,或者由这些字典组成的列表 list|dict None
min_characters 最小字符数量。为大于0的正整数可以根据大语言模型支持的token长度来决定 int 3500
block_size 长文本建立向量库时分块大小。为大于0的正整数可以根据大语言模型支持的token长度来决定 int 300
flag_save_bytes_vector 文字是否保存为二进制文件 bool False
retriever_config 向量检索大模型配置参数,与实例化时的参数相同。 dict None
该方法会返回一个包含视觉文本信息的字典,字典的内容如下:
  • flag_save_bytes_vector(bool)是否将结果保存为二进制文件
  • flag_too_short_text(bool)是否文本长度小于最小字符数量
  • vector: (str|list) 文本的二进制内容或者文本内容,取决于flag_save_bytes_vectormin_characters的值,如果flag_save_bytes_vector=True且文本长度大于等于最小字符数量,则返回二进制内容;否则返回原始的文本。
5调用PP-ChatOCRv4的产线对象的 mllm_pred() 方法,获取多模态大模型抽取结果。

以下是 mllm_pred() 方法的参数及其说明:

参数 参数说明 参数类型 默认值
input 待预测数据,支持多种输入类型,必填。
  • Python Var:如 numpy.ndarray 表示的图像数据
  • str如图像文件或者单页PDF文件的本地路径/root/data/img.jpg如URL链接如图像文件或单页PDF文件的网络URL示例
Python Var|str None
key_list 用于提取信息的单个键或键列表 Union[str, List[str]] None
mllm_chat_bot_config 多模态大模型配置参数,与实例化时的参数相同。 dict None
6调用PP-ChatOCRv4的产线对象的 chat() 方法,对关键信息进行抽取。

以下是 chat() 方法的参数及其说明:

参数 参数说明 参数类型 默认值
key_list 用于提取信息的单个键或键列表 Union[str, List[str]] None
visual_info 视觉信息结果 List[dict] None
use_vector_retrieval 是否使用向量检索 bool True
vector_info 用于检索的向量信息 dict None
min_characters 所需的最小字符数。为大于0的正整数。 int 3500
text_task_description 文本任务的描述 str None
text_output_format 文本结果的输出格式 str None
text_rules_str 生成文本结果的规则 str None
text_few_shot_demo_text_content 用于少样本演示的文本内容 str None
text_few_shot_demo_key_value_list 用于少样本演示的键值列表 str None
table_task_description 表任务的描述 str None
table_output_format 表结果的输出格式 str None
table_rules_str 生成表结果的规则 str None
table_few_shot_demo_text_content 表少样本演示的文本内容 str None
table_few_shot_demo_key_value_list 表少样本演示的键值列表 str None
mllm_predict_info 多模态大模型结果 dict None None
mllm_integration_strategy 多模态大模型和大语言模型数据融合策略,支持单独使用其中一个或者融合两者结果。可选:"integration", "llm_only" and "mllm_only" str "integration"
chat_bot_config 大语言模型配置信息,与实例化时的参数相同。 dict None
retriever_config 向量检索大模型配置参数,与实例化时的参数相同。 dict None

该方法会将结果打印到终端,打印到终端的内容解释如下:

  • chat_res: (dict) 提取信息的结果,是一个字典,包含了待抽取的键和对应的值。

3. 开发集成/部署

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

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

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

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

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

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

API参考

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

  • HTTP请求方法为POST。
  • 请求体和响应体均为JSON数据JSON对象
  • 当请求处理成功时,响应状态码为200,响应体的属性如下:
名称 类型 含义
logId string 请求的UUID。
errorCode integer 错误码。固定为0
errorMsg string 错误说明。固定为"Success"
result object 操作结果。
  • 当请求处理未成功时,响应体的属性如下:
名称 类型 含义
logId string 请求的UUID。
errorCode integer 错误码。与响应状态码相同。
errorMsg string 错误说明。

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

  • analyzeImages

使用计算机视觉模型对图像进行分析获得OCR、表格识别结果等并提取图像中的关键信息。

POST /chatocr-visual

  • 请求体的属性如下:
名称 类型 含义 是否必填
file string 服务器可访问的图像文件或PDF文件的URL或上述类型文件内容的Base64编码结果。默认对于超过10页的PDF文件只有前10页的内容会被处理。
要解除页数限制,请在产线配置文件中添加以下配置:
Serving:
  extra:
    max_num_input_imgs: null
fileType integer | null 文件类型。0表示PDF文件1表示图像文件。若请求体无此属性则将根据URL推断文件类型。
useDocOrientationClassify boolean | null 请参阅产线对象中 visual_predict 方法的 use_doc_orientation_classify 参数相关说明。
useDocUnwarping boolean | null 请参阅产线对象中 visual_predict 方法的 use_doc_unwarping 参数相关说明。
useGeneralOcr boolean | null 请参阅产线对象中 visual_predict 方法的 use_general_ocr 参数相关说明。
useSealRecognition boolean | null 请参阅产线对象中 visual_predict 方法的 use_seal_recognition 参数相关说明。
useTableRecognition boolean | null 请参阅产线对象中 visual_predict 方法的 use_table_recognition 参数相关说明。
layoutThreshold number | null 请参阅产线对象中 visual_predict 方法的 layout_threshold 参数相关说明。
layoutNms boolean | null 请参阅产线对象中 visual_predict 方法的 layout_nms 参数相关说明。
layoutUnclipRatio number | array | object | null 请参阅产线对象中 visual_predict 方法的 layout_unclip_ratio 参数相关说明。
layoutMergeBboxesMode string | object | null 请参阅产线对象中 visual_predict 方法的 layout_merge_bboxes_mode 参数相关说明。
textDetLimitSideLen integer | null 请参阅产线对象中 visual_predict 方法的 text_det_limit_side_len 参数相关说明。
textDetLimitType string | null 请参阅产线对象中 visual_predict 方法的 text_det_limit_type 参数相关说明。
textDetThresh number | null 请参阅产线对象中 visual_predict 方法的 text_det_thresh 参数相关说明。
textDetBoxThresh number | null 请参阅产线对象中 visual_predict 方法的 text_det_box_thresh 参数相关说明。
textDetUnclipRatio number | null 请参阅产线对象中 visual_predict 方法的 text_det_unclip_ratio 参数相关说明。
textRecScoreThresh number | null 请参阅产线对象中 visual_predict 方法的 text_rec_score_thresh 参数相关说明。
sealDetLimitSideLen integer | null 请参阅产线对象中 visual_predict 方法的 seal_det_limit_side_len 参数相关说明。
sealDetLimitType string | null 请参阅产线对象中 visual_predict 方法的 seal_det_limit_type 参数相关说明。
sealDetThresh number | null 请参阅产线对象中 visual_predict 方法的 seal_det_thresh 参数相关说明。
sealDetBoxThresh number | null 请参阅产线对象中 visual_predict 方法的 seal_det_box_thresh 参数相关说明。
sealDetUnclipRatio number | null 请参阅产线对象中 visual_predict 方法的 seal_det_unclip_ratio 参数相关说明。
sealRecScoreThresh number | null 请参阅产线对象中 visual_predict 方法的 seal_rec_score_thresh 参数相关说明。
  • 请求处理成功时,响应体的result具有如下属性:
名称 类型 含义
layoutParsingResults array 使用计算机视觉模型得到的分析结果。数组长度为1对于图像输入或实际处理的文档页数对于PDF输入。对于PDF输入数组中的每个元素依次表示PDF文件中实际处理的每一页的结果。
visualInfo array 图像中的关键信息,可用作其他操作的输入。
dataInfo object 输入数据信息。

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

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

构建向量数据库。

POST /chatocr-vector

  • 请求体的属性如下:
名称 类型 含义 是否必填
visualInfo array 图像中的关键信息。由analyzeImages操作提供。
minCharacters integer | null 启用向量数据库的最小数据长度。
blockSize int | null 请参阅产线对象中 build_vector 方法的 block_size 参数相关说明。
retrieverConfig object | null 请参阅产线对象中 build_vector 方法的 retriever_config 参数相关说明。
  • 请求处理成功时,响应体的result具有如下属性:
名称 类型 含义
vectorInfo object 向量数据库序列化结果,可用作其他操作的输入。
  • invokeMLLM

调用多模态大模型。

POST /chatocr-mllm

  • 请求体的属性如下:
名称 类型 含义 是否必填
image string 服务器可访问的图像文件的URL或图像文件内容的Base64编码结果。
keyList array 键列表。
mllmChatBotConfig object | null 请参阅产线对象中 mllm_pred 方法的 mllm_chat_bot_config 参数相关说明。
  • 请求处理成功时,响应体的result具有如下属性:
名称 类型 含义
mllmPredictInfo object 多模态大模型调用结果。
  • chat

与大语言模型交互,利用大语言模型提炼关键信息。

POST /chatocr-chat

  • 请求体的属性如下:
名称 类型 含义 是否必填
keyList array 键列表。
visualInfo object 图像中的关键信息。由analyzeImages操作提供。
useVectorRetrieval boolean | null 请参阅产线对象中 chat 方法的 use_vector_retrieval 参数相关说明。
vectorInfo object | null 向量数据库序列化结果。由buildVectorStore操作提供。
minCharacters integer 启用向量数据库的最小数据长度
textTaskDescription string | null 请参阅产线对象中 chat 方法的 text_task_description 参数相关说明。
textOutputFormat string | null 请参阅产线对象中 chat 方法的 text_output_format 参数相关说明。
textRulesStr string | null 请参阅产线对象中 chat 方法的 text_rules_str 参数相关说明。
textFewShotDemoTextContent string | null 请参阅产线对象中 chat 方法的 text_few_shot_demo_text_content 参数相关说明。
textFewShotDemoKeyValueList string | null 请参阅产线对象中 chat 方法的 text_few_shot_demo_key_value_list 参数相关说明。
tableTaskDescription string | null 请参阅产线对象中 chat 方法的 table_task_description 参数相关说明。
tableOutputFormat string | null 请参阅产线对象中 chat 方法的 table_output_format 参数相关说明。
tableRulesStr string | null 请参阅产线对象中 chat 方法的 table_rules_str 参数相关说明。
tableFewShotDemoTextContent string | null 请参阅产线对象中 chat 方法的 table_few_shot_demo_text_content 参数相关说明。
tableFewShotDemoKeyValueList string | null 请参阅产线对象中 chat 方法的 table_few_shot_demo_key_value_list 参数相关说明。
mllmPredictInfo object | null 多模态大模型调用结果。由invokeMllm操作提供。
mllmIntegrationStrategy string | null 请参阅产线对象中 chat 方法的 mllm_integration_strategy 参数相关说明。
chatBotConfig object | null 请参阅产线对象中 chat 方法的 chat_bot_config 参数相关说明。
retrieverConfig object | null 请参阅产线对象中 chat 方法的 retriever_config 参数相关说明。
  • 请求处理成功时,响应体的result具有如下属性:
名称 类型 含义
chatResult object 关键信息抽取结果。
  • 注意:
  • 在请求体中包含大模型调用的API key等敏感参数可能存在安全风险。如无必要请在配置文件中设置这些参数在请求时不传递。

    多语言调用服务示例
    Python
    
    # 此脚本只展示了图片的用例其他文件类型的调用请查看API参考来调整
    
    import base64
    import pprint
    import sys
    import requests
    
    
    API_BASE_URL = "http://0.0.0.0:8080"
    
    image_path = "./demo.jpg"
    keys = ["姓名"]
    
    with open(image_path, "rb") as file:
        image_bytes = file.read()
        image_data = base64.b64encode(image_bytes).decode("ascii")
    
    payload = {
        "file": image_data,
        "fileType": 1,
    }
    
    resp_visual = requests.post(url=f"{API_BASE_URL}/chatocr-visual", json=payload)
    if resp_visual.status_code != 200:
        print(
            f"Request to chatocr-visual failed with status code {resp_visual.status_code}."
        )
        pprint.pp(resp_visual.json())
        sys.exit(1)
    result_visual = resp_visual.json()["result"]
    
    for i, res in enumerate(result_visual["layoutParsingResults"]):
        print(res["prunedResult"])
        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}")
    
    payload = {
        "visualInfo": result_visual["visualInfo"],
    }
    resp_vector = requests.post(url=f"{API_BASE_URL}/chatocr-vector", json=payload)
    if resp_vector.status_code != 200:
        print(
            f"Request to chatocr-vector failed with status code {resp_vector.status_code}."
        )
        pprint.pp(resp_vector.json())
        sys.exit(1)
    result_vector = resp_vector.json()["result"]
    
    payload = {
        "image": image_data,
        "keyList": keys,
    }
    resp_mllm = requests.post(url=f"{API_BASE_URL}/chatocr-mllm", json=payload)
    if resp_mllm.status_code != 200:
        print(
            f"Request to chatocr-mllm failed with status code {resp_mllm.status_code}."
        )
        pprint.pp(resp_mllm.json())
        sys.exit(1)
    result_mllm = resp_mllm.json()["result"]
    
    payload = {
        "keyList": keys,
        "visualInfo": result_visual["visualInfo"],
        "useVectorRetrieval": True,
        "vectorInfo": result_vector["vectorInfo"],
        "mllmPredictInfo": result_mllm["mllmPredictInfo"],
    }
    resp_chat = requests.post(url=f"{API_BASE_URL}/chatocr-chat", json=payload)
    if resp_chat.status_code != 200:
        print(
            f"Request to chatocr-chat failed with status code {resp_chat.status_code}."
        )
        pprint.pp(resp_chat.json())
        sys.exit(1)
    result_chat = resp_chat.json()["result"]
    print("Final result:")
    print(result_chat["chatResult"])
    

    4. 二次开发

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

    ......