PaddleOCR 文本识别模块实战指南:模型选型、多引擎推理与二次开发全解析
【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100+ languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR
本指南以 PaddleOCR 官方文档 Text Recognition Module Tutorial 为骨架,结合仓库源码(
paddleocr/_models/text_recognition.py、paddleocr/_models/base.py、paddleocr/_common_args.py、configs/rec/PP-OCRv5/PP-OCRv5_server_rec.yml及测试用例)深度扩充,系统讲解文本识别模块的模型清单、CLI / Python API 两种推理方式、四种推理引擎的选择,以及从数据准备到训练、评估、导出的完整二次开发链路。读完本文,你将能够独立完成文本识别模型的选型、调用与定制训练。
1. 模块定位:OCR 系统的"翻译官"
文本识别(Text Recognition)模块是 OCR(光学字符识别)系统的核心组成部分,负责从图像中的文本区域提取文字信息。在 PaddleOCR 的完整链路中,它通常接收文本检测(Text Detection)模块输出的文本行包围盒(bounding box),再通过图像预处理与深度学习算法,将图像中的文字转换为可编辑、可检索的电子文本。识别结果的准确率直接决定信息抽取、数据挖掘等下游应用的效果上限。
从源码结构看,PaddleOCR 将文本识别封装为独立的TextRecognition类,位于 paddleocr/_models/text_recognition.py,其默认模型为PP-OCRv6_medium_rec;同时通过TextRecognitionSubcommandExecutor将 CLI 子命令text_recognition暴露给命令行用户。类的底层继承自PaddleXPredictorWrapper(见 paddleocr/_models/base.py),统一封装了predict()、predict_iter()、close()等接口,并将模型创建委托给 PaddleX 的create_predictor,从而实现多引擎(paddle_static、paddle_dynamic、transformers、onnxruntime)的无缝切换。
2. 模型选型:核心模型与全量模型清单
说明:下表中的推理时间仅包含模型推理耗时,不包含前后处理时间。"Normal Mode"(常规模式)对应本地
paddle_static推理引擎。
2.1 核心模型对比
| 模型 | 模型下载 | 识别平均准确率(%) | GPU 推理时间(ms) [常规模式 / 高性能模式] | CPU 推理时间(ms) [常规模式 / 高性能模式] | 模型存储大小(MB) | 简介 |
|---|---|---|---|---|---|---|
| PP-OCRv6_medium_rec | 推理模型 / 训练模型 | 83.2* | - / - | - / - | 73.3 | PP-OCRv6 文本识别模型,基于 PPLCNetV4 + LightSVTR + CTC/NRTR 多头解码器,单模型支持 50 种语言(tiny 为 49 种)。Medium 相比 PP-OCRv5_server 提升 +5.1%。 |
| PP-OCRv6_small_rec | 推理模型 / 训练模型 | 81.3* | - / - | - / - | 20.4 | (同 PP-OCRv6 系列) |
| PP-OCRv6_tiny_rec | 推理模型 / 训练模型 | 73.5* | - / - | - / - | 4.4 | (同 PP-OCRv6 系列) |
| PP-OCRv5_server_rec | 推理模型 / 预训练模型 | 86.38 | 8.46 / 2.36 | 31.21 / 31.21 | 81 | PP-OCRv5_rec 是新一代文本识别模型,单模型高效精准支持简体中文、繁体中文、英文、日文,以及手写、竖排文本、拼音、生僻字等复杂文本场景,兼顾识别性能、推理速度与模型鲁棒性。 |
| PP-OCRv5_mobile_rec | 推理模型 / 预训练模型 | 81.29 | 5.43 / 1.46 | 21.20 / 5.32 | 16 | (同 PP-OCRv5 系列) |
| PP-OCRv4_server_rec_doc | 推理模型 / 预训练模型 | 86.58 | 8.69 / 2.78 | 37.93 / 37.93 | 182 | 在 PP-OCRv4_server_rec 基础上,混入更多中文文档数据与 PP-OCR 训练数据训练,增强部分繁体中文、日文与特殊符号识别能力,支持 15000+ 字符,同时提升文档与通用文本识别能力。 |
| PP-OCRv4_mobile_rec | 推理模型 / 预训练模型 | 78.74 | 5.26 / 1.12 | 17.48 / 3.61 | 10.5 | PP-OCRv4 轻量级识别模型,推理效率高,适合包括边缘设备在内的多种硬件部署。 |
| PP-OCRv4_server_rec | 推理模型 / 预训练模型 | 85.19 | 8.75 / 2.49 | 36.93 / 36.93 | 173 | PP-OCRv4 服务端模型,推理精度高,可部署于各类服务器。 |
| en_PP-OCRv4_mobile_rec | 推理模型 / 预训练模型 | 70.39 | 4.81 / 1.23 | 17.20 / 4.18 | 7.5 | 基于 PP-OCRv4 识别模型训练的超轻量英文识别模型,支持英文与数字字符识别。 |
*注:PP-OCRv6 指标在内部多场景评测集上评估,PP-OCRv5/v4 指标基于通用评测集,两者评测集不同,指标不可直接对比。
❗ 上表列出了文本识别模块主要支持的 4 个核心模型。该模块共支持20 个完整模型,包含多个多语言文本识别模型,完整模型清单如下。
2.2 全量模型清单(20 个)
PP-OCRv5 多场景模型
| 模型 | 模型下载 | 中文识别准确率(%) | 英文识别准确率(%) | 繁体中文识别准确率(%) | 日文识别准确率(%) | GPU 推理时间(ms) [常规/高性能] | CPU 推理时间(ms) [常规/高性能] | 存储大小(MB) | 简介 |
|---|---|---|---|---|---|---|---|---|---|
| PP-OCRv5_server_rec | 推理模型 / 预训练模型 | 86.38 | 64.70 | 93.29 | 60.35 | 8.46 / 2.36 | 31.21 / 31.21 | 81 | 新一代文本识别模型,单模型支持简中、繁中、英文、日文及手写、竖排、拼音、生僻字等复杂场景。 |
| PP-OCRv5_mobile_rec | 推理模型 / 预训练模型 | 81.29 | 66.00 | 83.55 | 54.65 | 5.43 / 1.46 | 21.20 / 5.32 | 16 | (同 PP-OCRv5 系列) |
中文识别模型
| 模型 | 模型下载 | 识别平均准确率(%) | GPU 推理时间(ms) [常规/高性能] | CPU 推理时间(ms) [常规/高性能] | 存储大小(MB) | 简介 |
|---|---|---|---|---|---|---|
| PP-OCRv4_server_rec_doc | 推理模型 / 预训练模型 | 86.58 | 8.69 / 2.78 | 37.93 / 37.93 | 182 | 文档增强版,支持 15000+ 字符,强化繁体、日文与特殊符号识别。 |
| PP-OCRv4_mobile_rec | 推理模型 / 预训练模型 | 78.74 | 5.26 / 1.12 | 17.48 / 3.61 | 10.5 | 轻量级识别模型,适合边缘设备部署。 |
| PP-OCRv4_server_rec | 推理模型 / 预训练模型 | 85.19 | 8.75 / 2.49 | 36.93 / 36.93 | 173 | 服务端模型,推理精度高。 |
| PP-OCRv3_mobile_rec | 推理模型 / 预训练模型 | 72.96 | 3.89 / 1.16 | 8.72 / 3.56 | 10.3 | 轻量级识别模型,适合边缘设备部署。 |
| ch_SVTRv2_rec | 推理模型 / 预训练模型 | 68.81 | 10.38 / 8.31 | 66.52 / 30.83 | 80.5 | 复旦大学 FVL 实验室 OpenOCR 团队开发的服务端识别模型,获 PaddleOCR 算法模型挑战赛任务一(OCR 端到端识别)一等奖,Leaderboard A 端到端准确率较 PP-OCRv4 提升 6%。 |
| ch_RepSVTR_rec | 推理模型 / 预训练模型 | 65.07 | 6.29 / 1.57 | 20.64 / 5.40 | 22.1 | 基于 SVTRv2 的移动端识别模型,获挑战赛任务一(Leaderboard B)一等奖,端到端准确率较 PP-OCRv4 提升 2.5%,推理速度基本持平。 |
英文识别模型
| 模型 | 模型下载 | 识别平均准确率(%) | GPU 推理时间(ms) [常规/高性能] | CPU 推理时间(ms) [常规/高性能] | 存储大小(MB) | 简介 |
|---|---|---|---|---|---|---|
| en_PP-OCRv5_mobile_rec | 推理模型 / 训练模型 | 85.25 | - | - | 7.5 | 基于 PP-OCRv5 框架训练的超轻量英文识别模型,进一步提升英文识别准确率、优化空格遗漏问题,并增强手写英文识别性能。 |
| en_PP-OCRv4_mobile_rec | 推理模型 / 预训练模型 | 70.39 | 4.81 / 1.23 | 17.20 / 4.18 | 7.5 | 基于 PP-OCRv4 训练的超轻量英文识别模型,支持英文与数字。 |
| en_PP-OCRv3_mobile_rec | 推理模型 / 预训练模型 | 70.69 | 3.56 / 0.78 | 8.44 / 5.78 | 17.3 | 基于 PP-OCRv3 训练的超轻量英文识别模型,支持英文与数字。 |
多语言识别模型
| 模型 | 模型下载 | 识别平均准确率(%) | GPU 推理时间(ms) [常规/高性能] | CPU 推理时间(ms) [常规/高性能] | 存储大小(MB) | 简介 |
|---|---|---|---|---|---|---|
| korean_PP-OCRv5_mobile_rec | 推理模型 / 预训练模型 | 88.0 | 5.43 / 1.46 | 21.20 / 5.32 | 14 | 基于 PP-OCRv5 框架的超轻量韩文识别模型,支持韩文、英文与数字。 |
| latin_PP-OCRv5_mobile_rec | 推理模型 / 预训练模型 | 84.7 | 5.43 / 1.46 | 21.20 / 5.32 | 14 | 支持绝大多数拉丁字母语言与数字识别。 |
| eslav_PP-OCRv5_mobile_rec | 推理模型 / 预训练模型 | 81.6 | 5.43 / 1.46 | 21.20 / 5.32 | 14 | 东斯拉夫语识别模型,支持东斯拉夫语、英文与数字。 |
| th_PP-OCRv5_mobile_rec | 推理模型 / 训练模型 | 82.68 | - | - | 7.5 | 基于 PP-OCRv5 的泰文识别模型,支持泰文、英文与数字。 |
| el_PP-OCRv5_mobile_rec | 推理模型 / 训练模型 | 89.28 | - | - | 7.5 | 基于 PP-OCRv5 的希腊文识别模型,支持希腊文、英文与数字。 |
| arabic_PP-OCRv5_mobile_rec | 推理模型 / 预训练模型 | 81.27 | - | - | 7.6 | 基于 PP-OCRv5 的超轻量阿拉伯文识别模型,支持阿拉伯字母与数字。 |
| cyrillic_PP-OCRv5_mobile_rec | 推理模型 / 预训练模型 | 80.27 | - | - | 7.7 | 基于 PP-OCRv5 的超轻量西里尔文识别模型,支持西里尔字母与数字。 |
| devanagari_PP-OCRv5_mobile_rec | 推理模型 / 预训练模型 | 84.96 | - | - | 7.5 | 基于 PP-OCRv5 的超轻量天城文识别模型,支持印地语、梵语等天城文与数字。 |
| te_PP-OCRv5_mobile_rec | 推理模型 / 预训练模型 | 87.65 | - | - | 7.5 | 基于 PP-OCRv5 的超轻量泰卢固文识别模型,支持泰卢固文与数字。 |
| ta_PP-OCRv5_mobile_rec | 推理模型 / 预训练模型 | 94.2 | - | - | 7.5 | 基于 PP-OCRv5 的超轻量泰米尔文识别模型,支持泰米尔文与数字。 |
| korean_PP-OCRv3_mobile_rec | 推理模型 / 预训练模型 | 60.21 | 3.73 / 0.98 | 8.76 / 2.91 | 9.6 | 基于 PP-OCRv3 的超轻量韩文识别模型,支持韩文与数字。 |
| japan_PP-OCRv3_mobile_rec | 推理模型 / 预训练模型 | 45.69 | 3.86 / 1.01 | 8.62 / 2.92 | 9.8 | 基于 PP-OCRv3 的超轻量日文识别模型,支持日文与数字。 |
| chinese_cht_PP-OCRv3_mobile_rec | 推理模型 / 预训练模型 | 82.06 | 3.90 / 1.16 | 9.24 / 3.18 | 10.8 | 基于 PP-OCRv3 的超轻量繁体中文识别模型,支持繁体中文与数字。 |
| te_PP-OCRv3_mobile_rec | 推理模型 / 预训练模型 | 95.88 | 3.59 / 0.81 | 8.28 / 6.21 | 8.7 | 基于 PP-OCRv3 的超轻量泰卢固文识别模型,支持泰卢固文与数字。 |
| ka_PP-OCRv3_mobile_rec | 推理模型 / 预训练模型 | 96.96 | 3.49 / 0.89 | 8.63 / 2.77 | 17.4 | 基于 PP-OCRv3 的超轻量卡纳达文识别模型,支持卡纳达文与数字。 |
| ta_PP-OCRv3_mobile_rec | 推理模型 / 预训练模型 | 76.83 | 3.49 / 0.86 | 8.35 / 3.41 | 8.7 | 基于 PP-OCRv3 的超轻量泰米尔文识别模型,支持泰米尔文与数字。 |
| latin_PP-OCRv3_mobile_rec | 推理模型 / 预训练模型 | 76.93 | 3.53 / 0.78 | 8.50 / 6.83 | 8.7 | 基于 PP-OCRv3 的超轻量拉丁文识别模型,支持拉丁文与数字。 |
| arabic_PP-OCRv3_mobile_rec | 推理模型 / 预训练模型 | 73.55 | 3.60 / 0.83 | 8.44 / 4.69 | 17.3 | 基于 PP-OCRv3 的超轻量阿拉伯文识别模型,支持阿拉伯字母与数字。 |
| cyrillic_PP-OCRv3_mobile_rec | 推理模型 / 预训练模型 | 94.28 | 3.56 / 0.79 | 8.22 / 2.76 | 8.7 | 基于 PP-OCRv3 的超轻量西里尔文识别模型,支持西里尔字母与数字。 |
| devanagari_PP-OCRv3_mobile_rec | 推理模型 / 预训练模型 | 96.44 | 3.60 / 0.78 | 6.95 / 2.87 | 8.7 | 基于 PP-OCRv3 的超轻量天城文识别模型,支持天城文与数字。 |
2.3 测试环境与推理模式说明
性能测试环境:
- 测试数据集:中文识别模型使用 PaddleOCR 自建中文数据集(覆盖街景、网络图片、文档、手写,共 11000 张文本识别图像);
ch_SVTRv2_rec/ch_RepSVTR_rec分别使用 PaddleOCR 算法模型挑战赛任务一 Leaderboard A / B 评测集;英文与多语言识别模型使用 PaddleOCR 自建数据集。 - 硬件配置:GPU NVIDIA Tesla T4;CPU Intel Xeon Gold 6271C @ 2.60GHz。
- 软件环境:Ubuntu 20.04 / CUDA 11.8 / cuDNN 8.9 / TensorRT 8.6.1.6;paddlepaddle-gpu 3.0.0 / paddleocr 3.0.3。
推理模式说明:
| 模式 | GPU 配置 | CPU 配置 | 加速技术组合 |
|---|---|---|---|
| 常规模式(Normal Mode) | FP32 精度 / 无 TRT 加速 | FP32 精度 / 8 线程 | PaddleInference |
| 高性能模式(High-Performance Mode) | 精度类型与加速策略的最优组合 | FP32 精度 / 8 线程 | 最优后端选择(Paddle/OpenVINO/TRT 等) |
3. 快速开始:一行命令体验文本识别
3.1 环境准备
开始前请先安装 PaddleOCR wheel 包,安装细节参见 安装指南。使用默认的paddle_static推理引擎时,还需先按 PaddlePaddle 框架安装 安装 PaddlePaddle;若改用transformers或onnxruntime引擎,则需相应配置 Transformers 或 ONNX Runtime 环境。
注意:官方 PaddleOCR 模型默认从 HuggingFace 下载。若无法访问 HuggingFace,可设置环境变量
PADDLE_PDX_MODEL_SOURCE="BOS"将模型源切换为 BOS(百度对象存储),未来将支持更多主流模型源。
3.2 CLI 一键推理
# 使用默认的 paddle_static 推理引擎(推荐,推理性能最佳) paddleocr text_recognition -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_rec_001.png # 使用 transformers 引擎推理 paddleocr text_recognition -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_rec_001.png \ --engine transformers # 使用 onnxruntime 引擎推理 paddleocr text_recognition -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_rec_001.png \ --engine onnxruntime在大多数场景下,默认的paddle_static推理引擎拥有更好的推理性能,是首选方案。
从 CLI 实现来看,paddleocr/_models/text_recognition.py 中的TextRecognitionSubcommandExecutor注册了text_recognition子命令,--input_shape参数以(C, H, W)三个整数值接收;paddleocr/_utils/cli.py 中的perform_simple_inference会遍历predict_iter返回的生成器,逐个打印结果,并在指定--save_path时调用res.save_all(save_path)保存全部输出。
3.3 Python API 集成
你也可以将文本识别模块的模型推理集成到自己的项目中。运行前请先下载示例图像到本地。
from paddleocr import TextRecognition # 默认使用 paddle_static 推理引擎 model = TextRecognition() output = model.predict(input="general_ocr_rec_001.png", batch_size=1) for res in output: res.print() res.save_to_img(save_path="./output/") res.save_to_json(save_path="./output/res.json")切换引擎只需在构造时传入engine参数:
# transformers 引擎 model = TextRecognition(engine="transformers") # onnxruntime 引擎 model = TextRecognition(engine="onnxruntime")TextRecognition的默认模型名在源码中硬编码为PP-OCRv6_medium_rec(见 paddleocr/_models/text_recognition.py),而predict()/predict_iter()在基类 paddleocr/_models/base.py 中实现:predict_iter()直接透传 PaddleX 预测器的生成器,predict()则将其整体物化为列表返回,两者的参数与结果语义完全一致。
若需使用paddle_dynamic或transformers引擎运行自训练模型,请先参考本文第 6.3 节"权重转换",使用 PaddleX 将模型从pdparams格式转换为safetensors格式。
3.4 结果输出解析
运行后输出结果如下:
{'res': {'input_path': 'general_ocr_rec_001.png', 'page_index': None, 'rec_text': '绿洲仕格维花园公寓', 'rec_score': 0.9823867082595825}}各字段含义:
input_path:待预测的文本行图像路径page_index:若输入为 PDF 文件,表示当前文本行所在的 PDF 页码;否则为Nonerec_text:文本行图像的预测文字rec_score:文本行图像预测文字的置信度
仓库测试用例 tests/models/test_text_recognition.py 验证了结果对象应包含input_path、page_index、input_img、rec_text、rec_score、vis_font等字段,可作为集成时字段约定的参考。
3.5 TextRecognition 构造参数详解
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
model_name | 说明:模型名称。设为None时使用PP-OCRv6_medium_rec。 | str\|None | None |
model_dir | 含义:模型存储路径。 | str\|None | None |
device | 含义:推理设备。示例:"cpu"、"gpu"、"npu"、"gpu:0"、"gpu:0,1"。指定多个设备时并行推理。默认使用 GPU 0,不可用时回退 CPU。 | str\|None | None |
engine | 含义:推理引擎。说明:支持None(默认)、paddle、paddle_static、paddle_dynamic、transformers、onnxruntime。设为None时本地推理默认使用paddle_static。详细描述、支持值、兼容规则与示例见 推理引擎与配置说明。 | str\|None | None |
engine_config | 含义:推理引擎配置。说明:建议与engine配合使用。支持字段、兼容规则与示例见 推理引擎与配置说明。 | dict\|None | None |
enable_hpi | 含义:是否启用高性能推理。 | bool | False |
use_tensorrt | 含义:是否启用 Paddle Inference 的 TensorRT 子图引擎。说明:CUDA 11.8 对应的 Paddle 兼容 TensorRT 版本为 8.x(x>=6),推荐 8.6.1.6。 | bool | False |
precision | 含义:使用 Paddle Inference TensorRT 子图引擎时的 TensorRT 精度。选项:"fp32"、"fp16"。 | str | "fp32" |
enable_mkldnn | 含义:是否启用 MKL-DNN 加速推理。说明:若 MKL-DNN 不可用或模型不支持,即使置位也不会加速。 | bool | True |
mkldnn_cache_capacity | 含义:MKL-DNN 缓存容量。 | int | 10 |
cpu_threads | 含义:CPU 推理线程数。 | int | 10 |
input_shape | 含义:模型输入图像尺寸,格式为(C, H, W)。 | tuple\|None | None |
这些参数在 paddleocr/_common_args.py 中统一解析校验:不支持的引擎或精度会直接抛出ValueError;底层会将use_tensorrt/precision映射为 PaddleX 的use_pptrt/pptrt_precision,并在paddle_static引擎下自动生成trt_fp32/trt_fp16/paddle等run_mode配置(见 paddleocr/_common_args.py)。各参数默认值定义于 paddleocr/_constants.py。
3.6 predict() 方法参数
调用predict()进行推理,返回结果列表。模块同时提供predict_iter()方法,两者在参数接受与结果返回上完全一致,区别仅在于predict_iter()返回generator,可逐步处理并获取预测结果,适合大数据集处理或内存节省场景。predict()的参数如下:
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
input | 含义:待预测数据,支持多种输入类型,必填。 说明: -Python 变量: numpy.ndarray表示的图像数据-str:图像/PDF 文件的本地路径(如 /root/data/img.jpg);图像/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 | - |
batch_size | 批大小,可设为任意正整数。 | int | 1 |
3.7 结果对象处理方法
每个样本的预测结果对应一个 Result 对象,支持打印、保存图像、保存 json 等操作:
| 方法 | 说明 | 参数 | 类型 | 说明 | 默认值 |
|---|---|---|---|---|---|
print() | 将结果打印到终端 | format_json | bool | 是否用 JSON 缩进格式化输出 | True |
indent | int | 指定缩进级别美化 JSON 输出,仅在format_json=True时生效 | 4 | ||
ensure_ascii | bool | 是否将非 ASCII 字符转义为 Unicode,True转义、False保留原字符,仅在format_json=True时生效 | False | ||
save_to_json() | 将结果保存为 json 文件 | save_path | str | 结果保存路径;为目录时文件名与输入文件类型命名一致 | None |
indent | int | 同print() | 4 | ||
ensure_ascii | bool | 同print() | False | ||
save_to_img() | 将结果保存为图像文件 | save_path | str | 结果保存路径;为目录时文件名与输入文件类型命名一致 | None |
此外,还可通过属性直接获取预测结果与可视化图像:
| 属性 | 说明 |
|---|---|
json | 获取 json 格式的预测结果 |
img | 获取 dict 格式的可视化图像 |
4. 二次开发:以 PP-OCRv5_server_rec 为例的训练全流程
当上述模型在自身场景中表现不佳时,可进行二次开发。下面以训练PP-OCRv5_server_rec为例,其他模型只需替换对应配置文件即可。首先准备文本识别数据集,可参考文本识别示例数据 安装 PaddleOCR 所需依赖。
4.1 数据集与预训练模型准备
# 下载示例数据集 wget https://paddle-model-ecology.bj.bcebos.com/paddlex/data/ocr_rec_dataset_examples.tar tar -xf ocr_rec_dataset_examples.tar # 下载 PP-OCRv5_server_rec 预训练模型 wget https://paddle-model-ecology.bj.bcebos.com/paddlex/official_pretrained_model/PP-OCRv5_server_rec_pretrained.pdparams4.2 模型训练
PaddleOCR 采用模块化代码组织,训练PP-OCRv5_server_rec需使用其配置文件。训练命令如下:
# 单卡训练(默认训练方式) python3 tools/train.py -c configs/rec/PP-OCRv5/PP-OCRv5_server_rec.yml \ -o Global.pretrained_model=./PP-OCRv5_server_rec_pretrained.pdparams # 多卡训练,通过 --gpus 参数指定 GPU ID python3 -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/rec/PP-OCRv5/PP-OCRv5_server_rec.yml \ -o Global.pretrained_model=./PP-OCRv5_server_rec_pretrained.pdparams从 configs/rec/PP-OCRv5/PP-OCRv5_server_rec.yml 可以看到该模型的关键训练配置:网络架构采用SVTR_HGNet算法,Backbone 为PPHGNetV2_B4(开启text_rec),Head 为 CTC + NRTR 双头结构(MultiHead,其中 CTC 头使用 svtr neck,NRTR 头维度 384、max_text_length25),损失为MultiLoss(CTCLoss + NRTRLoss),后处理为CTCLabelDecode,评估指标为RecMetric的acc。训练数据经RecAug数据增强、MultiScaleSampler多尺度采样(尺度[[320,32],[320,48],[320,64]]、首轮 batch 128),字符表使用 ppocrv5_dict.txt,并开启use_space_char。若需训练其他模型,只需将-c指向对应配置文件,例如 PP-OCRv6 系列配置。
4.3 模型评估
使用如下命令评估训练得到的权重(如output/xxx/xxx.pdparams):
# 注意:将 pretrained_model 路径设为本地路径。若使用自己训练保存的模型,请将路径和文件名修改为 {path/to/weights}/{model_name} # 示例测试集评估 python3 tools/eval.py -c configs/rec/PP-OCRv5/PP-OCRv5_server_rec.yml -o \ Global.pretrained_model=output/xxx/xxx.pdparams4.4 模型导出
python3 tools/export_model.py -c configs/rec/PP-OCRv5/PP-OCRv5_server_rec.yml -o \ Global.pretrained_model=output/xxx/xxx.pdparams \ Global.save_inference_dir="./PP-OCRv5_server_rec_infer/"导出后,静态图模型将存储在当前目录的./PP-OCRv5_server_rec_infer/下,包含以下文件:
./PP-OCRv5_server_rec_infer/ ├── inference.json ├── inference.pdiparams ├── inference.yml至此二次开发完成,该静态图模型可直接集成到 PaddleOCR API 中。
若希望使用paddle_dynamic或transformers引擎运行自训练模型,请参考第 6.3 节,使用 PaddleX 将模型从pdparams格式转换为safetensors格式。
5. 推理引擎
推理引擎的详细描述、取值、兼容规则与示例,请参考推理引擎与配置说明。
从源码层面看,paddleocr/_common_args.py 定义了完整的引擎白名单:paddle、paddle_static、paddle_dynamic、transformers、onnxruntime。当engine为None或paddle时,框架自动构建{"paddle_static": built}配置并采用paddle_static引擎(paddleocr/_common_args.py);同时enable_hpi会被透传为 PaddleX 的use_hpip以启用高性能推理。
5.1 各引擎速度数据
下表为 PP-OCRv5_mobile_rec、PP-OCRv5_server_rec、PP-OCRv6_medium_rec、PP-OCRv6_small_rec、PP-OCRv6_tiny_rec 在四种引擎下的耗时对比(单位:ms):
| 模型 | 引擎 | 预处理(ms) | 推理(ms) | 后处理(ms) | 端到端(ms) |
|---|---|---|---|---|---|
| PP-OCRv5_mobile_rec | paddle_static | 1.94 | 6.69 | 1.00 | 9.76 |
| paddle_dynamic | 1.97 | 35.38 | 1.11 | 38.60 | |
| transformers | 3.31 | 17.70 | 0.50 | 21.68 | |
| onnxruntime | 1.82 | 2.05 | 0.91 | 4.91 | |
| PP-OCRv5_server_rec | paddle_static | 1.98 | 11.37 | 1.21 | 14.69 |
| paddle_dynamic | 1.98 | 23.89 | 1.32 | 27.34 | |
| transformers | 3.99 | 11.69 | 0.51 | 16.36 | |
| onnxruntime | 1.80 | 3.15 | 0.90 | 5.98 | |
| PP-OCRv6_medium_rec | paddle_static | 1.74 | 5.38 | 0.84 | 8.08 |
| paddle_dynamic | 1.76 | 13.38 | 0.85 | 16.10 | |
| transformers | 2.58 | 7.04 | 0.41 | 10.19 | |
| onnxruntime | 1.74 | 2.28 | 0.84 | 4.97 | |
| PP-OCRv6_small_rec | paddle_static | 1.74 | 4.73 | 0.82 | 7.41 |
| paddle_dynamic | 1.76 | 12.43 | 0.87 | 15.18 | |
| transformers | 2.55 | 6.70 | 0.41 | 9.82 | |
| onnxruntime | 1.73 | 1.79 | 0.83 | 4.46 | |
| PP-OCRv6_tiny_rec | paddle_static | 1.76 | 2.77 | 0.40 | 5.04 |
| paddle_dynamic | 1.75 | 6.96 | 0.36 | 9.19 | |
| transformers | 2.45 | 3.12 | 0.40 | 6.12 | |
| onnxruntime | 1.73 | 0.92 | 0.36 | 3.12 |
测试环境说明:
- 测试数据:示例图像
- 硬件配置:GPU NVIDIA A100 40G;CPU Intel(R) Xeon(R) Gold 6248 CPU @ 2.50GHz
- 软件环境:Ubuntu 22.04 / CUDA 12.6 / cuDNN 9.5;paddlepaddle-gpu 3.2.1 / paddleocr 3.5 / transformers 5.4.0 / torch 2.10 / onnxruntime-gpu 1.23.2
5.2 权重转换
使用推理引擎时,系统会自动下载官方预训练模型。若需使用自训练模型搭配paddle_dynamic或transformers引擎,请参照 PaddleX 文档中"文本图像方向分类模块权重转换"一节,使用 PaddleX 将模型从pdparams格式转换为safetensors格式,即可无缝集成到 PaddleOCR API 中推理。若需使用自训练模型搭配onnxruntime引擎,可参照 PaddleX 的 "Paddle2ONNX 获取 ONNX 模型" 文档获取 ONNX 模型,从而无缝集成到 PaddleOCR API 中推理。
6. 常见问题(FAQ)
官方文档 text_recognition.en.md 的 FAQ 章节当前暂未填充具体条目。实际使用中可重点关注的排查方向包括:引擎切换前确认对应运行时(PaddlePaddle / Transformers / ONNX Runtime)已正确安装;engine_config与engine组合不匹配时按 推理引擎与配置说明 的兼容规则调整;模型下载失败时通过PADDLE_PDX_MODEL_SOURCE="BOS"切换模型源;自训练模型接入paddle_dynamic/transformers/onnxruntime引擎前,务必先完成第 5.2 节的权重格式转换。
7. 延伸阅读
- 文本识别中文版教程 与本文互为对照
- 推理引擎与配置说明:引擎取值、兼容规则与示例
- PaddleOCR 快速开始:完整的检测 + 方向分类 + 识别系统体验
- 文本识别源码实现:
TextRecognition类与 CLI 子命令注册 - 推理参数解析与校验:引擎白名单、默认值与
run_mode构建逻辑 - PP-OCRv5_server_rec 训练配置:SVTR_HGNet + 多尺度训练完整参数
- PP-OCRv6 系列训练配置:PP-OCRv6 默认模型配置
- 文本识别测试用例:结果字段约定的自动化验证
【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100+ languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考