Published on

在 CPU 服务器上部署 PaddleOCR

Authors
  • avatar
    Name
    Duck
    Twitter

项目中需要对 PDF 文档进行文本提取,但传统的 OCR 方式对表格等结构化数据不太准确,最终选择使用 PaddleOCR来进行识别。

安装 paddlex

PaddleX 是基于飞桨框架构建的低代码开发工具,支持快速服务化部署 PaddleOCR。

这里使用官方提供的Docker 快速部署 paddlex

# 对于 CPU 用户
docker run --name paddlex -v $PWD:/paddle --shm-size=8g --network=host -d -it ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlex/paddlex:paddlex3.1.2-paddlepaddle3.0.0-cpu /bin/bash

接下来的命令,都是在 docker 容器中操作。

选择性安装依赖组,这里我只需要 OCR。

pip install "paddlex[ocr]"

安装高性能推理插件,能够显著提升模型的推理速度。

paddlex --install hpi-cpu

服务化部署

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

安装服务化部署插件:

paddlex --install serving

通过 PaddleX CLI 运行 PP-StructureV3 产线,会自动安装需要的文件。

paddlex --serve --pipeline PP-StructureV3 --use_hpip --port 8999
最终显示如下信息,则成功启动: paddlex 服务启动成功

Ctrl + C 关闭服务,在命令行中测试一下。

快速测试

可以在命令行快速测试功能是否正常:

paddlex --pipeline PP-StructureV3 \
        --input https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/pp_structure_v3_demo.png \
        --use_doc_orientation_classify False \
        --use_doc_unwarping False \
        --use_textline_orientation False \
        --use_e2e_wireless_table_rec_model True \
        --save_path ./output \
正常输出文字则解析成功: 解析结果

在 Dify 工作流中调用

先启动服务:

paddlex --serve --pipeline PP-StructureV3 --use_hpip --port 8999

在 Dify 工作流编排中调用 HTTP 接口请求

注意事项

  • 如果 HTTP 请求报错:Text size is too large, max size is 1.00 MB, but current size is xxx MB.,可以在环境变量中设置 HTTP_REQUEST_NODE_MAX_TEXT_SIZE
  • 在 Dify 环境变量中设置 FILES_URL,这样上传文件返回的 url 带前缀,可以直接传给 paddlex 处理