PP-ChatOCRv3—文档场景信息抽取v3产线使用教程

news2024/10/21 21:20:12

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

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

文档场景信息抽取v3(PP-ChatOCRv3)是飞桨特色的文档和图像智能分析解决方案,结合了 LLM 和 OCR 技术,一站式解决版面分析、生僻字、多页 pdf、表格、印章识别等常见的复杂文档信息抽取难点问题,结合文心大模型将海量数据和知识相融合,准确率高且应用广泛。

在这里插入图片描述

文档场景信息抽取v3产线中包含表格结构识别模块版面区域检测模块文本检测模块文本识别模块印章文本检测模块文本图像矫正模块文档图像方向分类模块

如您更考虑模型精度,请选择精度较高的模型,如您更考虑模型推理速度,请选择推理速度较快的模型,如您更考虑模型存储大小,请选择存储大小较小的模型。其中部分模型的 benchmark 如下:

👉模型列表详情

表格结构识别模块模型:

模型精度(%)GPU推理耗时 (ms)CPU推理耗时(ms)模型存储大小 (M)介绍
SLANet59.52522.5361845.376.9 MSLANet 是百度飞桨视觉团队自研的表格结构识别模型。该模型通过采用CPU 友好型轻量级骨干网络PP-LCNet、高低层特征融合模块CSP-PAN、结构与位置信息对齐的特征解码模块SLA Head,大幅提升了表格结构识别的精度和推理速度。
SLANet_plus63.69522.5361845.376.9 MSLANet_plus 是百度飞桨视觉团队自研的表格结构识别模型SLANet的增强版。相较于SLANet,SLANet_plus 对无线表、复杂表格的识别能力得到了大幅提升,并降低了模型对表格定位准确性的敏感度,即使表格定位出现偏移,也能够较准确地进行识别。

注:以上精度指标测量PaddleX 内部自建英文表格识别数据集。所有模型 GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel® Xeon® Gold 5117 CPU @ 2.00GHz,线程数为8,精度类型为 FP32。

版面区域检测模块模型:

模型mAP(0.5)(%)GPU推理耗时(ms)CPU推理耗时 (ms)模型存储大小(M)介绍
PicoDet_layout_1x86.813.091.37.4基于PicoDet-1x在PubLayNet数据集训练的高效率版面区域定位模型,可定位包含文字、标题、表格、图片以及列表这5类区域
PicoDet-L_layout_3cls89.315.7159.822.6基于PicoDet-L在中英文论文、杂志和研报等场景上自建数据集训练的高效率版面区域定位模型,包含3个类别:表格,图像和印章
RT-DETR-H_layout_3cls95.9114.63832.6470.1基于RT-DETR-H在中英文论文、杂志和研报等场景上自建数据集训练的高精度版面区域定位模型,包含3个类别:表格,图像和印章
RT-DETR-H_layout_17cls92.6115.13827.2470.2基于RT-DETR-H在中英文论文、杂志和研报等场景上自建数据集训练的高精度版面区域定位模型,包含17个版面常见类别,分别是:段落标题、图片、文本、数字、摘要、内容、图表标题、公式、表格、表格标题、参考文献、文档标题、脚注、页眉、算法、页脚、印章

注:以上精度指标的评估集是 PaddleOCR 自建的版面区域分析数据集,包含中英文论文、杂志和研报等常见的 1w 张文档类型图片。GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel® Xeon® Gold 5117 CPU @ 2.00GHz,线程数为 8,精度类型为 FP32。

文本检测模块模型:

模型检测Hmean(%)GPU推理耗时(ms)CPU推理耗时 (ms)模型存储大小(M)介绍
PP-OCRv4_server_det82.6983.35012434.01109PP-OCRv4 的服务端文本检测模型,精度更高,适合在性能较好的服务器上部署
PP-OCRv4_mobile_det77.7910.6923120.1774.7PP-OCRv4 的移动端文本检测模型,效率更高,适合在端侧设备部署

注:以上精度指标的评估集是 PaddleOCR 自建的中文数据集,覆盖街景、网图、文档、手写多个场景,其中检测包含 500 张图片。以上所有模型 GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel® Xeon® Gold 5117 CPU @ 2.00GHz,线程数为8,精度类型为 FP32。

文本识别模块模型:

模型识别 Avg Accuracy(%)GPU推理耗时(ms)CPU推理耗时 (ms)模型存储大小(M)介绍
PP-OCRv4_mobile_rec78.207.9501846.786810.6 MPP-OCRv4是百度飞桨视觉团队自研的文本识别模型PP-OCRv3的下一个版本,通过引入数据增强方案、GTC-NRTR指导分支等策略,在模型推理速度不变的情况下,进一步提升了文本识别精度。该模型提供了服务端(server)和移动端(mobile)两个不同版本,来满足不同场景下的工业需求。
PP-OCRv4_server_rec 79.207.19439140.17971.2 M

注:以上精度指标的评估集是 PaddleOCR 自建的中文数据集,覆盖街景、网图、文档、手写多个场景,其中文本识别包含 1.1w 张图片。所有模型 GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel® Xeon® Gold 5117 CPU @ 2.00GHz,线程数为8,精度类型为 FP32。

模型识别 Avg Accuracy(%)GPU推理耗时(ms)CPU推理耗时(ms)模型存储大小(M)介绍
ch_SVTRv2_rec68.818.36801165.70673.9 M SVTRv2 是一种由复旦大学视觉与学习实验室(FVL)的OpenOCR团队研发的服务端文本识别模型,其在PaddleOCR算法模型挑战赛 - 赛题一:OCR端到端识别任务中荣获一等奖,A榜端到端识别精度相比PP-OCRv4提升6%。

注:以上精度指标的评估集是 PaddleOCR算法模型挑战赛 - 赛题一:OCR端到端识别任务A榜。 所有模型 GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel® Xeon® Gold 5117 CPU @ 2.00GHz,线程数为8,精度类型为 FP32。

模型识别 Avg Accuracy(%)GPU推理耗时(ms)CPU推理耗时(ms)模型存储大小(M)介绍
ch_RepSVTR_rec65.0710.504751.564722.1 M RepSVTR 文本识别模型是一种基于SVTRv2 的移动端文本识别模型,其在PaddleOCR算法模型挑战赛 - 赛题一:OCR端到端识别任务中荣获一等奖,B榜端到端识别精度相比PP-OCRv4提升2.5%,推理速度持平。

注:以上精度指标的评估集是 PaddleOCR算法模型挑战赛 - 赛题一:OCR端到端识别任务B榜。 所有模型 GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel® Xeon® Gold 5117 CPU @ 2.00GHz,线程数为8,精度类型为 FP32。

印章文本检测模块模型:

模型检测Hmean(%)GPU推理耗时(ms)CPU推理耗时 (ms)模型存储大小(M)介绍
PP-OCRv4_server_seal_det98.2184.3412425.06109PP-OCRv4的服务端印章文本检测模型,精度更高,适合在较好的服务器上部署
PP-OCRv4_mobile_seal_det96.4710.5878131.8134.6PP-OCRv4的移动端印章文本检测模型,效率更高,适合在端侧部署

注:以上精度指标的评估集是自建的数据集,包含500张圆形印章图像。GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel® Xeon® Gold 5117 CPU @ 2.00GHz,线程数为 8,精度类型为 FP32。

文本图像矫正模块模型:

模型MS-SSIM (%)模型存储大小(M)介绍
UVDoc54.4030.3 M高精度文本图像矫正模型

模型的精度指标测量自 DocUNet benchmark。

文档图像方向分类模块模型:

模型Top-1 Acc(%)GPU推理耗时(ms)CPU推理耗时 (ms)模型存储大小(M)介绍
PP-LCNet_x1_0_doc_ori99.063.848459.237357基于PP-LCNet_x1_0的文档图像分类模型,含有四个类别,即0度,90度,180度,270度

注:以上精度指标的评估集是自建的数据集,覆盖证件和文档等多个场景,包含 1000 张图片。GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel® Xeon® Gold 5117 CPU @ 2.00GHz,线程数为 8,精度类型为 FP32。


2. 快速开始

PaddleX 所提供的预训练的模型产线均可以快速体验效果,你可以在线体验文档场景信息抽取v3产线的效果,也可以在本地使用 Python 体验文档场景信息抽取v3产线的效果。

2.1 在线体验

您可以在线体验文档场景信息抽取v3产线的效果,用官方提供的 Demo 图片进行识别,例如:

在这里插入图片描述

如果您对产线运行的效果满意,可以直接对产线进行集成部署,如果不满意,您也可以利用私有数据对产线中的模型进行在线微调

2.2 本地体验

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

几行代码即可完成产线的快速推理,使用 测试文件,以通用文档场景信息抽取v3产线为例:

from paddlex import create_pipeline

pipeline = create_pipeline(
    pipeline="PP-ChatOCRv3-doc",
    llm_name="ernie-3.5",
    llm_params={"api_type": "qianfan", "ak": "", "sk": ""} # 请填入您的ak与sk,否则无法调用大模型
    # llm_params={"api_type": "aistudio", "access_token": ""} # 请填入您的access_token,否则无法调用大模型
    )

visual_result, visual_info = pipeline.visual_predict("https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/contract.pdf")

for res in visual_result:
    res.save_to_img("./output")
    res.save_to_html('./output')
    res.save_to_xlsx('./output')

vector = pipeline.build_vector(visual_info=visual_info)

chat_result = pipeline.chat(
    key_list=["乙方", "手机号"],
    visual_info=visual_info,
    vector=vector,
    )
chat_result.print()

:目前仅支持文心大模型,支持在百度云千帆平台或者星河社区 AIStudio上获取相关的 ak/sk(access_token)。如果使用百度云千帆平台,可以参考AK和SK鉴权调用API流程 获取ak/sk,如果使用星河社区 AIStudio,可以在星河社区 AIStudio 访问令牌中获取 access_token。

运行后,输出结果如下:

{'chat_res': {'乙方': '股份测试有限公司', '手机号': '19331729920'}, 'prompt': ''}

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

(1)调用 create_pipeline 方法实例化文档场景信息抽取v3产线对象,相关参数说明如下:

参数参数类型默认值参数说明
pipelinestr产线名称或是产线配置文件路径,如为产线名称,则必须为 PaddleX 所支持的产线;
llm_namestr“ernie-3.5”大语言模型名称,目前支持ernie-4.0ernie-3.5,更多模型支持中;
llm_paramsdict{}LLM相关API配置;
devicestr、NoneNone运行设备(None为自动适配);

(2)调用文档场景信息抽取v3产线对象的 visual_predict 方法进行视觉推理预测,相关参数说明如下:

参数参数类型默认值参数说明
inputPython Var用于输入待预测数据,支持直接传入Python变量,如numpy.ndarray表示的图像数据;
inputstr用于输入待预测数据,支持传入待预测数据文件路径,如图像文件的本地路径:/root/data/img.jpg
inputstr用于输入待预测数据,支持传入待预测数据文件url,如https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/contract.pdf
inputstr用于输入待预测数据,支持传入本地目录,该目录下需包含待预测数据文件,如本地路径:/root/data/
inputdict用于输入待预测数据,支持传入字典类型,字典的key需要与具体产线对应,如文档场景信息抽取v3产线为"img",字典的val支持上述类型数据,如:{"img": "/root/data1"}
inputlist用于输入待预测数据,支持传入列表,列表元素需为上述类型数据,如[numpy.ndarray, numpy.ndarray]["/root/data/img1.jpg", "/root/data/img2.jpg"]["/root/data1", "/root/data2"][{"img": "/root/data1"}, {"img": "/root/data2/img.jpg"}]
use_doc_image_ori_cls_modelboolTrue是否使用方向分类模型;
use_doc_image_unwarp_modelboolTrue是否使用版面矫正产线;
use_seal_text_det_modelboolTrue是否使用弯曲文本检测产线;

(3)调用视觉推理预测结果对象的相关方法对视觉推理预测结果进行保存,具体方法如下:

方法参数方法说明
save_to_imgsave_path将OCR预测结果、版面分析结果、表格识别结果保存为图片文件,参数save_path用于指定保存的路径;
save_to_htmlsave_path将表格识别结果保存为html文件,参数save_path用于指定保存的路径;
save_to_xlsxsave_path将表格识别结果保存为xlsx文件,参数save_path用于指定保存的路径;

(4)调用文档场景信息抽取v3产线对象的 chat 方法与大模型进行交互,相关参数说明如下:

参数参数类型默认值参数说明
key_liststr用于查询的关键字(query);支持“,”或“,”作为分隔符的多个关键字组成的字符串,如“乙方,手机号”;
key_listlist用于查询的关键字(query),支持list形式表示的一组关键字,其元素为str类型;

在执行上述 Python 脚本时,加载的是默认的文档场景信息抽取v3产线配置文件,若您需要自定义配置文件,可执行如下命令获取:

paddlex --get_pipeline_config PP-ChatOCRv3-doc

执行后,文档场景信息抽取v3产线配置文件将被保存在当前路径。若您希望自定义保存位置,可执行如下命令(假设自定义保存位置为 ./my_path ):

paddlex --get_pipeline_config PP-ChatOCRv3-doc --save_path ./my_path

获取配置文件后,您即可对文档场景信息抽取v3产线各项配置进行自定义:

Pipeline:
  layout_model: RT-DETR-H_layout_3cls
  table_model: SLANet_plus
  text_det_model: PP-OCRv4_server_det
  text_rec_model: PP-OCRv4_server_rec
  seal_text_det_model: PP-OCRv4_server_seal_det
  doc_image_ori_cls_model: null
  doc_image_unwarp_model: null
  llm_name: "ernie-3.5"
  llm_params:
    api_type: qianfan
    ak:
    sk:

在上述配置中,您可以修改产线各模块加载的模型,也可以修改使用的大模型。各模块支持模型列表请参考模块文档,大模型支持列表为:ernie-4.0、ernie-3.5、ernie-3.5-8k、ernie-lite、ernie-tiny-8k、ernie-speed、ernie-speed-128k、ernie-char-8k。

修改后,只需要修改 create_pipeline 方法中的 pipeline 参数值为产线配置文件路径即可应用配置。

例如,若您的配置文件保存在 ./my_path/PP-ChatOCRv3-doc.yaml ,则只需执行:

from paddlex import create_pipeline

pipeline = create_pipeline(
    pipeline="./my_path/PP-ChatOCRv3-doc.yaml",
    llm_name="ernie-3.5",
    llm_params={"api_type": "qianfan", "ak": "", "sk": ""} # 请填入您的ak与sk,否则无法调用大模型
    # llm_params={"api_type": "aistudio", "access_token": ""} # 请填入您的access_token,否则无法调用大模型
    )

visual_result, visual_info = pipeline.visual_predict("https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/contract.pdf")

for res in visual_result:
    res.save_to_img("./output")
    res.save_to_html('./output')
    res.save_to_xlsx('./output')

vector = pipeline.build_vector(visual_info=visual_info)

chat_result = pipeline.chat(
    key_list=["乙方", "手机号"],
    visual_info=visual_info,
    vector=vector,
    )
chat_result.print()

3. 开发集成/部署

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

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

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

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

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

下面是API参考和多语言服务调用示例:

API参考

对于服务提供的所有操作:

  • 响应体以及POST请求的请求体均为JSON数据(JSON对象)。

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

    名称类型含义
    errorCodeinteger错误码。固定为0
    errorMsgstring错误说明。固定为"Success"

    响应体还可能有result属性,类型为object,其中存储操作结果信息。

  • 当请求处理未成功时,响应体的属性如下:

    名称类型含义
    errorCodeinteger错误码。与响应状态码相同。
    errorMsgstring错误说明。

服务提供的操作如下:

  • analyzeImage

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

    POST /chatocr-vision

    • 请求体的属性如下:

      名称类型含义是否必填
      filestring服务可访问的图像文件或PDF文件的URL,或上述类型文件内容的Base64编码结果。对于超过10页的PDF文件,只有前10页的内容会被使用。
      fileTypeinteger文件类型。0表示PDF文件,1表示图像文件。若请求体无此属性,则服务将尝试根据URL自动推断文件类型。
      useImgOrientationClsboolean是否启用文档图像方向分类功能。默认启用该功能。
      useImgUnwrappingboolean是否启用文本图像矫正功能。默认启用该功能。
      useSealTextDetboolean是否启用印章文本检测功能。默认启用该功能。
      inferenceParamsobject推理参数。

      inferenceParams的属性如下:

      名称类型含义是否必填
      maxLongSideinteger推理时,若文本检测模型的输入图像较长边的长度大于maxLongSide,则将对图像进行缩放,使其较长边的长度等于maxLongSide
    • 请求处理成功时,响应体的result具有如下属性:

      名称类型含义
      visionResultsarray使用计算机视觉模型得到的分析结果。数组长度为1(对于图像输入)或文档页数与10中的较小者(对于PDF输入)。对于PDF输入,数组中的每个元素依次表示PDF文件中每一页的处理结果。
      visionInfoobject图像中的关键信息,可用作其他操作的输入。

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

      名称类型含义
      textsarray文本位置、内容和得分。
      tablesarray表格位置和内容。
      inputImagestring输入图像。图像为JPEG格式,使用Base64编码。
      ocrImagestringOCR结果图。图像为JPEG格式,使用Base64编码。
      layoutImagestring版面区域检测结果图。图像为JPEG格式,使用Base64编码。

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

      名称类型含义
      polyarray文本位置。数组中元素依次为包围文本的多边形的顶点坐标。
      textstring文本内容。
      scorenumber文本识别得分。

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

      名称类型含义
      bboxarray表格位置。数组中元素依次为边界框左上角x坐标、左上角y坐标、右下角x坐标以及右下角y坐标。
      htmlstringHTML格式的表格识别结果。
  • buildVectorStore

    构建向量数据库。

    POST /chatocr-vector

    • 请求体的属性如下:

      名称类型含义是否必填
      visionInfoobject图像中的关键信息。由analyzeImage操作提供。
      minCharsinteger启用向量数据库的最小数据长度。
      llmRequestIntervalnumber调用大语言模型API的间隔时间。
      llmNamestring大语言模型名称。
      llmParamsobject大语言模型API参数。

      当前,llmParams 可以采用如下形式:

      {
        "apiType": "qianfan",
        "apiKey": "{千帆平台API key}",
        "secretKey": "{千帆平台secret key}"
      }
      
    • 请求处理成功时,响应体的result具有如下属性:

      名称类型含义
      vectorStorestring向量数据库序列化结果,可用作其他操作的输入。
  • retrieveKnowledge

    进行知识检索。

    POST /chatocr-retrieval

    • 请求体的属性如下:

      名称类型含义是否必填
      keysarray关键词列表。
      vectorStorestring向量数据库序列化结果。由buildVectorStore操作提供。
      llmNamestring大语言模型名称。
      llmParamsobject大语言模型API参数。

      当前,llmParams 可以采用如下形式:

      {
        "apiType": "qianfan",
        "apiKey": "{千帆平台API key}",
        "secretKey": "{千帆平台secret key}"
      }
      
    • 请求处理成功时,响应体的result具有如下属性:

      名称类型含义
      retrievalResultstring知识检索结果,可用作其他操作的输入。
  • chat

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

    POST /chatocr-vision

    • 请求体的属性如下:

      名称类型含义是否必填
      keysarray关键词列表。
      visionInfoobject图像中的关键信息。由analyzeImage操作提供。
      taskDescriptionstring提示词任务。
      rulesstring提示词规则。用于自定义信息抽取规则,例如规范输出格式。
      fewShotstring提示词示例。
      vectorStorestring向量数据库序列化结果。由buildVectorStore操作提供。
      retrievalResultstring知识检索结果。由retrieveKnowledge操作提供。
      returnPromptsboolean是否返回使用的提示词。默认启用。
      llmNamestring大语言模型名称。
      llmParamsobject大语言模型API参数。

      当前,llmParams 可以采用如下形式:

      {
        "apiType": "qianfan",
        "apiKey": "{千帆平台API key}",
        "secretKey": "{千帆平台secret key}"
      }
      
    • 请求处理成功时,响应体的result具有如下属性:

      名称类型含义
      chatResultobject关键信息抽取结果。
      promptsobject使用的提示词。

      prompts的属性如下:

      名称类型含义
      ocrstringOCR提示词。
      tablestring表格提示词。
      htmlstringHTML提示词。
多语言调用服务示例 Python
import base64
import pprint
import sys

import requests


API_BASE_URL = "http://0.0.0.0:8080"
API_KEY = "{千帆平台API key}"
SECRET_KEY = "{千帆平台secret key}"
LLM_NAME = "ernie-3.5"
LLM_PARAMS = {
    "apiType": "qianfan",
    "apiKey": API_KEY,
    "secretKey": SECRET_KEY,
}

file_path = "./demo.jpg"
keys = ["电话"]

with open(file_path, "rb") as file:
    file_bytes = file.read()
    file_data = base64.b64encode(file_bytes).decode("ascii")

payload = {
    "file": file_data,
    "fileType": 1,
    "useImgOrientationCls": True,
    "useImgUnwrapping": True,
    "useSealTextDet": True,
}
resp_vision = requests.post(url=f"{API_BASE_URL}/chatocr-vision", json=payload)
if resp_vision.status_code != 200:
    print(
        f"Request to chatocr-vision failed with status code {resp_vision.status_code}."
    )
    pprint.pp(resp_vision.json())
    sys.exit(1)
result_vision = resp_vision.json()["result"]

for i, res in enumerate(result_vision["visionResults"]):
    print("Texts:")
    pprint.pp(res["texts"])
    print("Tables:")
    pprint.pp(res["tables"])
    ocr_img_path = f"ocr_{i}.jpg"
    with open(ocr_img_path, "wb") as f:
        f.write(base64.b64decode(res["ocrImage"]))
    layout_img_path = f"layout_{i}.jpg"
    with open(layout_img_path, "wb") as f:
        f.write(base64.b64decode(res["layoutImage"]))
    print(f"Output images saved at {ocr_img_path} and {layout_img_path}")

payload = {
    "visionInfo": result_vision["visionInfo"],
    "minChars": 200,
    "llmRequestInterval": 1000,
    "llmName": LLM_NAME,
    "llmParams": LLM_PARAMS,
}
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 = {
    "keys": keys,
    "vectorStore": result_vector["vectorStore"],
    "llmName": LLM_NAME,
    "llmParams": LLM_PARAMS,
}
resp_retrieval = requests.post(url=f"{API_BASE_URL}/chatocr-retrieval", json=payload)
if resp_retrieval.status_code != 200:
    print(
        f"Request to chatocr-retrieval failed with status code {resp_retrieval.status_code}."
    )
    pprint.pp(resp_retrieval.json())
    sys.exit(1)
result_retrieval = resp_retrieval.json()["result"]

payload = {
    "keys": keys,
    "visionInfo": result_vision["visionInfo"],
    "taskDescription": "",
    "rules": "",
    "fewShot": "",
    "vectorStore": result_vector["vectorStore"],
    "retrievalResult": result_retrieval["retrievalResult"],
    "returnPrompts": True,
    "llmName": LLM_NAME,
    "llmParams": LLM_PARAMS,
}
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("\nPrompts:")
pprint.pp(result_chat["prompts"])
print("Final result:")
print(result_chat["chatResult"])

:请在 API_KEYSECRET_KEY 处填入您的 API key 和 secret key。


📱 端侧部署:端侧部署是一种将计算和数据处理功能放在用户设备本身上的方式,设备可以直接处理数据,而不需要依赖远程的服务器。PaddleX 支持将模型部署在 Android 等端侧设备上,详细的端侧部署流程请参考PaddleX端侧部署指南。
您可以根据需要选择合适的方式部署模型产线,进而进行后续的 AI 应用集成。

4. 二次开发

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

4.1 模型微调

由于通用文档场景信息抽取v3产线包含六个模块,模型产线的效果不及预期可能来自于其中任何一个模块(文本图像矫正模块暂不支持二次开发)。

您可以对识别效果差的图片进行分析,参考如下规则进行分析和模型微调:

  • 检测到的表格结构错误(如行列识别错误、单元格位置错误),那么可能是表格结构识别模块存在不足,您需要参考表格结构识别模块开发教程中的二次开发章节,使用您的私有数据集对表格结构识别模型进行微调。
  • 版面中存在定位错误(例如对表格、印章的位置识别错误),那么可能是版面区域定位模块存在不足,您需要参考版面区域检测模块开发教程中的二次开发章节,使用您的私有数据集对版面区域定位模型进行微调。
  • 有较多的文本未被检测出来(即文本漏检现象),那么可能是文本检测模型存在不足,您需要参考文本检测模块开发教程中的二次开发章节,使用您的私有数据集对文本检测模型进行微调。
  • 已检测到的文本中出现较多的识别错误(即识别出的文本内容与实际文本内容不符),这表明文本识别模型需要进一步改进,您需要参考文本识别模块开发教程中的二次开发章节对文本识别模型进行微调。
  • 已检测到的印章文本出现较多的识别错误,这表明印章文本检测模块模型需要进一步改进,您需要参考印章文本检测模块开发教程中的二次开发章节对印章文本检测模型进行微调。
  • 含文字区域的文档或证件的方向存在较多的识别错误,这表明文档图像方向分类模型需要进一步改进,您需要参考文档图像方向分类模块开发教程中的二次开发章节对文档图像方向分类模型进行微调。

4.2 模型应用

当您使用私有数据集完成微调训练后,可获得本地模型权重文件。

若您需要使用微调后的模型权重,只需对产线配置文件做修改,将微调后模型权重的本地路径替换至产线配置文件中的对应位置即可:

......
Pipeline:
  layout_model: RT-DETR-H_layout_3cls  #可修改为微调后模型的本地路径
  table_model: SLANet_plus  #可修改为微调后模型的本地路径
  text_det_model: PP-OCRv4_server_det  #可修改为微调后模型的本地路径
  text_rec_model: PP-OCRv4_server_rec  #可修改为微调后模型的本地路径
  seal_text_det_model: PP-OCRv4_server_seal_det  #可修改为微调后模型的本地路径
  doc_image_ori_cls_model: null   #可修改为微调后模型的本地路径
  doc_image_unwarp_model: null   #可修改为微调后模型的本地路径
......

随后, 参考本地体验中的命令行方式或 Python 脚本方式,加载修改后的产线配置文件即可。

5. 多硬件支持

PaddleX 支持英伟达 GPU、昆仑芯 XPU、昇腾 NPU 和寒武纪 MLU 等多种主流硬件设备,仅需设置 device 参数即可完成不同硬件之间的无缝切换。

例如,使用文档场景信息抽取v3产线时,将运行设备从英伟达 GPU 更改为昇腾 NPU,仅需将脚本中的 device 修改为 npu 即可:

from paddlex import create_pipeline
pipeline = create_pipeline(
    pipeline="PP-ChatOCRv3-doc",
    llm_name="ernie-3.5",
    llm_params={"api_type": "qianfan", "ak": "", "sk": ""},
    device="npu:0" # gpu:0 --> npu:0
    )

若您想在更多种类的硬件上使用通用文档场景信息抽取产线,请参考PaddleX多硬件使用指南。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2220297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring连接数据库:Mybatis

MyBatis是一款优秀的框架 在数据库中创建表 1.创建项目mybatis 2.在proxml文件中导入必要配置并进行编译 <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33<…

电能表预付费系统-标准传输规范(STS)(15)

6.3.7 CRC: CyclicRedundancyCheck (循环冗余校验) The CRC is a checksum field used to verify the integrity of the data transferred for all tokens, except for Class 0 with SubClass 4 to 7, which uses CRC_C (see 6.3.22). The checksum is derived using the foll…

网络基础知识:交换机关键知识解析

了解交换机的关键知识对网络工程师至关重要。 以下是交换机的基础知识解析&#xff0c;包括其基本概念、工作原理和关键技术点&#xff1a; 01-交换机的基本概念 交换机是一种网络设备&#xff0c;用于在局域网&#xff08;LAN&#xff09;中连接多个设备&#xff0c;如计算机…

如何恢复U盘里格式化数据?别慌,有带图详细步骤!

U盘&#xff0c;这个小巧的存储神器&#xff0c;我们几乎天天都在用。但有时候&#xff0c;一不小心手滑&#xff0c;U盘就被格式化了&#xff0c;里面的东西好像全没了&#xff0c;别急&#xff0c;其实数据恢复没那么难。这篇文章就来告诉你&#xff0c;怎么把格式化的U盘里的…

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备云台接入及控制详解

在当今快速发展的信息化时代&#xff0c;视频监控系统已成为企业管理和安全防范的重要工具。随着技术的不断进步&#xff0c;多品牌NVR&#xff08;网络视频录像机&#xff09;管理工具如海康NVR管理平台/工具EasyNVR多个NVR同时管理凭借其强大的兼容性和智能化管理功能&#x…

【LInux】Shell脚本编写基本语法

文章目录 一、前期准备1、查看本机bash2、编辑脚本 二、 判断结构1、if结构2、if/else结构3、if/elif/else结构4、case结构 三、循环结构1、for循环2、while循环3、until循环 四、谢谢观看&#xff01; 一、前期准备 1、查看本机bash which bash之后编写脚本时&#xff0c;第…

数据同步工具Sqoop原理及场景优化

目录 0 数据同步策略 1 数据同步工具 ​编辑 2 Sqoop同步数据原理分析 2.1 原理分析 2.2 Sqoop基本使用分析 3 切片逻辑 3.1 MR切片逻辑 3.2 Hive CombineInputformat切片逻辑 3.3 实验1:Map任务并行度分析1 3.4 实验2: Map任务并行度分析2 3.5 实验3:Map任务并行…

C++ 类的基础用法与详细说明:简单易懂的入门指南

什么是类&#xff1f; C类_百度百科 类是C中一种用于封装数据和功能的基本结构。你可以将类视为一种自定义的数据类型&#xff0c;它可以包含数据&#xff08;成员变量&#xff09;和操作这些数据的函数&#xff08;成员函数&#xff09;。 创建一个简单的类 让我们通过一个…

Java爬虫:获取商品评论数据的高效工具

在电子商务的激烈竞争中&#xff0c;商品评论作为消费者购买决策的重要参考&#xff0c;对于商家来说具有极高的价值。它不仅能够帮助商家了解消费者的需求和反馈&#xff0c;还能作为改进产品和服务的依据。Java爬虫技术&#xff0c;以其稳健性和高效性&#xff0c;成为了获取…

Vue2的依赖注入(跨级通信)基本使用

provide(提供) &#xff0c;inject(注入) 祖先级组件用provide传递数据,它的所有后代都可以通过inject取到数据 使用演示&#xff1a; //祖先组件 <template><div>父组件传的值&#xff1a;{{num}} </div> </template><script> //导入子组件 i…

SourceMonitor,免费代码统计工具,覆盖率,圈复杂度,代码行

SourceMonitor是一款免费的代码度量工具&#xff0c;包含代码行&#xff0c;覆盖率&#xff08;无条件覆盖率&#xff09;&#xff0c;圈复杂度&#xff0c;函数调用深度等指标的测量。 用以下软件安装包&#xff0c;低版本的初始化工程会闪退&#xff0c;工具下载路径&#xf…

Python(numpy库)

numpy基础 NumPy 的全称是“ Numeric Python”&#xff0c;它是 Python 的第三方扩展包&#xff0c;主要用来计算、处理一维或多维数组 ndarray NumPy 定义了一个 n 维数组对象&#xff0c;简称 ndarray 对象&#xff0c;它是一个一系列相同类型元素组成的数组集合。数组中的…

h5页面与小程序页面互相跳转

小程序跳转h5页面 一个home页 /pages/home/home 一个含有点击事件的元素&#xff1a;<button type"primary" bind:tap"toWebView">点击跳转h5页面</button>toWebView(){ wx.navigateTo({ url: /pages/webview/webview }) } 一个webView页 /pa…

springboot二手交易平台

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…

电脑上的顽固软件卸载不干净?试试这几款卸载工具,简单几步解决

相信大家日常的工作或学习生活中&#xff0c;都需要使用电脑&#xff0c;而为了完成工作&#xff0c;都会在电脑上安装一些工具。有时候不需要这些工具了&#xff0c;想要卸载时&#xff0c;发现有些软件太顽固了&#xff0c;卸载不掉&#xff0c;或者是卸载不干净。如果您也遇…

uniapp-uniapp + vue3 + pinia 搭建uniapp模板

使用技术 ⚡️uni-app, Vue3, Vite, pnpm &#x1f4e6; 组件自动化引入 &#x1f34d; 使用 Pinia 的状态管理 &#x1f3a8; tailwindcss - 高性能且极具灵活性的即时原子化 CSS 引擎 &#x1f603; 各种图标集为你所用 &#x1f525; 使用 新的 <script setup> …

Excel功能区变灰是什么原因造成?怎么解决?

Microsoft Excel是广泛使用的电子表格软件&#xff0c;但有时用户可能会遇到功能区变灰的问题&#xff0c;这可能导致功能无法使用&#xff0c;影响工作效率和用户体验。本文将深入探讨Excel功能区灰色的原因及解决方案&#xff0c;帮助读者快速解决这一问题。 一、Excel功能区…

Polypyus部署、使用与原理分析

文章目录 前言1、概述2、安装与使用2.1、源码安装2.1.1、部署系统依赖组件2.1.2、使用源码安装系统 2.2、使用方法2.2.1、命令行界面操作方法2.2.2、图形界面操作方法 3、测试用例4、参考文献总结 前言 本博客的主要内容为Polypyus的部署、使用与原理分析。本博文内容较长&…

【Linux】Linux之基础IO

我们先回顾一下C文件接口, #include <stdio.h> #include <string.h>int main() {FILE *fp fopen("myfile", "w");if (!fp){printf("fopen error!\n");}const char *msg "hello world!\n";int count 5;while (count--)…

DORA 机器人中间件学习教程(5)——3D激光雷达数据可视化

DORA中3D激光雷达数据可视化 1 总体思路2 DORA数据接收节点3 编写yml文件4 启动节点参考资料 截止目前 DORA还没有类似于ROS2中RVIZ这样的可视化工具&#xff0c;而在调试算法时我们又需要将数据进行可视化以验证代码的正确性。目前的解决方法是将DORA中的数据发送到ROS2中&…