基于PaddleOCR银行卡识别实现(三)

前言

        基于PaddleOCR银行卡识别实现(一)

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

        前两篇文章讲了检测模型和识别模型的实现,这一篇文章姗姗来迟,将讲解下两个模型的串联应用和PaddleOCR的源码精简,下面我们来看看如何实现,文章最后有全源码下载。

一、PaddleOCR源码分析

1、源码下载

使用git进行下载:

git clone https://github.com/PaddlePaddle/PaddleOCR.git 

我们先找到下面三个路径,这三个路径中存放了预测的核心代码:

        ppocr\data:存放数据预处理代码

        ppocr\postprocess:存放数据后处理代码

        tools\infer:存放加载模型和相关参数代码

然后,在这个三个目录中详细提取我们需要的代码

2、ppocr\data精简

根据predict_det.py文件,可以查看到,需要的数据预处理并不多

上面的几种方法都集中在一个py文件中,把operators.py中不相干的方法删掉就可以了:

3、ppocr\postprecess精简

我们只需要保存这三个cls_postprocess.py、db_postprocess.py和rec_postprocess.py即可

4、 tools\infer精简

仅保留红框的py文件即可,删除predict_e2e.py和predict_sr.py

5、精简后的代码并预测

可以看到,文件非常少,以下代码就是PaddleOCR预测的核心代码

注意:需要修改__init__.py中的引用

加上模型后就可以预测:

 python tools/infer/predict_det.py --det_algorithm="DB" --det_model_dir="./inference/det/" --image_dir="1.jpg" --use_gpu=False --det_db_unclip_ratio=2.5

二、银行卡卡号识别集成

1、添加预测代码

新建deploy目录,加入预测py文件

核心代码如下:

    def predict(self, image=None, path="", **kwargs):if image is not None:predicted_data = imageelif path != "":predicted_data = self.read_image(path)else:raise TypeError("The input data is inconsistent with expectations.")dt_boxes, rec_res, _ = self.text_sys(predicted_data)dt_num = len(dt_boxes)if dt_num > 0:rec_res_final = dict()text, score = rec_res[0]rec_res_final.update({'bank_card_number': text,'score': float(score),'location': dt_boxes[0].astype(np.int).tolist()})url = "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?cardNo=" + rec_res_final["bank_card_number"] + "&cardBinCheck=true"r = requests.get(url=url)res = r.json()if res["validated"]:card_types = {"DC": "借记卡","CC": "信用卡","SCC": "准贷记卡","PC": "预付费卡"}if res["cardType"] in card_types:card_type = card_types[res["cardType"]]else:card_type = "未知卡类型【" + res["cardType"] + "】"if res["bank"] in self.bank:bank_name = self.bank[res["bank"]]else:bank_name = "未知银行"rec_res_final.update({"card_type": card_type,"bank_name": bank_name})else:rec_res_final.update({"card_type": "未知卡类型","bank_name": "未知银行"})return rec_res_finalelse:return ""
2、参数说明

目前的识别模型是在PP-OCRv2的基础上训练出来的,如何是v3或v4训练的,需要将这里的re_image_shape改成“3,48,320”

3、预测

ocr_bank.py文件中添加main方法:

if __name__ == '__main__':args = {"use_gpu": False,"enable_mkldnn": True}ocr_bank = OCRBank(args=args)print(ocr_bank.predict(None, "1.jpg"))

python .\deploy\ocr_bank.py

结果:

[2023/11/29 15:31:50] ppocr DEBUG: dt_boxes num : 1, elapsed : 0.5060036182403564
[2023/11/29 15:31:50] ppocr DEBUG: rec_res num  : 1, elapsed : 0.10000085830688477
{'bank_card_number': '622991116400066409', 'score': 0.9891971945762634, 'location': [[164, 368], [789, 374], [789, 424], [164, 417]], 'card_type': '借记卡', 'bank_name': '河南省农村信用社'}

完毕

        以上就是银行卡识别的整个流程,精简后可直观的进行部署,这里只是做了第一步精简,在infer中和后处理中,还有部分代码可以进一步精简。

精简后源码下载:

基于PaddleOCR银行卡卡号识别源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/229813.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新手老师如何管理班级的日常工作

作为一名新手老师,管理班级的日常工作可能会是一项挑战,但以下是一些可能有用的建议: 建立良好的班级文化 班级文化是班级氛围的重要组成部分,对于学生的学习和成长具有重要影响。作为老师,要积极营造一种积极向上、团…

Jenkins 如何查看已经记录登录服务器的凭证密码

文章目录 一、背景描述二、解决方案一(查看所有账号密码)三、解决方案二(查询指定账号密码) 一、背景描述 在日常的开发过程中,有时候会出现忘记开发、测试服务器的登录密码的情况。此时恰巧 Jenkins 上记录了登录该主…

AI工具导航网站(包含写作、翻译、设计、论文润色去重的AI工具集)

人工智能工具导航网站集合了国内外各种热门、创意、有趣、前沿的AI工具盒网站,方便用户迅速访问和体验各种AI应用。 关注底部公众号回复"126899"获取工具集链接。 一、写作翻译编程设计AI工具集 AI写作工具:这些工具可以帮助用户生成或优化各…

Docker的基本概念和优势,以及在应用程序开发中的实际应用

文章目录 概要 基本概念 容器 (Container): 镜像 (Image): Dockerfile: 仓库 (Repository): 容器编排 (Orchestration): Docker Compose: Docker Daemon 和 Docker Client: 网络 (Network): 数据卷 (Volume): 主要优势 应用场景 小结 概要 Docker 是一种容器化平台,…

搞定这三个问题 伦敦金止损就没问题

笔者多次强调,做伦敦金交易,重要的是风险控制。而止损是我们风险控制中一个很重要的概念。设定好止损,就是风险控制的好开始。下面我们通过三个问题,来解决止损的问题。 问题一,你的止损位在哪里?要做止损&…

金字塔原理

金字塔原理 来自于麦肯锡公司的第一位女性咨询顾问芭芭拉•明托的著作《金字塔原理》。 原理介绍 此原理是一种重点突出、逻辑清晰、主次分明的逻辑思路、表达方式和规范动作。 金字塔的基本结构是:中心思想明确,结论先行,以上统下&#xff…

无需部署服务器,如何结合内网穿透实现公网访问导航页工具Dashy

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航…

羊大师不说,你会知道酸奶也能加热吗?

羊大师不说,你会知道酸奶也能加热吗? 酸奶是一种非常受欢迎的健康食品,不仅可以冷饮,还可以热着喝哦!你可能会好奇,酸奶热着喝会不会破坏其营养价值呢?别着急,让小编羊大师来为你解…

短 URL 生成器设计:百亿短 URL 怎样做到无冲突?

Java全能学习面试指南:https://javaxiaobear.cn 我们先来看看,当高并发遇到海量数据处理时的架构。在社交媒体上,人们经常需要分享一些 URL,但是有些 URL 可能会很长,比如: https://time.geekbang.org/hyb…

【代码随想录】算法训练计划35

贪心 1、860. 柠檬水找零 题目: 输入:bills [5,5,5,10,20] 输出:true 思路: 模拟大法 func lemonadeChange(bills []int) bool {//贪心,代码一刷, 感觉要用到hashmap,也不用five, ten : 0…

85亿港币到账,零跑海外卖车拒绝躺平

作者 |张祥威 编辑 |德新 零跑获Stellantis集团约15亿欧元投资已于近日完成交割。根据零跑港交所公告,1.94亿新H股认购已发行予Stellantis集团,公司所得款项总额超85亿港币。 「交割完成代表投资款已经进入零跑公司账户,万里长征走了第一步…

echarts案例网站

一、ppchart 网站:https://ppchart.com/#/ 二、echarts官网示例 网站:https://echarts.apache.org/examples/zh/index.html