基于PaddleOCR史上最全车牌号识别实现(二)

前言 

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

一、银行卡识别模型实现

1、创建字符集

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

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

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

2、导入数据集

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

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

 

 3、创建配置文件

复制一份yml文件

 文件内容如下:

Global:
  use_gpu: true
  epoch_num: 500
  log_smooth_window: 20
  print_batch_step: 10
  save_model_dir: ./output/rec_chinese_lite_v2.0_car
  save_epoch_step: 50
  # evaluation is run every 5000 iterations after the 4000th iteration
#  eval_batch_step: [0, 2000]
  eval_batch_step: 100
  cal_metric_during_train: True
#  pretrained_model: ./pretrained_models/ch_ppocr_mobile_v2.0_rec_pre/best_accuracy
  pretrained_model:
  checkpoints:
  save_inference_dir: ./inference/rec_chinese_lite_v2.0_car
  use_visualdl: False
  infer_img: doc/imgs_words/ch/word_1.jpg
  # for data or label process
  character_dict_path: ppocr/utils/ppocr_keys_car.txt
  character_type: ch
  max_text_length: 25
  infer_mode: False
  use_space_char: False
  save_res_path: ./output/rec/predicts_chinese_lite_v2.0.txt


Optimizer:
  name: Adam
  beta1: 0.9
  beta2: 0.999
  lr:
    name: Cosine
    learning_rate: 0.001
  regularizer:
    name: 'L2'
    factor: 0.00001

Architecture:
  model_type: rec
  algorithm: CRNN
  Transform:
  Backbone:
    name: MobileNetV3
    scale: 0.5
    model_name: small
    small_stride: [1, 2, 2, 2]
  Neck:
    name: SequenceEncoder
    encoder_type: rnn
    hidden_size: 48
  Head:
    name: CTCHead
    fc_decay: 0.00001

Loss:
  name: CTCLoss

PostProcess:
  name: CTCLabelDecode

Metric:
  name: RecMetric
  main_indicator: acc

Train:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data/
    label_file_list:
      - "./train_data/car/car1/rec_gt_train.txt"
      - "./train_data/car/car2/rec_gt_train.txt"
      - "./train_data/car/car3/rec_gt_train.txt"
    ratio_list: [1.0,1.0,0.3]
    transforms:
      - DecodeImage: # load image
          img_mode: BGR
          channel_first: False
      - RecAug: 
      - CTCLabelEncode: # Class handling label
      - RecResizeImg:
          image_shape: [3, 32, 320]
      - KeepKeys:
          keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order
  loader:
    shuffle: True
    batch_size_per_card: 32
    drop_last: True
    num_workers: 8

Eval:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data/
    label_file_list:
      - "./train_data/car/car1/rec_gt_test.txt"
      - "./train_data/car/car2/rec_gt_test.txt"
      - "./train_data/car/car3/rec_gt_test.txt"
    ratio_list: [1.0,1.0,0.3]
    transforms:
      - DecodeImage: # load image
          img_mode: BGR
          channel_first: False
      - CTCLabelEncode: # Class handling label
      - RecResizeImg:
          image_shape: [3, 32, 320]
      - KeepKeys:
          keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order
  loader:
    shuffle: False
    drop_last: False
    batch_size_per_card: 32
    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、导出模型

python tools/export_model.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0_car.yml
 -o Global.pretrained_model="./output/rec_chinese_lite_v2.0_car/best_accuracy" Global.save
_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版

  • 1
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 24
    评论
基于PaddleOCR车牌号识别模型是一种使用PaddlePaddle深度学习框架开发的算法模型,用于识别图像中的车牌号码。该模型经过训练,能够识别各种位置和角度的车牌,并将其转化为文本形式的车牌号码。 这个模型是基于深度卷积神经网络(CNN)和循环神经网络(RNN)等技术进行构建的。首先,通过卷积层提取图像中的特征,并利用长短时记忆网络(LSTM)等循环神经网络模型对这些特征进行序列建模。接下来,使用CTC(Connectionist Temporal Classification)算法对序列进行解码,以得到最终的车牌号码结果。 这种模型设计能够在不同条件下的车牌图片上进行高效的识别PaddleOCR车牌号识别模型具有较高的准确性和鲁棒性。由于其采用了深度学习算法,并且基于大规模的车牌数据集进行训练,使得模型能够学习到丰富的车牌号特征,并能够在复杂的背景、光照和扭曲变换等情况下进行准确的识别。 此外,PaddleOCR车牌号识别模型还具有一定的可扩展性和灵活性。它可以根据具体需求进行模型的优化和定制化,适应不同场景下的车牌识别应用。模型可以在不同的硬件平台上运行,包括服务器和移动设备,可以满足各种实时性要求。同时,PaddleOCR车牌号识别模型还可以与其他图像处理和车牌识别系统结合,实现更为复杂的应用场景。 总之,基于PaddleOCR车牌号识别模型是一种经过训练的深度学习模型,具有高准确性、鲁棒性和可扩展性,能够有效地实现车牌号码的识别任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番茄小能手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值