一、PP-OCRv5 是什么?为什么值得一学
- 单模型覆盖 5 种文字类型:简体、繁体、拼音、英文、日文 + 手写体
- 相比 PP-OCRv4
- 端到端指标↑13%
- 小文本/竖排/古籍/生僻字错误率↓40%
- 移动端 3.2 MB,服务器版 12 MB,速度提升 20%
- 统一框架:PaddleOCR 3.0 同时支持检测、识别、版面分析、关键信息抽取
二、环境准备(Linux & Windows 通用)
1. 创建虚拟环境
# Ubuntu / macOS
python3.10 -m venv ppocrv5
source ppocrv5/bin/activate
# Windows
python -m venv ppocrv5
ppocrv5\Scripts\activate
2. 一键安装 Wheel(含 3.0.0 正式版)
# CPU 版
pip install paddlepaddle==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
# GPU 版(CUDA 11.8,cuDNN 8.9)
pip install paddlepaddle-gpu==3.0.0.post118 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
3. 安装 PaddleOCR 与周边工具
git clone https://github.com/PaddlePaddle/PaddleOCR.git -b release/3.0
cd PaddleOCR
pip install -r requirements.txt
pip install "paddleocr[all]" # 含版面、表格、关键信息抽取
paddlex --install paddle2onnx # 后续转 ONNX 必备
三、30 秒体验:命令行直接 OCR
paddleocr ocr -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_002.png \
--det true --rec true --cls true \
--use_doc_orientation_classify false
结果默认保存到 ./output/ 目录,精度媲美商业接口。
四、训练专属模型(以车牌识别为例)
1. 数据组织
plate_data/
├─ train/
│ ├─ img/ # jpg 图片
│ └─ label.txt # 文件名\t标注
└─ test/
├─ img/
└─ label.txt
标注示例:
plate_001.jpg\t京AD12345
2. 下载预训练权重(检测+识别)
wget https://paddle-model-ecology.bj.bcebos.com/paddlex/official_pretrained_model/PP-OCRv5_server_det_pretrained.pdparams
wget https://paddle-model-ecology.bj.bcebos.com/paddlex/official_pretrained_model/PP-OCRv5_server_rec_pretrained.pdparams
3. 修改配置文件
复制 configs/rec/PP-OCRv5/PP-OCRv5_server_rec.yml 为 plate_rec.yml
关键字段:
Train:
dataset:
name: SimpleDataSet
data_dir: ./plate_data/train/img
label_file: ./plate_data/train/label.txt
Eval:
dataset:
data_dir: ./plate_data/test/img
label_file: ./plate_data/test/label.txt
Global:
character_dict_path: ppocr/utils/dict/plate_dict.txt # 自定义字典
4. 启动训练(单卡/多卡)
# 单卡
python tools/train.py -c plate_rec.yml \
-o Global.pretrained_model=./PP-OCRv5_server_rec_pretrained.pdparams
# 多卡
python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c plate_rec.yml \
-o Global.pretrained_model=./PP-OCRv5_server_rec_pretrained.pdparams
5. 评估 & 导出
python tools/eval.py -c plate_rec.yml \
-o Global.pretrained_model=output/rec/plate_rec/best_accuracy.pdparams
# 转推理模型
python tools/export_model.py -c plate_rec.yml \
-o Global.pretrained_model=output/rec/plate_rec/best_accuracy.pdparams \
Global.save_inference_dir=./inference/plate_rec
五、高性能部署 4 条路
| 场景 | 方案 | 加速比 | 教程入口 |
|---|---|---|---|
| Python 服务 | FastAPI + PaddleInference | 1× | 见下文 |
| C++ Windows | PaddleInference + OpenCV | 2.3× | 本文第六节 |
| 嵌入式 RK3588 | RKNN + C++ Demo | 4× | 参考文献 |
| Intel CPU | OpenVINO + C# | 3.1× | 参考文献 |
1. Python 服务化(最通用)
# app.py
from fastapi import FastAPI, UploadFile
from paddleocr import PaddleOCR
ocr = PaddleOCR(det_model_dir="inference/plate_det",
rec_model_dir="inference/plate_rec",
cls_model_dir="inference/ch_ppocr_mobile_v2.0_cls")
@app.post("/ocr")
def ocr_file(file: UploadFile):
result = ocr.ocr(file.file.read(), cls=True)
return {"code": 0, "data": result}
启动:
uvicorn app:app --host 0.0.0.0 --port 8000 --workers 4
2. Windows C++ 推理(极致速度)
- 环境:VS2019 + CMake3.30 + OpenCV4.9 + PaddleInference-3.0-cuda11.8
- 模型准备:把
PP-OCRv5_mobile_det、PP-OCRv5_mobile_rec、ch_ppocr_mobile_v2.0_cls放入model/ - 编译:
mkdir build && cd build
cmake .. -G "Visual Studio 16 2019" -A x64
cmake --build . --config Release
- 运行:
Release\ppocr.exe \
--det_model_dir=model/PP-OCRv5_mobile_det \
--rec_model_dir=model/PP-OCRv5_mobile_rec \
--cls_model_dir=model/ch_ppocr_mobile_v2.0_cls \
--image_dir=plate_test.jpg --use_gpu=true --visualize=true
六、常见报错与排查
| 报错信息 | 原因 | 解决方案 |
|---|---|---|
ModuleNotFoundError: paddle2onnx |
未安装转换器 | paddlex --install paddle2onnx |
CUDA error 700 |
显卡算力不匹配 | 换 10/16/20 系列或重编 PaddleInference |
| 中文路径下 CMake 失败 | Visual Studio 不支持中文 | 把项目移到英文目录 |
| 嵌入式段错误 | RKNN 模型未对齐 | 检查 build-linux.sh 目标是否 rk3588 |
七、性能优化 6 条建议
- 输入尺寸对齐 32 倍数,开启 TensorRT
- 批处理推理:rec 批量 4~8,吞吐量↑60%
- 开启 MKL-DNN 或 OpenVINO,CPU 延时↓45%
- 删除无用字典行,rec 模型体积↓30%
- 使用
FP16推理,显存减半,精度损失 <0.3% - 对长图做切片预处理,防止 OOM
八、结语 & 下一步
恭喜你!跟着本篇 PP-OCRv5 使用教程,你已经完成了
「环境搭建 → 数据准备 → 模型训练 → 服务部署 → 性能优化」的全链路实践。
接下来可以试试
- 把模型转 ONNX → TensorRT,在 NVIDIA Jetson 上跑实时视频 OCR
- 结合 PP-StructureV3 做「版面分析 + 关键信息抽取」一体化方案
- 使用 PaddleLite 将 3.2 MB 的 PP-OCRv5_mobile 部署到 Android 手机(<100 ms)
如果在实操中遇到任何报错,欢迎在评论区留言,我会定期更新踩坑清单。祝你 OCR 之路一帆风顺,我们下一篇「PP-OCRv5 量化与剪枝实战」再见!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



