目录

前言

一、PaddleOCR环境搭建

二、银行卡检测模型实现

1、导入数据集

2、创建配置文件

3、执行命令进行GPU训练

4、显示运行图

5、验证模型

6、导出模型

解决训练模型与导出模型结果不一致问题

小结



前言

最近在做关于字符识别的项目,发现好多人在问关于银行卡识别方案,了解现在最火的文字识别PaddleOCR,发现只使用PaddleOCR就可以达到很好的效果,而且从头到尾不需要动PaddOCR上的任何代码,PaddleOCR分为三个模型检测、方向分类和识别,银行卡识别只需用到检测和识别模型即可,我们就先将将检测模型的训练和实现。

一、PaddleOCR环境搭建

建议使用PyCharm进行开发,Download PyCharm: Python IDE for Professional Developers by JetBrains

社区版即可

在git上下载最新版的版本

github.com

导入Pycharm中如下界面:

切换到2.3目录,执行下面的命令,安装环境:

pip install -r requirements.txt

二、银行卡检测模型实现

使用PaddleOCR自带的文字检测功能进行银行卡号检测训练,但不需要加载预训练模型,我们要训练一份只需要能检测出卡号的模型即可

1、导入数据集

目前收集了3000多张左右的真实图片,并进行了卡号标注,文章结尾有下载地址

2、创建配置文件

复制一份yml文件

文件内容如下:

Global:use_gpu: trueepoch_num: 1200log_smooth_window: 20print_batch_step: 2save_model_dir: ./output/ch_db_mv3_bank/save_epoch_step: 1200# evaluation is run every 5000 iterations after the 4000th iterationeval_batch_step: 1500cal_metric_during_train: Falsepretrained_model: checkpoints:save_inference_dir: ./inference/ch_db_mv3_bankuse_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/bank/bank1/real_det_train.txt"- "./train_data/bank/bank2/real_det_train.txt"- "./train_data/bank/bank3/real_det_train.txt"ratio_list: [ 1.0, 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': [-10, 10] } }- { 'type': Affine, 'args': { 'rotate': [ -30, 30] } }- { 'type': Resize, 'args': { 'size': [ 0.5, 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/bank/bank1/real_det_test.txt"- "./train_data/bank/bank2/real_det_test.txt"- "./train_data/bank/bank3/real_det_test.txt"ratio_list: [ 1.0, 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: 2

3、执行命令进行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_bank.yml

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

4、显示运行图

visualdl --logdir=output/ch_db_mv3_bank/vdl --port 8081

检测模型效果最高能到达:hmean:0.98271

5、验证模型

python tools/infer_det.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_bank.yml -o Global.pretrained_model="./output/ch_db_mv3_bank/best_accuracy"  Global.inf
er_img=C:\Users\YY007\Desktop\bank\1.jpg PostProcess.unclip_ratio=2.5

效果如下,左边原图,右边检测效果图:

6、导出模型

python tools/export_model.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_bank.yml -o Global.pretrained_model="./output/ch_db_mv3_bank/best_accuracy" Global.save
_inference_dir="./inference/ch_db_mv3_bank/"

导出模型验证:

python tools/infer/predict_det.py --det_algorithm="DB" --det_model_dir="./inference/ch_db_mv3_bank/" --image_dir="C:\Users\YY007\Desktop\bank\1.jpg" --use_gpu=True
--det_db_unclip_ratio=2.5

解决训练模型与导出模型结果不一致问题 

导出模型进行预测需将这一行禁掉,否则会导致导出模型的预测结果与训练模型的预测结果出现不一致的情况,官方截至到2.3版本还未解决此问题

详细解释在这里:

关于文字检测训练模型和导出模型效果不一样的问题 · Issue #4371 · PaddlePaddle/PaddleOCR (github.com)

修改方案如下:

文件一:tools/infer/utility.py

添加参数如下参数:

文件二:tools/infer/predict_det.py

其他文件:修改部署预测文件,以hubserving部署为例:

deploy/hubserving/ocr_system/params.py

小结

到这一步,银行卡检测模型就完成了,总体上讲效果还可以,如果需要更好的检测效果,可以更换更深的神经网络,或者通过语义分割来实现,下一章我们讲讲银行卡识别模型训练【基于PaddleOCR银行卡识别实现(二)】。

数据集下载地址:

银行卡文本检测数据集

山月记分享

基于PaddleOCR银行卡识别实现(一)相关推荐

  1. 基于PaddleOCR银行卡识别实现(二)

    前言 上一章讲了检测模型的实现,这一章将一下识别模型的实现,实现原理很简单,PaddleOCR提供的通用字符集有6623个,但是银行卡号就不需要这么多,只需要0~9就可以了,下面我们来看看如何实现,以 ...

  2. 生成常用验证码识别,基于PaddleOCR训练识别

    ★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> 生成常用验证码识别,基于PaddleOCR训练识别 零.背景 在一些传统网站或者App中登录需要验 ...

  3. 基于PaddleOCR开发Auto.js Pro文字识别插件

    目录 目的 准备工作 插件开发 1.项目结构对比 2.插件SDK集成 3.调整assets资源 4.删除无用的Activity文件 5.修改AndroidManifest.xml 6.修改Predic ...

  4. Paddle入门实战系列(二)基于PaddleOCR的体检报告识别

    ✨写在前面:强烈推荐给大家一个优秀的人工智能学习网站,内容包括人工智能基础.机器学习.深度学习神经网络等,详细介绍各部分概念及实战教程,通俗易懂,非常适合人工智能领域初学者及研究者学习.➡️点击跳转到 ...

  5. 基于PaddleOCR开发uni-app离线身份证识别插件

    目录 目的 准备工作 1.HbuilderX 2.Android Studio 并配置 NDK 3.基于PaddleOCR的离线身份证识别插件 开始 1.在android sudio创建一个项目,并创 ...

  6. 基于PaddleOCR的集装箱箱号检测识别

    基于PaddleOCR的集装箱箱号检测识别 项目背景 国际航运咨询分析机构 Alphaliner 在今年 3 月公布的一组数据,2021 年集装箱吞吐量排名前 30 的榜单中,上海港以 4702.5 ...

  7. 基于SpringBoot+Python多语言银行卡识别系统

    计算机视觉(Computer Vision)又称为机器视觉(Machine Vision),顾名思义是一门"教"会计算机如何去"看"世界的学科.在机器学习大热的 ...

  8. 基于PaddleOCR的多视角集装箱箱号检测识别,实现模型串联推理

    ★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> 一.项目介绍 集装箱号是指装运出口货物集装箱的箱号,填写托运单时必填此项.标准箱号构成基本概念:采 ...

  9. 基于PaddleOCR的DBNet多分类文本检测网络之身份证识别

    目的 全网的身份证识别大部分都是通过识别整张图片,然后再对数据进行格式化解析,这会照成很大的局限性,比如非摆正图片,图片上有其他干扰信息,这就会导致通过此方式来识别大大降低了准确率和不确定性.这篇文章 ...

最新文章

  1. seaborn使用violinplot函数可视化分组小提琴图(Grouped Violinplot with Seaborn violinplot)并保存可视化结果
  2. 腾讯斥资3.17亿美元增持B站 持股增至12%
  3. C++ leetCode 判断一个整数是否为回文数 9. 回文数 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
  4. SAP Spartacus 2.1.0 加载homepage的逻辑
  5. 字符串编辑距离(转载)
  6. 主成分分析(PCA)和基于核函数的主成分分析(KPCA)入门
  7. php 编译原理,编译原理
  8. 通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃
  9. CocosCreator2.3.1按钮节点防止多次连续点击
  10. tomcat服务器配置优化
  11. Windows编程系列(前言)
  12. db PowerDesigner如何将消失的工具栏显示出来
  13. Navicat for MySQL 破解版
  14. Algorithm:数学建模大赛(CUMCM/NPMCM)之建模历年题目类型、数据分析及官方评阅要点之详细攻略
  15. input框输入的文本类型都是字符串类型
  16. springboot中日志使用
  17. 【肝帝一周总结:全网最全最细】☀️Mysql 索引数据结构详解与索引优化☀️《❤️记得收藏❤️》
  18. keras 入门教程(一)
  19. Apache的性能解读
  20. 基于战舰V3的LCD显示实验详解和剖析

热门文章

  1. 超全的 100 个 Pandas 函数汇总,建议收藏
  2. WINDOWS 文件夹内容
  3. HBase in Practice - 性能、监控及问题解决
  4. xlsx 导出导入excel,xlsx-style 修改excel样式
  5. EasyExcel导出Excel指定属性列
  6. win10的计算机是哪个版本,Windows 10系统都有哪些版本?老旧电脑装哪个版本的win10好?...
  7. p3.第一章 Python基础入门 -- Python编程基本概念 (三)
  8. MySQL DQL操作之基础查询
  9. 计算机专业考研难度排名?
  10. 椭圆机和跑步机哪个更好