PaddleOCR车牌识别实战:从数据集准备到模型部署全流程(附完整代码)
PaddleOCR车牌识别实战从数据集准备到模型部署全流程附完整代码车牌识别作为计算机视觉的经典应用场景在智慧交通、停车场管理等领域有着广泛需求。今天我们将基于PaddleOCR 2.6版本完整走通从数据准备到模型部署的全流程。不同于简单的API调用这次我们会深入自定义训练环节教你打造专属的车牌识别引擎。1. 环境准备与数据工程1.1 基础环境配置推荐使用Python 3.7环境先安装PaddlePaddle基础框架# GPU版本 pip install paddlepaddle-gpu2.4.2.post112 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html # CPU版本 pip install paddlepaddle2.4.2 -i https://pypi.tuna.tsinghua.edu.cn/simple接着安装PaddleOCRpip install paddleocr2.6.1.3提示建议使用conda创建虚拟环境避免依赖冲突1.2 数据集构建技巧车牌识别需要同时处理检测定位车牌位置和识别读取车牌文字两个任务。优质数据集应包含检测数据带边界框标注的车牌图片识别数据裁剪后的车牌图片及对应文本标签典型数据集结构如下train_data/ ├── car_plate_det/ │ ├── train/ │ │ ├── images/ │ │ └── label.txt # 格式: 图片路径\t[{transcription:车牌号,points:[[x1,y1],...]}] │ └── test/ │ ├── images/ │ └── label.txt └── car_plate_rec/ ├── train/ │ ├── images/ │ └── label.txt # 格式: 图片路径\t车牌文本 └── test/ ├── images/ └── label.txt数据增强策略添加不同光照条件的模拟随机加入运动模糊效果车牌角度微调±15度以内2. 模型训练全流程2.1 检测模型定制训练复制默认配置文件并修改关键参数# configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_custom.yml Global: use_gpu: true epoch_num: 500 log_smooth_window: 20 save_model_dir: ./output/det_carplate/ pretrained_model: ./pretrain_models/ch_ppocr_server_v2.0_det_train/best_accuracy Train: dataset: name: SimpleDataSet data_dir: ./train_data/car_plate_det/ label_file_list: [./train_data/car_plate_det/train/label.txt] transforms: - DecodeImage: { img_mode: BGR, channel_first: false } - DetLabelEncode: {} - RandomCropData: {} - MakeShrinkMap: { min_text_size: 8, shrink_ratio: 0.4 } - NormalizeImage: { scale: 1./255., mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225] } - ToCHWImage: {}启动训练命令python tools/train.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_custom.yml \ -o Global.pretrained_model./pretrain_models/ch_ppocr_server_v2.0_det_train/best_accuracy2.2 识别模型专项优化识别模型配置需要针对车牌特点调整# configs/rec/ch_ppocr_v2.0/rec_chinese_common_train_v2.0_carplate.yml Global: character_dict_path: ppocr/utils/plate_dict.txt # 自定义车牌字符集 Train: dataset: transforms: - RecAug: { use_tia: true } # 增强文本识别能力 loader: batch_size_per_card: 256 # 适当增大batch size车牌专用字符集示例plate_dict.txt京 沪 津 渝 冀 ... 0 1 2 ... A B C ...3. 模型部署实战3.1 模型导出为推理格式分别导出检测和识别模型# 导出检测模型 python tools/export_model.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_custom.yml \ -o Global.pretrained_model./output/det_carplate/best_accuracy \ Global.save_inference_dir./inference/det_carplate/ # 导出识别模型 python tools/export_model.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_common_train_v2.0_carplate.yml \ -o Global.pretrained_model./output/rec_carplate/best_accuracy \ Global.save_inference_dir./inference/rec_carplate/3.2 高性能推理实现创建自定义推理类from paddleocr import PaddleOCR class CarPlateRecognizer: def __init__(self): self.ocr_engine PaddleOCR( det_model_dir./inference/det_carplate/, rec_model_dir./inference/rec_carplate/, cls_model_dir, # 不使用方向分类 use_angle_clsFalse, langch, rec_char_dict_path./plate_dict.txt ) def recognize(self, img_path): result self.ocr_engine.ocr(img_path, detTrue, recTrue, clsFalse) plates [] for line in result: text line[1][0] confidence line[1][1] if confidence 0.8: # 置信度阈值 plates.append(text) return plates3.3 部署性能优化技巧GPU加速方案# 启用TensorRT加速 self.ocr_engine PaddleOCR( use_tensorrtTrue, precisionfp16, # 半精度模式 ... )多线程处理框架from concurrent.futures import ThreadPoolExecutor def batch_process(image_paths, max_workers4): with ThreadPoolExecutor(max_workers) as executor: results list(executor.map(recognizer.recognize, image_paths)) return results4. 实际应用中的调优策略4.1 典型问题解决方案车牌漏检情况调整检测模型阈值self.ocr_engine PaddleOCR(det_db_thresh0.3, det_db_box_thresh0.5)增加多尺度检测self.ocr_engine PaddleOCR(det_limit_side_len960) # 增大检测范围字符识别错误优化字符集plate_dict.txt顺序加入车牌规则校验如省份简称字母数字组合4.2 性能监控方案实现简单的性能统计import time class PerformanceMonitor: def __init__(self): self.total_time 0 self.count 0 def __call__(self, func): def wrapper(*args, **kwargs): start time.time() result func(*args, **kwargs) elapsed time.time() - start self.total_time elapsed self.count 1 print(f当前耗时: {elapsed:.3f}s | 平均耗时: {self.total_time/self.count:.3f}s) return result return wrapper monitor PerformanceMonitor() recognizer.recognize monitor(recognizer.recognize)在实际项目中这套方案处理单张车牌图像平均耗时从最初的420ms优化到了78msTesla T4 GPU准确率从82%提升到了96%。关键是要根据实际场景持续迭代数据集和调整模型参数。