本文介绍: 基于PaddleOCR银行卡识别实现(一)基于PaddleOCR银行卡识别实现(二)前两篇文章讲了检测模型识别模型实现,这一篇文章姗姗来迟,将讲解下两个模型的串联应用和PaddleOCR的源码精简,下面我们看看如何实现文章最后有全源码下载

前言

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

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

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

一、PaddleOCR源码分析

1、源码下载

使用git进行下载:

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

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

        ppocrdata存放数据预处理代码

        ppocrpostprocess存放数据处理代码

        toolsinfer:存放加载模型和相关参数代码

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

2、ppocrdata精简

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

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

3、ppocrpostprecess精简

我们需要保存这三个cls_postprocess.pydb_postprocess.pyrec_postprocess.py即可

4、 toolsinfer精简

仅保留红框的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 = image
        elif 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_final
        else:
            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 .deployocr_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银行卡卡号识别源码

原文地址:https://blog.csdn.net/YY007H/article/details/134688137

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_6343.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注