PaddleOCR 将文档和图像转换为结构化、适合 AI 处理的数据(如 JSON 和 Markdown),其准确率领先行业,为全球从独立开发者和初创公司到大型企业的用户提供了强大的 AI 应用支持。凭借超过 60,000 颗星的好评,以及与 MinerU、RAGFlow、Pathway 和 Cherry Studio 等领先项目的深度集成,PaddleOCR 已成为 AI 时代开发智能文档应用的首选解决方案。 PP-OCRv5_server模型分为det检测模型和rec识别模型: a. PP-OCRv5_server_det 是 PaddleOCR 团队开发的最新一代文本检测模型 PP-OCRv5_det 系列之一。它专为高性能应用设计,支持在多种场景下(包括手写、竖排、旋转和弯曲文本)以及多种语言(如简体中文、繁体中文、英文和日文)中的文本检测。主要特点包括对复杂布局、不同大小的文本和具有挑战性的背景的强大处理能力,使其适用于文档分析、车牌识别和场景文本检测等实际应用。 b. P-OCRv5_server_rec 是 PaddleOCR 团队开发的最新一代文本行识别模型之一。它旨在通过单一模型高效准确地支持四种主要语言——简体中文、繁体中文、英文和日文,以及复杂文本场景(如手写、竖排文本、拼音和罕见字符)的识别。
| 服务器 | 910B2*1 |
|---|---|
| 权重类型 | OM |
| 容器版本 | 2.1.RC2-800I-A2-py311-openeuler24.03-lts |
| 固件驱动版本 | 23.0.5.1 |
a. https://modelscope.cn/models/PaddlePaddle/PP-OCRv5_server_det
b. https://modelscope.cn/models/PaddlePaddle/PP-OCRv5_server_rec
本环境搭建方法是基于PaddleOCR接口调用,因为PaddleOCR依赖PaddleCPU和PaddleNPU,所以需要进行框架编译安装。
安装参考: 方式一:编译安装,参考: https://github.com/PaddlePaddle/PaddleCustomDevice/blob/develop/backends/npu/README_cn.md
方式二:通过whl包安装:
在上面两个地址中找到需要的包的版本,下载到本地,xftp传到服务器上
pip install paddlepaddle-3.0.0.dev20250527-cp39-cp39-linux_aarch64.whl
pip install paddle_custom_npu-3.0.0.dev20250527-cp39-cp39-linux_aarch64.whl# CANN-8.0.0 对 numpy 和 opencv 部分版本不支持,建议安装指定版本
python -m pip install numpy==1.26.4
python -m pip install opencv-python==3.4.18.65
source /usr/local/Ascend/ascend-toolkit/set_env.sh
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1.0.0:$LD_PRELOA安装验证测试:
python -c "import paddle; paddle.utils.run_check()"==================================================
共处理 10 张图片:[2.png, 1.png, 10.png, 3.png, 5.png, 7.png, 8.png, 4.png, 6.png, 9.png]
每张图片推理时间: ['17.7093', '3.8061', '0.5734', '0.5779', '3.5471', '0.6304', '0.6638', '0.6857', '1.5316', '0.6152']
平均推理时间: 3.0341 秒
最长推理时间: 17.7093 秒
最短推理时间: 0.5734 秒
==================================================PaddleX专门用于推理加速的工具,自身集成了数据预处理,动态和静态切换,底层灵活调度Paddle Inference和Paddle Onnxruntime,不依赖于PaddleNPU和PaddleOCR,对于推理部署而言,更推荐该方法。
git clone https://github.com/PaddlePaddle/PaddleX.git
cd PaddleX
pip install -e ".[base]"手动编译安装高性能推理插件hpi-npu:
cd PaddleX/deploy/ultra-infer/python
# 使能om,onnx后端,禁用paddle后端,禁用gpu
export ENABLE_OM_BACKEND=ON ENABLE_ORT_BACKEND=ON ENABLE_PADDLE_BACKEND=OFF WITH_GPU=OFF DEVICE_TYPE=NPU
# 注意,仅aarch64机器需要设置NPU_HOST_LIB,指定libascend库
export NPU_HOST_LIB=/usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/lib64
python setup.py build
python setup.py bdist_wheel
python -m pip install dist/ultra_infer_npu*.whlMindScope PP-OCRv5-server,本地路径结构如下:
-- pp-ocrv5_server_det
|--fusion_result.json
|--inference.om
|--inference.onnx
|--inference.yml
|--inference_linux_aarch64.om
PP-OCRv5_server_rec
|--fusion_result.json
|--inference.om
|--inference.onnx
|--inference.yml
|--inference_linux_aarch64.om# 对detect模型做转换
atc --model=inference.onnx --framework=5 --output=inference --soc_version=Ascend910B2 --input_shape "x:1,3,544,960" --precision_mode_v2=origin
# 对rec模型进行转换
atc --model=inference.onnx --framework=5 --output=inference --soc_version=Ascend910B2 --input_shape "x:1,3,48,320" --precision_mode_v2=origin已完成格式转换,生成的om模型在容器的
${home}/PP-OCRv5_server_det_onnx和
${home}/PP-OCRv5_server_rec_onnx路径下参数说明: --input_shape "x:1,3,544,960" 在detect模型转换中该参数设置是因为客户的图片均为2730 x 1535大小,经过比例缩放后变成960 x 544,在实际使用中,可以根据真实的场景选择paddleX中对detect部分resize选择对应方法。
--input_shape "x:1,3,48,320" 在rec模型中该参数设置是因为识别模型的输入是由detect的输出提供,对于一个图片识别的框数量是变化的,shape也是变化的,这里固定识别框大小,但是在yaml中不配置input shape,代码会自动对识别框进行缩放,满足动态识别的业务要求。
--precision_mode_v2=origin 使用onnx模型原始的精度类型
推理脚本改动点如下:
from paddlex import create_pipeline
……
def main():
……
pipeline = create_pipeline(pipeline="/workdir/scripts/OCR.yaml", use_hpip=True)
……
try:
……
# 遍历图片进行推理
for i, image_path in enumerate(image_files, 1):
……
predict_result = pipeline.predict(
input=img_array,
use_doc_orientation_classify=False,
use_doc_unwarping=False,
use_textline_orientation=False,
)
……
# 处理结果
res = []
for result in predict_result:
res.append(result)
simplified_result = extract_ocr_results(res)
……配合的OCR.yaml文件:
TextDetection:
module_name: text_detection
model_name: PP-OCRv5_server_det
model_dir: /workdir/models/PP-OCRv5_server_det_onnx
limit_side_len: 960
limit_type: max
max_side_limit: 4000
thresh: 0.3
box_thresh: 0.6
unclip_ratio: 1.5
hpi_config:
auto_config: False
backend: om
device_type: npu
input_shape: [3, 544, 960]
TextRecognition:
module_name: text_recognition
model_name: PP-OCRv5_server_rec
model_dir: /workdir/models/PP-OCRv5_server_rec_onnx
batch_size: 1
score_thresh: 0.0
hpi_config:
auto_config: False
backend: om
device_type: npu==================================================
共处理 10 张图片: [1.png, 10.png, 2.png, 3.png, 4.png, 5.png, 6.png, 7.png, 8.png, 9.png]
每张图片推理时间: ['0.0180', '0.0175', '0.0178', '0.0206', '0.0207', '0.0192', '0.0202', '0.0230', '0.0202', '0.0222']
平均推理时间: 0.0199 ms
最长推理时间: 0.0230 ms
最短推理时间: 0.0175 ms
==================================================通过Paddlex推理及高性能推理插件hpi-npu进行产线pipeline推理,平均推理时间下降至0.02ms,优于A100性能,完成调优。