第一次接触PaddleOCR时,我也被各种依赖和环境配置搞得头大。后来发现用PyCharm这个神器能省去不少麻烦。建议直接从官网下载专业版(社区版也够用),安装时记得勾选"Add to PATH"选项。安装完成后别急着创建项目,先配置好Python解释器环境。
我习惯用conda创建独立环境,这样可以避免包冲突。打开终端输入:
bash复制conda create -n paddle_env python=3.8
conda activate paddle_env
接着安装PaddlePaddle基础框架。根据你的显卡情况选择安装命令:
bash复制# 无NVIDIA显卡
pip install paddlepaddle
# 有NVIDIA显卡(CUDA 11.2)
pip install paddlepaddle-gpu==2.4.2.post112 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
验证安装是否成功:
python复制import paddle
paddle.utils.run_check()
我处理过票据识别项目,发现合理的文件结构能提升30%的工作效率。建议按这个结构组织:
code复制custom_dataset/
├── images/
│ ├── train/
│ │ ├── img_001.jpg
│ │ └── ...
│ └── val/
│ ├── img_101.jpg
│ └── ...
└── labels/
├── train/
│ ├── img_001.txt
│ └── ...
└── val/
├── img_101.txt
└── ...
每个txt标注文件格式为:
code复制x1,y1,x2,y2,x3,y3,x4,y4,text
0,0,100,0,100,50,0,50,发票号码
安装标注工具:
bash复制pip install PPOCRLabel
启动时加--lang参数支持多语言:
bash复制PPOCRLabel --lang ch_en
我的标注经验:
标注完成后导出时选择"PPOCR格式",会自动生成train.txt和val.txt标注文件。
修改配置文件configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml:
yaml复制Train:
dataset:
name: SimpleDataSet
data_dir: ./custom_dataset/
label_file_list: ["./custom_dataset/train.txt"]
ratio_list: [1.0]
启动训练(建议nohup后台运行):
bash复制python tools/train.py -c configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml \
-o Global.pretrained_model=./pretrain_models/ch_ppocr_server_v2.0_det_train/best_accuracy
遇到显存不足时调整batch_size:
yaml复制Train:
loader:
batch_size_per_card: 8 # 根据显存调整
修改识别配置文件configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml:
yaml复制Global:
character_dict_path: ppocr/utils/en_dict.txt
character_type: en
max_text_length: 25 # 根据最长文本调整
Train:
dataset:
name: SimpleDataSet
data_dir: ./custom_dataset/
label_file_list: ["./custom_dataset/train.txt"]
加入数据增强提升效果:
yaml复制Train:
transforms:
- DecodeImage:
img_mode: BGR
channel_first: False
- RecAug: {}
- CTCLabelEncode: {}
- KeepKeys:
keep_keys: ['image', 'label', 'length']
检测模型导出命令:
bash复制python tools/export_model.py \
-c configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml \
-o Global.pretrained_model=./output/ch_db_res18/best_accuracy \
Global.save_inference_dir=./inference/det_db
识别模型导出时注意字符集:
bash复制python tools/export_model.py \
-c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml \
-o Global.pretrained_model=./output/v3_en_mobile/best_accuracy \
Global.save_inference_dir=./inference/rec_en
使用ONNX加速推理:
bash复制paddle2onnx \
--model_dir ./inference/det_db \
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--save_file ./onnx/det_db.onnx \
--opset_version 11
实测在Intel i7 CPU上,ONNX运行时速度提升约40%。对于边缘设备,可以进一步使用TensorRT优化:
python复制import tensorrt as trt
# 创建builder
logger = trt.Logger(trt.Logger.WARNING)
builder = trt.Builder(logger)
network = builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))
# 解析ONNX模型
parser = trt.OnnxParser(network, logger)
with open("./onnx/det_db.onnx", "rb") as model:
parser.parse(model.read())
报错:CUDA out of memory
yaml复制Train:
gradient_merge:
k_steps: 4
avg: True
报错:字体文件缺失
在utility.py中修改字体路径:
python复制font_path = "./doc/fonts/simfang.ttf" # 替换为你的字体路径
数据增强组合:
yaml复制- RecAug:
use_tia: True # 开启TIA增强
aug_prob: 0.5 # 增强概率
学习率策略调整:
yaml复制Optimizer:
lr:
name: Cosine
learning_rate: 0.001
warmup_epoch: 2
模型微调技巧:
bash复制python tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml \
-o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy \
Global.checkpoints=./output/v3_en_mobile/latest
在实际票据识别项目中,通过这些方法我们将准确率从78%提升到了93%。特别是加入TIA数据增强后,对手写体的识别效果提升明显。