【六期】银行卡识别
worddict 发布于2019-11-18 浏览:2003 回复:5
1
收藏
最后编辑于2019-11-22

功能介绍
支持对主流银行卡的卡号、有效期、发卡行、卡片类型4个关键字段进行结构化识别,识别准确率超过99%

应用场景
金融远程身份认证
使用银行卡和身份证识别技术,实现对客户银行账户和身份信息的结构化识别和录入,可应用于金融场景,满足对银行客户进行实名认证的需求,有效降低用户输入成本,提升用户体验,控制业务风险
电商支付绑卡
使用银行卡识别云端服务实现拍照识别或使用移动端离线SDK实现扫描识别,并结构化返回卡号、卡片类型等信息,有效提升银行卡信息录入的准确性,并大幅度降低用户手工输入成本,提升用户使用体验


接口描述
对银行卡所有关键字段进行识别。

帮助地址:https://ai.baidu.com/docs#/OCR-API-Bankcard/584acb75

请求URL: https://aip.baidubce.com/rest/2.0/ocr/v1/bankcard

请求参数
image string 是 图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式

返回示例

{
"log_id": 144718895115129615,
"result": {
"bank_card_number": "3568 8900 8000 0005",
"valid_date": "07/21",
"bank_card_type": 2,
"bank_name": "招商银行"
}
}


代码实现(python3):

import urllib
import base64
import json
import time

#client_id 为官网获取的AK, client_secret 为官网获取的SK
client_id = 'XXXXXXXX'
client_secret = 'XXXXXXXXX'

#获取token
def get_token():
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret
    request = urllib.request.Request(host)
    request.add_header('Content-Type', 'application/json; charset=UTF-8')
    response = urllib.request.urlopen(request)
    token_content = response.read()
    if token_content:
        token_info = json.loads(token_content)
        token_key = token_info['access_token']
    return token_key

#银行卡识别
def bankcard(filename):
    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/bankcard"
    # 二进制方式打开图片文件
    f = open(filename, 'rb')
    img = base64.b64encode(f.read())
    params = dict()
    params['image'] = img
    params['show'] = 'true'
    params = urllib.parse.urlencode(params).encode("utf-8")
    
    access_token = get_token()
    request_url = request_url + "?access_token=" + access_token
    request = urllib.request.Request(url=request_url, data=params)
    request.add_header('Content-Type', 'application/x-www-form-urlencoded')
    response = urllib.request.urlopen(request)
    content = response.read()
    if content:
        content=content.decode('utf-8')
        data = json.loads(content)
        words_result=data['result']
        print ('银行卡卡号:',words_result['bank_card_number'])
        print ('有效日期:',words_result['valid_date'])
        cardtype=words_result['bank_card_type']
        if cardtype==0:
            cardtype=='不能识别'
        elif cardtype==1:
            cardtype='借记卡'
        elif cardtype==2:
            cardtype='信用卡'
        print ('银行卡类型:',cardtype)
        print ('银行名:',words_result['bank_name'])
        




产品测评:

银行卡卡号: 6228 4188 8888 8888
有效日期: 10/00
银行卡类型: 0
银行名:

银行卡卡号: 3902 0181 9864 1384
有效日期: NO VALID
银行卡类型: 0
银行名:

 

测试结果及建议

通过评测发现百度银行卡识别具有以下一些优势:
字段齐全:支持对银行卡卡号、有效期两个基本字段信息进行结构化识别,并根据识别到的卡号判断发卡行及卡片类型,满足各类相关业务需求
准确率高:依托百度优秀的图像处理技术和海量优质数据,支持识别各角度银行卡照片,识别准确率超过99%
服务稳定:依托百度云技术实力,提供高可靠性、弹性可伸缩、高并发承载的文字识别服务,服务可用性高达99.99%

不过在实验中对银行名,识别效果稍差,希望后续能进行优化。

收藏
点赞
1
个赞
共5条回复 最后由worddict回复于2019-11-22
#6worddict回复于2019-11-22

百度AI的功能都很强大

0
#5worddict回复于2019-11-22
#3 小雨青青润无声回复
百度的识别准确率真的很高

是啊,非常强大

0
#4小雨青青润无声回复于2019-11-21
#2 worddict回复
这个功能用起来感觉很不错啊

使用过一些文字识别程序,为什么有的时候名字是5个字,识别后会自动删减成2个字

0
#3小雨青青润无声回复于2019-11-21

百度的识别准确率真的很高

0
#2worddict回复于2019-11-18

这个功能用起来感觉很不错啊

0
TOP
切换版块