基于深度学习的银行卡号识别 卡号识别和分割

项目场景:

目前有许多应用会绑定银行卡,但是再绑定的时候如果是用户一个个卡号输入的话,就会使犯错误的概率大大增加,所以就体现出了我们这个app的作用,无论是什么样的银行卡都可以识别出它的卡号。


对于这个项目,我负责的主要是银行卡号的分割,以及银行卡照片的预处理。
对于图片处理的这一部分,我选择的是opencv,编程语言选择的是python,安装环境这一部分就不做太多介绍了 (百度一下教程就有,我配置环境的时候也踩到许多坑,我之前的博客有介绍),我们要先对图片进行预处理,这样可以帮助我们对银行卡号在银行卡的位置进行判断和寻找。


原银行卡照片(此银行卡照片为网上开源照片)
在这里插入图片描述

图片处理流程:

一、高斯模糊

银行卡照片要先进行高斯模糊对图片进行去除噪音(附简要代码)

blur = cv.GaussianBlur(img, (3, 3), 0)     # 高斯模糊
降噪后的照片

在这里插入图片描述


二、灰路图像和图片二值化

将进行完高斯模糊的银行卡照片进行灰路图像和图像二值化。(附简要代码)

    gray = cv.cvtColor(blur, cv.COLOR_BGR2GRAY)  # 将图像变为灰路图像
    ret, binary = cv.threshold(gray, 50, 255, cv.THRESH_BINARY)       # 二值化
代码实现的结果照片

灰路图像在这里插入图片描述
二值化的图像
在这里插入图片描述

三、膨胀和腐蚀

将进行完灰路图像和图像二值化的银行卡照片进行膨胀和腐蚀(附简要代码)

    kernel = np.ones((1, 50), np.uint8)
    erosion = cv.erode(binary, kernel)         # 膨胀
    dilation = cv.dilate(erosion, kernel)      # 腐蚀
代码实现的结果照片

在这里插入图片描述

四、总结
通过前面的方法我们就已经可以判断银行卡上的银行卡号的位置了,接下来的部分
就是银行卡号的分割 ,把银行卡号分割成一个一个小的号码,并将其保存为照片。


银行卡号的查找位置:

从上面的方法中,我们已经可以识别出银行卡号的位置了。然后我们再将查找到的位置,用二值化图片来进行存储。(附简要代码)

def num_split(img):
    height, width = img.shape
    v = [0] * width
    z = [0] * height
    a = 0
    for x in range(0, width):
        for y in range(0, height):
            if img[y, x] == 255:
                continue
            else:
                a = a + 1
        v[x] = a
        a = 0
    l = len(v)
    emptyImage = np.full((height, width), 255, dtype=np.uint8)
    for x in range(0, width):
        for y in range(0, v[x]):
            emptyImage[y, x] = 0

代码实现结果如图
在这里插入图片描述


银行卡号的分割:

从上面的方法中,我们已经可以得到了银行卡号的二值化照片了,我们就可以利用图像二值化来进行银行卡号的分割,图像二值化的意义就是利用每个卡号之间的白色来将卡号就行分割。(附简要代码)

Position = []
    Wstart = 0
    Wend = 0
    W_Start = 0
    W_End = 0
    v[0], v[len(v)-1] = 0, 0
    for j in range(len(v)):
        if v[j] > 0 and Wstart == 0:
            W_Start = j
            Wstart = 1
            Wend = 0
        if v[j] <= 0 and Wstart == 1:
            W_End = j
            Wstart = 0
            Wend = 1
        if Wend == 1:
            Position.append([W_Start, 0, W_End, height])
            Wend = 0
                    for hx in range(h0):
            for wx in range(w0):
                temp_data.append(float(temp_img[hx, wx]))
        data.append(temp_data)

    return data

代码实现结果如图

在这里插入图片描述


对于过于模糊的照片:

我们可以手动进行确定银行卡号的位置,然后就行后续的操作。最开始的时候处理的图像只能是特别清晰的银行卡照片,但是后面发现银行卡的种类特别多,而且有的还特别不清晰,所以我也改进了我的代码,原因就是因为照片灰度化,对于每种照片处理的不是够精细,然后就来在队友的帮助下也寻找到了更好处理的灰度化的方式,

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: YOLOv3是一种高效的目标检测算法,通过基于深度卷积神经网络的技术,可以在图像或视频中对目标进行快速准确地识别。YOLOv3银行卡识别就是将这一算法应用到银行卡识别任务中。 银行卡银行卡的重要信息,而银行卡识别在银行、ATM、商超等场景中都非常重要。使用YOLOv3银行卡识别技术,可以自动检测卡号所在区域以及卡号的位置,实现对卡号的快速准确识别,提高银行卡交易的效率和安全性。 具体的实现过程是将训练好的YOLOv3模型应用到银行卡图片中,通过网络结构的输出,可以得到银行卡所在的边框坐标和分类结果。然后,将边框坐标和分类结果结合起来,输出最终的银行卡识别结果。 虽然YOLOv3银行卡识别技术已经具备一定的准确率和稳定性,但在实际应用中,也需要考虑到一些因素,例如光线、角度、图像场景等因素对识别效果的影响。因此,为了提高系统的实用性和稳定性,也需要针对具体应用场景进行优化和调整。 ### 回答2: yolov3是一种用于目标检测的神经网络模型,在银行卡识别方面具有较高的准确率和效率。该模型可以自动识别图像中的银行卡,并定位出银行卡码的位置。通过对图像进行预处理和训练,yolov3可以识别各种形状和大小的银行卡,并精准地检测出银行卡上的码。 在使用yolov3进行银行卡识别时,需要先收集一定量的银行卡图片来进行训练和测试。在训练过程中,需要对图片进行标注,并对模型进行调参以提升识别准确率。在应用场景中,可以将训练好的模型嵌入到移动端或者其他设备中,以实现快速、准确的银行卡识别。 总的来说,yolov3作为一种先进的目标检测模型,在银行卡识别方面具有很高的应用价值,可以广泛应用于银行、商超等场景中,提升传统人工识别效率,提高客户服务效果。 ### 回答3: Yolov3银行卡识别是一种基于深度学习技术的自动识别方法,可以高效地实现银行卡识别和提取。Yolov3是一种卷积神经网络模型,它可以对输入的图像进行检测和分类,并输出每个物体的位置和类别信息。因此,使用Yolov3模型对银行卡图片进行识别,可以定位银行卡上的数字字符,并准确地提取出银行卡。 实现银行卡识别的关键是训练模型,这需要大量的数据集和模型优化。首先,需要收集大量的银行卡图片,并手动标注银行卡的位置和值。然后,将这些数据集输入到Yolov3模型中进行训练,通过迭代优化,可以不断提高模型的准确率。 Yolov3银行卡识别不仅可以在银行、ATM等金融领域应用,在其他领域也具有广泛的应用,如自助售货机、智能门禁等。它不仅能够节省人力成本,提高工作效率,在某些场景下也可以增加识别的准确性,从而带来更好的体验和服务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值