当前位置:   article > 正文

基于PaddleOCR史上最全车牌号识别实现(二)_paddleocr 检测模型和识别模型同时调用

paddleocr 检测模型和识别模型同时调用

前言 

上一章讲了检测模型的实现,这一章将一下识别模型的实现,PaddleOCR提供的通用字符集有6623个,但是车牌号就不需要这么多,我们只需要识别这些车牌,蓝牌、黄牌(单行)、绿牌、大型新能源(黄绿)、领使馆车牌、警牌、武警牌(单行)、军牌(单行)、港澳出入境车牌,只用提取极少部分字符即可,下面我们来接着将代码如何实现的。

一、银行卡识别模型实现

1、创建字符集

在ppocr/utils/目录中创建一份只有数字的字符集ppocr_keys_car.txt,71个字符:

川鄂甘赣贵桂黑沪吉冀晋津京辽鲁蒙闽宁青琼陕苏皖湘新渝豫粤云藏浙澳港警学使领
0123456789
ABCDEFGHJKLMNPQRSTUVWXYZ

注意字母字符中不包含“O”,这与数字0在车牌上显示有歧义。

2、导入数据集

数据集可在上一篇文章中下载,目前收集了3万张左右的数据集,为了保证数据集字符平衡,我们就需要合成一部分数据集,这3万张中一半是真实一半是合成的

数据集部分切图,上面是真实的,下面是合成的:

 

 3、创建配置文件

复制一份yml文件

 文件内容如下:

  1. Global:
  2. use_gpu: true
  3. epoch_num: 500
  4. log_smooth_window: 20
  5. print_batch_step: 10
  6. save_model_dir: ./output/rec_chinese_lite_v2.0_car
  7. save_epoch_step: 50
  8. # evaluation is run every 5000 iterations after the 4000th iteration
  9. # eval_batch_step: [0, 2000]
  10. eval_batch_step: 100
  11. cal_metric_during_train: True
  12. # pretrained_model: ./pretrained_models/ch_ppocr_mobile_v2.0_rec_pre/best_accuracy
  13. pretrained_model:
  14. checkpoints:
  15. save_inference_dir: ./inference/rec_chinese_lite_v2.0_car
  16. use_visualdl: False
  17. infer_img: doc/imgs_words/ch/word_1.jpg
  18. # for data or label process
  19. character_dict_path: ppocr/utils/ppocr_keys_car.txt
  20. character_type: ch
  21. max_text_length: 25
  22. infer_mode: False
  23. use_space_char: False
  24. save_res_path: ./output/rec/predicts_chinese_lite_v2.0.txt
  25. Optimizer:
  26. name: Adam
  27. beta1: 0.9
  28. beta2: 0.999
  29. lr:
  30. name: Cosine
  31. learning_rate: 0.001
  32. regularizer:
  33. name: 'L2'
  34. factor: 0.00001
  35. Architecture:
  36. model_type: rec
  37. algorithm: CRNN
  38. Transform:
  39. Backbone:
  40. name: MobileNetV3
  41. scale: 0.5
  42. model_name: small
  43. small_stride: [1, 2, 2, 2]
  44. Neck:
  45. name: SequenceEncoder
  46. encoder_type: rnn
  47. hidden_size: 48
  48. Head:
  49. name: CTCHead
  50. fc_decay: 0.00001
  51. Loss:
  52. name: CTCLoss
  53. PostProcess:
  54. name: CTCLabelDecode
  55. Metric:
  56. name: RecMetric
  57. main_indicator: acc
  58. Train:
  59. dataset:
  60. name: SimpleDataSet
  61. data_dir: ./train_data/
  62. label_file_list:
  63. - "./train_data/car/car1/rec_gt_train.txt"
  64. - "./train_data/car/car2/rec_gt_train.txt"
  65. - "./train_data/car/car3/rec_gt_train.txt"
  66. ratio_list: [1.0,1.0,0.3]
  67. transforms:
  68. - DecodeImage: # load image
  69. img_mode: BGR
  70. channel_first: False
  71. - RecAug:
  72. - CTCLabelEncode: # Class handling label
  73. - RecResizeImg:
  74. image_shape: [3, 32, 320]
  75. - KeepKeys:
  76. keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order
  77. loader:
  78. shuffle: True
  79. batch_size_per_card: 32
  80. drop_last: True
  81. num_workers: 8
  82. Eval:
  83. dataset:
  84. name: SimpleDataSet
  85. data_dir: ./train_data/
  86. label_file_list:
  87. - "./train_data/car/car1/rec_gt_test.txt"
  88. - "./train_data/car/car2/rec_gt_test.txt"
  89. - "./train_data/car/car3/rec_gt_test.txt"
  90. ratio_list: [1.0,1.0,0.3]
  91. transforms:
  92. - DecodeImage: # load image
  93. img_mode: BGR
  94. channel_first: False
  95. - CTCLabelEncode: # Class handling label
  96. - RecResizeImg:
  97. image_shape: [3, 32, 320]
  98. - KeepKeys:
  99. keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order
  100. loader:
  101. shuffle: False
  102. drop_last: False
  103. batch_size_per_card: 32
  104. num_workers: 8

4、执行命令进行GPU训练

python -m paddle.distributed.launch --gpus 0 tools/train.py -o Global.use_visualdl=True -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0_car.yml

注意显存问题,需要大于4G的显存,2G显存会溢出

5、显示运行图

visualdl --logdir=output/rec_chinese_lite_v2.0_car/vdl --port 8081

识别模型效果最高能到达:acc:0.99

6、导出模型

  1. python tools/export_model.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0_car.yml
  2. -o Global.pretrained_model="./output/rec_chinese_lite_v2.0_car/best_accuracy" Global.save
  3. _inference_dir="./output/rec_chinese_lite_v2.0_car/"

检测模型和识别模型串联验证:

python tools/infer/predict_system.py --det_algorithm="DB" --det_model_dir="./inference/ch_db_mv3_car/" --rec_model_dir=./inference/rec_chinese_lite_v2.0_car/ --image_dir="C:\Users\YY007\Desktop\car\1.jpg" --rec_char_dict_path="./ppocr/utils/ppocr_keys_car.txt" --use_gpu=True --use_angle_cls=False --det_db_unclip_ratio=1.8

7、验证模型

小结

到这一步,车牌号识别已经完成,通过PaddleOCR来完成车牌号识别功能,只需要改动很少的代码就可以完成识别功能,具体改动参考“基于PaddleOCR车牌号识别实现(一)”文本检测部分,大家可通过提升数据集数量或者使用别的分割网络来试试看效果,下方提供的模型开箱就可以使用。

数据集下载地址: 

车牌号识别数据集

识别模型下载地址:

车牌号识别模型PP-OCRv2版

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/524862
推荐阅读
相关标签
  

闽ICP备14008679号