基于PaddleOCR史上最全车牌号识别实现(一)
前言
????????最近在做關于字符識別的項目,發現好多人在問關于車牌號識別方案,了解現在最火的文字識別PaddleOCR,發現只使用PaddleOCR就可以達到很好的效果,而且從頭到尾只需要動PaddOCR上少許代碼,就能達到很好的效果。
????????PaddleOCR分為三個模型檢測、方向分類和識別,車牌號識別只需用到檢測和識別模型即可,而且現在車牌號識別很少能覆蓋全部的車牌類型,今天我發布的這個模型將支持藍牌、黃牌(單行)、綠牌、大型新能源(黃綠)、領使館車牌、警牌、武警牌(單行)、軍牌(單行)、港澳出入境車牌,覆蓋極大部分類型的車牌。
準備工作
1、建議使用PyCharm進行開發,Download PyCharm: Python IDE for Professional Developers by JetBrains
社區版即可
2、在git上下載最新版的PaddleOCR版本,Download PyCharm: Python IDE for Professional Developers by JetBrains
3、導入Pycharm中如下界面:
切換到2.3目錄,執行下面的命令,安裝環境:
pip install -r requirements.txt
一、車牌號檢測模型實現
使用PaddleOCR自帶的文字檢測功能進行車牌號檢測訓練,可以不需要加載預訓練模型,我們要訓練一份只需要能檢測出車牌號的模型即可,文章結尾有數據集和檢測模型下載地址。
1、導入數據集
目前收集了1萬多張左右的真實圖片,其中有幾千張是手動標注的
?2、創建配置文件
復制一份yml文件,注:Eval.transforms.DetResizeForTest設置resize_long: 960
Global:use_gpu: trueepoch_num: 1200log_smooth_window: 20print_batch_step: 2save_model_dir: ./output/ch_db_mv3_car/save_epoch_step: 1200# evaluation is run every 5000 iterations after the 4000th iterationeval_batch_step: 1500cal_metric_during_train: Falsepretrained_model: ./pretrained_models/ch_ppocr_mobile_v2.0_det_train/best_accuracycheckpoints:save_inference_dir: ./inference/ch_db_mv3_caruse_visualdl: Falseinfer_img: doc/imgs_en/img_10.jpgsave_res_path: ./output/det_db/predicts_db.txtArchitecture:model_type: detalgorithm: DBTransform:Backbone:name: MobileNetV3scale: 0.5model_name: largedisable_se: TrueNeck:name: DBFPNout_channels: 96Head:name: DBHeadk: 50Loss:name: DBLossbalance_loss: truemain_loss_type: DiceLossalpha: 5beta: 10ohem_ratio: 3Optimizer:name: Adambeta1: 0.9beta2: 0.999lr:name: Cosinelearning_rate: 0.001warmup_epoch: 2regularizer:name: 'L2'factor: 0PostProcess:name: DBPostProcessthresh: 0.3box_thresh: 0.6max_candidates: 1000unclip_ratio: 1.5Metric:name: DetMetricmain_indicator: hmeanTrain:dataset:name: SimpleDataSetdata_dir: ./train_data/label_file_list:- "./train_data/car1/det_gt_train.txt"- "./train_data/car2/det_gt_train.txt"ratio_list: [ 1.0, 1.0 ]transforms:- DecodeImage: # load imageimg_mode: BGRchannel_first: False- DetLabelEncode: # Class handling label- IaaAugment:augmenter_args:- { 'type': Fliplr, 'args': { 'p': 0.5 } }- { 'type': Affine, 'args': { 'rotate': [ -30, 30 ] } }- { 'type': Resize, 'args': { 'size': [ 0.3, 3 ] } }- EastRandomCropData:size: [ 960, 960 ]max_tries: 50keep_ratio: true- MakeBorderMap:shrink_ratio: 0.4thresh_min: 0.3thresh_max: 0.7- MakeShrinkMap:shrink_ratio: 0.4min_text_size: 8- NormalizeImage:scale: 1./255.mean: [ 0.485, 0.456, 0.406 ]std: [ 0.229, 0.224, 0.225 ]order: 'hwc'- ToCHWImage:- KeepKeys:keep_keys: [ 'image', 'threshold_map', 'threshold_mask', 'shrink_map', 'shrink_mask' ] # the order of the dataloader listloader:shuffle: Truedrop_last: Falsebatch_size_per_card: 2num_workers: 4Eval:dataset:name: SimpleDataSetdata_dir: ./train_data/label_file_list:- "./train_data/car/car1/det_gt_test.txt"- "./train_data/car/car2/det_gt_test.txt"ratio_list: [ 1.0, 1.0 ]transforms:- DecodeImage: # load imageimg_mode: BGRchannel_first: False- DetLabelEncode: # Class handling label- DetResizeForTest:# image_shape: [736, 1280]resize_long: 960- NormalizeImage:scale: 1./255.mean: [ 0.485, 0.456, 0.406 ]std: [ 0.229, 0.224, 0.225 ]order: 'hwc'- ToCHWImage:- KeepKeys:keep_keys: [ 'image', 'shape', 'polys', 'ignore_tags' ]loader:shuffle: Falsedrop_last: Falsebatch_size_per_card: 1 # must be 1num_workers: 2use_shared_memory: False3、執行命令進行GPU訓練
python -m paddle.distributed.launch --gpus 0 tools/train.py -o Global.use_visualdl=True -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_car.yml注意顯存問題,需要大于4G的顯存,2G顯存會溢出
4、顯示運行圖
visualdl --logdir=output/ch_db_mv3_car/vdl --port 8081
檢測模型效果最高能到達:hmean:0.99
5、驗證模型
python tools/infer_det.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_car.yml -o Global.pretrained_model="./output/ch_db_mv3_car/best_accuracy" ?Global.inf er_img=C:\Users\YY007\Desktop\car\1.jpg PostProcess.unclip_ratio=1.8效果如下,左邊原圖,右邊檢測效果圖:
? ??
6、導出模型
python tools/export_model.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_car.yml -o Global.pretrained_model="./output/ch_db_mv3_car/best_accuracy" Global.save _inference_dir="./inference/ch_db_mv3_car/"導出模型驗證:
python tools/infer/predict_det.py --det_algorithm="DB" --det_model_dir="./inference/ch_db_mv3_car/" --image_dir="C:\Users\YY007\Desktop\car\1.jpg" --use_gpu=True --det_db_unclip_ratio=1.8解決訓練模型與導出模型結果不一致問題?
導出模型進行預測需將這一行禁掉,否則會導致導出模型的預測結果與訓練模型的預測結果出現不一致的情況
詳細解釋在這里:
關于文字檢測訓練模型和導出模型效果不一樣的問題 · Issue #4371 · PaddlePaddle/PaddleOCR · GitHub
修改方案如下:
文件一:tools/infer/utility.py
添加參數如下參數:
?文件二:tools/infer/predict_det.py
?其他文件:修改部署預測文件,以hubserving部署為例:
deploy/hubserving/ocr_system/params.py
小結
到這一步,車牌號檢測模型就完成了,總體上講效果還可以,如果需要更好的檢測效果,可以更換更深的神經網絡,或者通過語義分割來實現,下一章我們講講車牌號識別【基于PaddleOCR車牌號識別實現(二)】模型訓練。
數據集下載地址:
文本檢測和識別的車牌號數據集
山月記分享
檢測模型下載地址:
車牌號檢測模型
山月記分享
總結
以上是生活随笔為你收集整理的基于PaddleOCR史上最全车牌号识别实现(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下黑客帝国代码雨
- 下一篇: C/C++——黑客数字雨特效