PaddleOCR 2.x 历史遗留功能与模型指南:旧分支推理、部署路径全解析
【免费下载链接】PaddleOCR飞桨多语言OCR工具包(实用超轻量OCR系统,支持80+种语言识别,提供数据标注与合成工具,支持服务器、移动端、嵌入式及IoT设备端的训练与部署) Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCR
本文基于 PaddleOCR 仓库中 2.x 分支的历史文档(Legacy Features)整理而成。PaddleOCR 3.x 分支在训练与推理的拼接逻辑、配置体系上做了升级,导致 2.x 分支的部分模型与功能不再兼容;本篇完整梳理 2.x 分支仍在使用或需要参考的功能矩阵(Python/C++ 预测引擎、服务化部署、Android、Jetson、端侧 Lite、Paddle2ONNX、云上部署、Benchmark 等)、该分支独有的模型清单,以及各推理路径的核心命令与参数含义,帮助读者准确判断自己是否还需要使用 2.x 分支,并能在旧环境下正确完成推理与部署。
一、为什么会有“历史遗留功能”文档
PaddleOCR 仓库在从 2.x 走向 3.x 的过程中,发生了架构级别的升级:3.x 的推理入口、模型拼接逻辑与配置文件结构均发生变化,因此2.x 分支训练/导出的 PP-OCRv4 与 PP-OCRv3 系列模型,无法与 PaddleOCR 3.0 及之后分支的模型直接互换使用。
这一点在 2.x 专用模型清单 model_list_2.x.en.md 中有明确说明:
Due to differences in the concatenation logic and configurations used during model training and inference, the PP-OCRv4 and PP-OCRv3 series models from the PaddleOCR 2.x branch cannot be used interchangeably with those from the PaddleOCR 3.0 and later branches.
因此,历史功能索引 单独成文,为仍在使用 2.x 分支的用户集中收纳了“旧分支模型 + 旧分支功能”两条主线。读者判断是否需要参考该文档,可以依据如下标准:
- 你持有的是 2.x 分支导出的推理模型(
inference.pdmodel+inference.pdiparams),且继续使用仓库内tools/infer/下的旧版推理脚本; - 你需要在旧环境(Linux/Windows、Android、Jetson、飞桨云)上复现 2.x 时代的部署流程;
- 你只想查阅 2.x 分支支持过的算法模型清单作为历史参考。
二、PaddleOCR 2.x 分支支持的模型清单
2.x 分支的模型范围由 model_list_2.x.en.md 完整枚举,覆盖检测、识别、方向分类、端到端、公式识别、表格识别与版面检测七大类。以下为完整清单:
2.1 文本检测模型(Detection)
| 语言 | 模型名称 |
|---|---|
| 中文 | ch_PP-OCRv4_det、ch_PP-OCRv4_server_det、ch_PP-OCRv3_det_slim、ch_PP-OCRv3_det、ch_PP-OCRv2_det_slim、ch_PP-OCRv2_det、ch_ppocr_mobile_slim_v2.0_det、ch_ppocr_mobile_v2.0_det、ch_ppocr_server_v2.0_det |
| 英文 | en_PP-OCRv3_det_slim、en_PP-OCRv3_det |
| 多语言 | ml_PP-OCRv3_det_slim、ml_PP-OCRv3_det |
2.2 文本识别模型(Recognition)
| 语言 | 模型名称 |
|---|---|
| 中文 | ch_PP-OCRv4_rec、ch_PP-OCRv4_server_rec、ch_PP-OCRv4_server_rec_doc、ch_PP-OCRv3_rec_slim、ch_PP-OCRv3_rec、ch_PP-OCRv2_rec_slim、ch_PP-OCRv2_rec、ch_ppocr_mobile_slim_v2.0_rec、ch_ppocr_mobile_v2.0_rec、ch_ppocr_server_v2.0_rec、SVTRv2(Rec Server)、RepSVTR(Mobile) |
| 英文 | en_PP-OCRv4_rec、en_PP-OCRv3_rec_slim、en_PP-OCRv3_rec、en_number_mobile_slim_v2.0_rec、en_number_mobile_v2.0_rec |
| 多语言 | korean_PP-OCRv3_rec、japan_PP-OCRv3_rec、chinese_cht_PP-OCRv3_rec、te_PP-OCRv3_rec、ka_PP-OCRv3_rec、ta_PP-OCRv3_rec、latin_PP-OCRv3_rec、arabic_PP-OCRv3_rec、cyrillic_PP-OCRv3_rec、devanagari_PP-OCRv3_rec |
2.3 其他任务模型
| 任务类型 | 模型名称 |
|---|---|
| 端到端 OCR(End-to-End) | PGNet |
| 文本方向分类(Direction Cls) | ch_ppocr_mobile_slim_v2.0_cls、ch_ppocr_mobile_v2.0_cls |
| 公式识别(Formula Recognition) | CAN、UniMERNet、LaTeX-OCR、PP-FormulaNet-S、PP-FormulaNet-L |
| 表格结构识别(Table Recognition) | TableMaster、SLANet、SLANeXt_wired、SLANeXt_wireless、en_ppocr_mobile_v2.0_table_structure、en_ppstructure_mobile_v2.0_SLANet、ch_ppstructure_mobile_v2.0_SLANet |
| 表格 OCR(Table Det + Rec) | en_ppocr_mobile_v2.0_table_det、en_ppocr_mobile_v2.0_table_rec |
| 版面检测(Layout Detection) | picodet_lcnet_x1_0_fgd_layout、ppyolov2_r50vd_dcn_365e_publaynet、picodet_lcnet_x1_0_fgd_layout_cdla、picodet_lcnet_x1_0_fgd_layout_table、ppyolov2_r50vd_dcn_365e_tableBank_word、ppyolov2_r50vd_dcn_365e_tableBank_latex |
从清单结构可以看到 2.x 分支的技术特征:以 PP-OCRv2/v3/v4 三代系列为主干,同时保留了 SVTR、RepSVTR 等研究型识别模型,以及 PGNet 端到端、公式识别、表格识别、版面检测等扩展任务——这些任务在 3.x 中被重新组织进新的 Pipeline 体系(仓库中 ppstructure 与 ppocr 目录即为 2.x 时代训练/推理体系的遗留实现)。
说明:3.x 及之后的模型总表另见 model_list.en.md,其中区分了 inference model(
inference.pdmodel、inference.pdiparams)、trained/pre-trained model(*.pdparams、*.pdopt、*.states)与 Paddle-Lite 优化的 nb model(*.nb)三类产物,该模型形态分类对 2.x 分支同样适用。
三、2.x 分支支持的功能全景
历史功能索引 index.en.md 列出的功能条目及其在仓库中的对应文档如下,均位于docs/version2.x/legacy/目录下:
| 功能 | 文档路径 | 说明 |
|---|---|---|
| Python 预测引擎推理 | python_infer.en.md | 检测/识别/方向分类/串联推理 + TensorRT |
| C++ 预测引擎推理 | cpp_infer.en.md | Linux(CPU/GPU)与 Windows 部署 |
| Visual Studio 2019 + CMake 编译指南 | windows_vs2019_build.en.md | Windows 平台编译 C++ 推理代码 |
| 服务化部署(Hubserving) | paddle_server.en.md | 基于 PaddleServing 的服务端部署 |
| Android 部署 | android_demo.en.md | 移动端推理 Demo |
| Jetson 部署 | 原链接指向 2.10 分支归档文档 | NVIDIA Jetson 平台推理 |
| 端侧部署(Paddle-Lite) | lite.en.md | 嵌入式/IoT 设备推理,使用.nb模型 |
| 网页前端部署(paddle.js) | 原链接指向 2.10 分支归档文档 | 浏览器端推理 |
| Paddle2ONNX 模型转化与预测 | paddle2onnx.en.md | 导出 ONNX 并用 ONNX Runtime 预测 |
| 飞桨云部署工具 | paddle_cloud.md | PaddleCloud 一键部署 |
| Benchmark 基准测试 | benchmark.en.md | 2.x 时代精度/速度基准 |
其中 Jetson 部署与网页前端部署(paddle.js)两条目的原始链接指向 2.10 分支的归档文档,说明这两块内容已随 3.x 升级而归档;如需查阅,可在仓库对应历史分支中检索同名文档。
四、Python 预测引擎推理(2.x 分支核心实操)
Python 推理文档 python_infer.en.md 按“检测 → 识别 → 方向分类 → 三者串联”的顺序展开,全部命令基于仓库中的tools/infer/脚本(predict_det.py、predict_rec.py、predict_cls.py、predict_system.py)。
4.1 文本检测模型推理
默认配置基于 DB 检测算法。以轻量中文检测模型为例:
# 下载 DB 文本检测推理模型 wget https://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_model/paddle3.0.0/PP-OCRv3_mobile_det_infer.tar tar xf PP-OCRv3_mobile_det_infer.tar # 运行推理 python3 tools/infer/predict_det.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./PP-OCRv3_mobile_det_infer/"可视化结果默认保存到./inference_results目录,结果文件名以det_res为前缀。
输入分辨率控制参数(源码中由检测前处理读取):
--det_limit_type:取值max或min,默认max;--det_limit_side_len:正整数,一般设为 32 的倍数,默认960。
默认组合limit_type='max', det_limit_side_len=960表示网络输入图像最长边不超过 960,超出时按同比例缩小;设为limit_type='min'则表示最短边限制为 960。若原图分辨率较高、希望使用更大分辨率预测,可将上限调大:
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/1.jpg" --det_model_dir="./PP-OCRv3_mobile_det_infer/" --det_limit_type=max --det_limit_side_len=1216CPU 推理只需追加--use_gpu=False:
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/1.jpg" --det_model_dir="./PP-OCRv3_mobile_det_infer/" --use_gpu=False4.2 文本识别模型推理
关键前置说明:PP-OCRv3 识别模型的输入形状为3, 48, 320,换用其他识别模型时必须通过--rec_image_shape按模型实际规格设置;另外 PP-OCRv3 识别模型的rec_algorithm默认为SVTR_LCNet,注意与原 SVTR 的命名差异。
中文轻量识别模型:
# 下载识别推理模型 wget https://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_model/paddle3.0.0/PP-OCRv4_mobile_rec_infer.tar tar xf PP-OCRv3_mobile_rec_infer.tar # 运行推理 python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_10.png" --rec_model_dir="./PP-OCRv3_mobile_rec_infer/" --rec_image_shape=3,48,320执行后终端打印识别文本与置信度,例如:
Predicts of ./doc/imgs_words_en/word_10.png:('PAIN', 0.988671)英文识别模型需额外指定字表路径--rec_char_dict_path:
# 下载英文模型 wget https://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_model/paddle3.0.0/en_PP-OCRv3_mobile_rec_infer.tar tar xf en_PP-OCRv3_mobile_rec_infer.tar python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/en/word_1.png" --rec_model_dir="./en_PP-OCRv3_mobile_rec_infer/" --rec_char_dict_path="ppocr/utils/en_dict.txt"示例输出:
Predicts of ./doc/imgs_words/en/word_1.png: ('JOINT', 0.998160719871521)多语言模型(对应 2.x 模型清单中的 korean、japan、arabic、cyrillic 等)在推理时除了--rec_char_dict_path外,为保证可视化结果正确显示,还需通过--vis_font_path指定字体路径。仓库在 doc/fonts 下默认提供了小语种字体(如korean.ttf),各语种字表位于 ppocr/utils/dict 目录。以韩语识别为例:
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/korean/1.jpg" --rec_model_dir="./your_inference_model" --rec_char_dict_path="ppocr/utils/dict/korean_dict.txt" --vis_font_path="doc/fonts/korean.ttf"示例输出:
Predicts of ./doc/imgs_words/korean/1.jpg:('바탕으로', 0.9948904)4.3 文本方向分类模型推理
# 下载文本方向分类推理模型 wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar tar xf ch_ppocr_mobile_v2.0_cls_infer.tar python3 tools/infer/predict_cls.py --image_dir="./doc/imgs_words_en/word_10.png" --cls_model_dir="ch_ppocr_mobile_v2.0_cls_infer"输出为分类角度与得分:
Predicts of ./doc/imgs_words_en/word_10.png:['0', 0.9999995]4.4 检测 + 方向分类 + 识别 串联推理(predict_system)
串联推理使用tools/infer/predict_system.py,核心参数:
--image_dir:单张图片或图片目录,也支持 PDF 文件;--det_model_dir/--cls_model_dir/--rec_model_dir:分别指定检测、方向分类、识别推理模型路径;--use_angle_cls:是否启用方向分类模型;--use_mp/--total_process_num:是否使用多进程推理及进程数;--page_num:PDF 输入时限制推理页数(默认 0 表示全部页);- 可视化结果默认保存到
./inference_results。
# 使用方向分类器 python3 tools/infer/predict_system.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./PP-OCRv3_mobile_det_infer/" --cls_model_dir="./cls/" --rec_model_dir="./PP-OCRv3_mobile_rec_infer/" --use_angle_cls=true # 不使用方向分类器 python3 tools/infer/predict_system.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./PP-OCRv3_mobile_det_infer/" --rec_model_dir="./PP-OCRv3_mobile_rec_infer/" --use_angle_cls=false # 多进程推理 python3 tools/infer/predict_system.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./PP-OCRv3_mobile_det_infer/" --rec_model_dir="./PP-OCRv3_mobile_rec_infer/" --use_angle_cls=false --use_mp=True --total_process_num=6 # PDF 输入,--page_num 指定推理前几页(0 表示全部页) python3 tools/infer/predict_system.py --image_dir="./xxx.pdf" --det_model_dir="./PP-OCRv3_mobile_det_infer/" --cls_model_dir="./cls/" --rec_model_dir="./PP-OCRv3_mobile_rec_infer/" --use_angle_cls=true --page_num=2更多推理参数解释可参考 2.x 分支的推理参数详解文档 inference_args.en.md。
4.5 TensorRT 加速推理(两步流程)
Paddle Inference 以子图模式集成 TensorRT:GPU 场景下 TRT 可对部分子图做算子水平/垂直融合、冗余算子过滤与最优算子内核选择。使用 TRT 需要两步,以检测模型为例:
第一步:采集动态 shape 信息(此时并不真正启用 TRT,只是收集信息):
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/1.jpg" --det_model_dir="./PP-OCRv3_mobile_det_infer/" --use_tensorrt=True动态 shape 文件最终命名为det_trt_dynamic_shape.txt,保存在模型目录PP-OCRv3_mobile_det_infer内。
第二步:加载该文件执行 TRT 推理:
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/1.jpg" --det_model_dir="./PP-OCRv3_mobile_det_infer/" --use_tensorrt=True文档中的注意事项:
- 若动态 shape 信息文件已存在则无需重复采集;要重新生成,需先删除模型目录中的该文件再重新执行第一步;
- 一般只需生成一次。实际部署中建议在离线验证集/测试集上生成动态 shape 文件,线上 TRT 推理时直接加载。
五、C++ 预测引擎与其他部署路径要点
5.1 C++ 推理环境准备(Linux)
C++ 推理文档 指出:相对 Python,C++ 在性能上占优,因此 CPU/GPU 服务端部署普遍采用 C++ 方案。环境准备包含三个环节:
- 系统环境:推荐 Linux(可用 Docker),Windows 则参考 VS2019 + CMake 编译指南;
- 编译 OpenCV:以 OpenCV 3.4.7 为例,先下载源码包
wget https://paddleocr.bj.bcebos.com/libs/opencv/opencv-3.4.7.tar.gz,然后用 CMake 配置编译,关键选项包括-DWITH_IPP=OFF、-DWITH_LAPACK=OFF、-DWITH_EIGEN=OFF、-DCMAKE_INSTALL_LIBDIR=lib64以及开启 ZLIB/JPEG/PNG/TIFF 的构建。make install后在install_path(如opencv3/)下生成bin/include/lib/lib64/share结构,供后续 OCR 源码编译链接; - 获取 Paddle Inference 库:可直接下载预编译库,也可自行编译。
完成上述准备后,使用仓库内 deploy/cpp_infer 目录下的 CMake 工程(入口 CMakeLists.txt 与命令行入口 cli.cc)编译即可得到 det/rec/cls 各类 C++ 可执行程序。
5.2 其余部署路径的定位
- 服务化部署(PaddleServing):paddle_server.en.md 覆盖 ocr_det、ocr_rec、ocr_cls、ocr_system、structure_system 等 Serving 方案,对应仓库 deploy/hubserving 目录下的各任务配置(如 ocr_system);
- Android:android_demo.en.md 对应 deploy/android_demo 工程,另有新一代的 deploy/ppocr-android Kotlin 工程可作为演进参考;
- 端侧 Paddle-Lite:lite.en.md 使用
.nb模型(如 ch_PP-OCRv3_det_slim 的 nb 产物),对应 deploy/lite 目录的 C++ 推理示例(ocr_db_crnn.cc、db_post_process.cc、crnn_process.cc等); - Paddle2ONNX:paddle2onnx.en.md 讲解将 2.x 推理模型导出为 ONNX 后用 ONNX Runtime 预测,对应 deploy/paddle2onnx 文档;
- Benchmark:benchmark.en.md 提供 2.x 模型的精度/速度评测方法,仓库 benchmark 目录包含 DBNet 训练评测工具与 run_det.sh 等评测脚本。
六、2.x 与 3.x 的选型建议
综合 model_list_2.x.en.md 的兼容性声明与 历史功能索引 的定位,可以给出如下判断框架:
- 新项目:直接使用 3.x 体系。2.x 分支的 Python 推理脚本(
tools/infer/系列)与 3.x 新接口在模型拼接逻辑上不互通,新开发没有必要从 2.x 起步; - 存量 2.x 模型:若已持有 2.x 训练/导出的模型并依赖其特定行为(如 PP-OCRv2/v3 系列的旧版检测、PGNet 端到端、TableMaster/SLANeXt 等表格模型),继续沿用
docs/version2.x/legacy/中的 Python/C++ 推理路径是文档支持的方案; - 跨端部署:2.x 时代的部署资产(deploy 目录下的 cpp_infer、lite、hubserving、android_demo 等)仍可作为端侧与服务端部署的参考实现,其中 C++ 工程与 Lite 推理代码在仓库中保留了完整源码,可逐文件阅读前处理(
db_post_process)与后处理(rec_postprocess)实现,理解 2.x 推理链路的输入输出约定。
以上全部内容均以当前仓库docs/version2.x/legacy/目录下的文档及deploy/、tools/、ppocr/目录的实际源码与配置为据,读者可沿文中路径在仓库内进一步核对细节。
【免费下载链接】PaddleOCR飞桨多语言OCR工具包(实用超轻量OCR系统,支持80+种语言识别,提供数据标注与合成工具,支持服务器、移动端、嵌入式及IoT设备端的训练与部署) Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考