1. 项目概述
PaddleOCR_Plate是一个基于PaddleOCR框架和PP-OCRv4开源模型的车牌识别项目,由开发者北小菜创建并开源。该项目旨在通过详细的文档和预训练模型,降低车牌识别技术的应用门槛,使更多开发者能够快速实现商用级车牌识别功能。
提示:本项目特别适合需要将车牌识别功能集成到智能交通、停车场管理、车辆监控等系统中的开发者使用。
项目核心特点:
- 基于PaddleOCR框架和PP-OCRv4模型构建
- 使用CCPD2020车牌数据集进行训练
- 提供完整的训练、评估、导出流程
- 包含预训练好的车牌检测和识别模型
- 支持CPU和GPU两种计算模式
- 提供详细的配置说明和测试脚本
2. 环境准备与安装
2.1 Python环境配置
本项目支持Python 3.8至3.12版本,但根据实际测试经验,Windows平台推荐使用Python 3.10版本。这是因为:
- Python 3.10在Windows上的兼容性最佳
- 与PaddlePaddle框架的适配性最好
- 第三方库支持最为完善
安装Python时建议:
- 使用官方安装包
- 勾选"Add Python to PATH"选项
- 安装完成后验证python和pip命令是否可用
2.2 PaddlePaddle安装
根据硬件配置选择安装版本:
CPU版本安装
bash复制python -m pip install paddlepaddle==3.0.0rc0 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
GPU版本安装
对于NVIDIA显卡用户,需要根据CUDA版本选择对应的安装命令:
CUDA 11.8版本:
bash复制python -m pip install paddlepaddle-gpu==3.0.0rc0 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/
CUDA 12.3版本:
bash复制python -m pip install paddlepaddle-gpu==3.0.0rc0 -i https://www.paddlepaddle.org.cn/packages/stable/cu123/
重要:安装GPU版本前,请确保显卡驱动版本满足最低要求:
- Linux: ≥450.80.02
- Windows: ≥452.39 (CUDA 11.8) 或 ≥545.84 (CUDA 12.3)
2.3 PaddleOCR安装
本项目基于PaddleOCR 2.10.0版本开发,安装命令如下:
bash复制pip install paddleocr==2.10.0
注意:使用高于2.10.0的版本可能会导致兼容性问题,建议严格保持版本一致。
3. 数据准备与模型下载
3.1 数据集介绍
本项目使用CCPD2020数据集,这是一个大型的中国车牌识别数据集,包含:
- 超过30万张车牌图片
- 多种光照条件和拍摄角度
- 不同省份的车牌样式
- 已转换为PaddleOCR可直接使用的格式
3.2 文件下载与配置
从夸克网盘下载所需文件:
code复制https://pan.quark.cn/s/6830234a944f
需要下载的两个核心文件:
pretrain_models.zip- PP-OCRv4预训练模型CCPD2020_PPOCR.zip- 处理后的车牌数据集
解压后目录结构应如下:
code复制项目根目录/
├── pretrain_models/
│ ├── ch_PP-OCRv4_det_cml_teacher_pretrained
│ └── ch_PP-OCRv4_rec_train
└── CCPD2020_PPOCR/
├── ccpd_green
└── PPOCR
关键提示:务必确保路径中不包含中文,否则可能导致训练失败。
4. 模型训练与评估
4.1 配置文件调整
在开始训练前,需要修改两个配置文件:
configs/plate_det.yml- 车牌检测模型配置configs/plate_rec.yml- 车牌识别模型配置
主要修改项:
- 数据集路径前缀
- 训练参数(如batch_size、学习率等)
- 验证集配置
4.2 车牌检测模型训练
训练命令
bash复制python tools/train.py -c configs/plate_det.yml -o Global.pretrained_model=pretrain_models/ch_PP-OCRv4_det_cml_teacher_pretrained/teacher.pdparams
评估命令
bash复制python tools/eval.py -c configs/plate_det.yml -o Global.pretrained_model=output/plate_det/best_model/model.pdparams Eval.dataset.data_dir=CCPD2020_PPOCR/ccpd_green Eval.dataset.label_file_list=[CCPD2020_PPOCR/PPOCR/test/det.txt]
模型导出
bash复制python tools/export_model.py -c configs/plate_det.yml -o Global.pretrained_model=output/plate_det/best_model/model.pdparams Global.save_inference_dir=output/plate_det/inference_model
4.3 车牌识别模型训练
训练命令
bash复制python tools/train.py -c configs/plate_rec.yml -o Global.pretrained_model=pretrain_models/ch_PP-OCRv4_rec_train/student.pdparams
评估命令
bash复制python tools/eval.py -c configs/plate_rec.yml -o Global.pretrained_model=output/plate_rec/best_model/model.pdparams Eval.dataset.data_dir=CCPD2020_PPOCR/PPOCR Eval.dataset.label_file_list=[CCPD2020_PPOCR/PPOCR/test/rec.txt]
模型导出
bash复制python tools/export_model.py -c configs/plate_rec.yml -o Global.pretrained_model=output/plate_rec/best_model/model.pdparams Global.save_inference_dir=output/plate_rec/inference_model
5. 模型结构与转换
5.1 训练模型结构
训练完成后生成的模型结构:
code复制output/plate_det/best_model/
├── model.pdopt # 优化器状态(用于恢复训练)
└── model.pdparams # 模型参数(权重和偏置)
5.2 导出模型结构
转换后的推理模型结构:
code复制output/plate_det/inference_model/
├── inference.pdmodel # 模型结构
├── inference.pdiparams # 模型参数
└── inference.pdiparams.info # 参数信息
技术细节:导出模型时会将训练模型中的动态图转换为静态图,提高推理效率并减少依赖。
6. 模型测试与部署
6.1 使用测试脚本
项目提供了两个测试脚本:
tests.py- 测试PD模型
bash复制python tests.py
tests_onnx.py- 测试ONNX模型(需先转换)
bash复制python tests_onnx.py
6.2 部署建议
在实际项目中部署时,可以参考以下方案:
-
直接使用PD模型:
- 直接使用
inference_model目录下的模型文件 - 参考
tests.py中的加载和调用方式
- 直接使用
-
转换为ONNX格式:
- 参考项目中的
ONNXRUNTIME.md文档 - 使用ONNX Runtime进行推理,可获得更好的跨平台兼容性
- 参考项目中的
-
性能优化建议:
- 对于高并发场景,建议使用TensorRT加速
- 可以批量处理图片以提高吞吐量
- 考虑使用多线程/多进程并行处理
7. 常见问题与解决方案
7.1 训练相关问题
问题1:训练时出现内存不足错误
解决方案:
- 减小
batch_size参数 - 使用更小的输入图像尺寸
- 增加虚拟内存(Windows)或swap空间(Linux)
问题2:评估指标不理想
可能原因及解决:
- 学习率不合适 - 尝试调整学习率
- 数据质量差 - 检查并清洗数据集
- 模型容量不足 - 使用更大的预训练模型
7.2 推理相关问题
问题1:推理速度慢
优化建议:
- 使用GPU进行推理
- 转换为ONNX或TensorRT格式
- 减小输入图像尺寸
问题2:特定车牌识别效果差
处理方法:
- 收集更多类似场景的车牌数据
- 对这些数据进行针对性微调
- 添加后处理规则(如省份简称校验)
8. 进阶优化建议
8.1 数据增强策略
为提高模型鲁棒性,可以尝试以下增强方法:
- 随机亮度/对比度调整
- 添加高斯噪声
- 模拟不同天气条件(雾、雨等)
- 透视变换模拟不同拍摄角度
8.2 模型融合技巧
对于高精度要求的场景,可以:
- 训练多个不同结构的模型
- 使用集成学习策略(如投票法)
- 设计级联分类器过滤易识别样本
8.3 业务逻辑优化
在实际应用中,建议:
- 添加车牌有效性校验规则
- 实现车牌颜色分类
- 设计缓存机制提高重复车牌识别速度
我在实际部署中发现,合理设置识别区域���ROI)可以显著提高系统性能。特别是在视频流分析场景中,可以先用简单的运动检测算法确定车辆位置,再对局部区域进行车牌识别,这样能减少不必要的计算开销。
