Python+Face++来实现检测和识别银行卡

本文介绍如何使用Python结合Face++ API实现银行卡的检测与识别,包括提取银行卡边框坐标及识别卡号。支持任意角度的银行卡识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python + Face++ —>实现检测和识别银行卡

知识储备:
描述
检测和识别银行卡,并返回银行卡卡片边框坐标及识别出的银行卡号。当前 Beta 版本一次只支持识别一张银行卡,图像内有多张卡时,返回识别结果置信度最高的银行卡。支持任意角度的识别

图片要求 :
图片格式:JPG(JPEG),PNG

图片文件大小:2 MB

卡片像素尺寸:最小 100*100 像素,最大 4096*4096 像素,短边不得低于 100 像素。
相关文档
准备工作:
a:python3.5(博主用的)
b:个人Face++账号(这里牵扯到个人的公钥和密钥所以才会有自己的Face++账号)
Face++网址
c:博主是在Pycharm运行环境下进行操作的,如果没有Pycharm用其他的多功能记事本也ok的,例如Geany这是博主前期用的一多功能记事本。
Pycharm下载安装


不废话啦进入正题
前提:一个文件夹下操作(牵扯到导入函数所以才注明会在一个文件夹下)
实现功能 :实现检测和识别银行卡
步骤:
1:文件夹id_bank下:新建:get_bank_read.py
代码:

# coding=utf-8
"""
@author: jiajiknag
程序功能:用于实现调用测试字典嵌套的函数
"""
def get_bank_value(date, keys, default=None):
    #default=None,在key值不存在的情况下,返回None
    keys_list = keys.split('.')
    #以“.”为间隔,将字符串分裂为多个字符串,其实字符串为字典的键,保存在列表keys_list里
    if isinstance(date,dict):
        #如果传入的数据为字典
        dictionary = dict(date)
        #初始化字典
        for i in keys_list:
            #按照keys_list顺序循环键值
            try:
                if dictionary.get(i) != None:
                    dict_values = dictionary.get(i)
                #如果键对应的值不为空,返回对应的值
                elif dictionary.get(i) == None:
                    dict_values = dictionary.get(int(i))
                #如果键对应的值为空,将字符串型的键转换为整数型,返回对应的值
            except:
                return default
                    #如果字符串型的键转换整数型错误,返回None
            dictionary = dict_values
        return dictionary
    else:
        #如果传入的数据为非字典
        try:
            dictionary = dict(eval(date))
            #如果传入的字符串数据格式为字典格式,转字典类型,不然返回None
            if isinstance(dictionary,dict):
                for i in keys_list:
                    #按照keys_list顺序循环键值
                    try:
                        if dictionary.get(i) != None:
                            dict_values = dictionary.get(i)
                        #如果键对应的值不为空,返回对应的值
                        elif dictionary.get(i) == None:
                            dict_values = dictionary.get(int(i))
                        #如果键对应的值为空,将字符串型的键转换为整数型,返回对应的值
                    except:
                        return default
                            #如果字符串型的键转换整数型错误,返回None
                    dictionary = dict_values
                return dictionary
        except:
            return default

2:文件夹id_bank下:新建:bank_Id_Card.py
代码:

# coding=utf-8
"""
@author: jiajiknag
程序功能:
"""
# 导入同一级文件夹的函数
from get_bank_read import get_bank_value
# 导包
import requests
from json import JSONDecoder
import datetime

# 协议URL/API参数--这里对应的face++的证件识别的URL:
http_url = "https://api-cn.faceplusplus.com/cardpp/beta/ocrbankcard"
# 公钥
key = "自己账号中的公钥"
# 密钥
secret = "自己账号的密钥"
# 图片地址
imagpath = "D:\ceshi_id\k.png" #本地自己图片的地址
# 默认值是0,不返回
data = {"api_key":key, "api_secret": secret}

# open()中"rb":r是只读,b是二进制,ipgpath是图片路径
files = {"image_file": open(imagpath, "rb")}
# 请求获取
response = requests.post(http_url, data=data, files=files)


# 内容编码设置是UTF-8
# 将json字符串转换成Python dict类型(字典类型)
req_con = response.content.decode('utf-8')
req_dict = JSONDecoder().decode(req_con)
#print(req_dict)
# 不加[0]的话,返回的是列表内有一个字典,形式为[{}],加入[0],则是一个字典
jjk_bank_message = req_dict["bank_cards"][0]

print("银行卡右上角的像素点X坐标:"+ str(get_bank_value(jjk_bank_message,"bound.right_top.x")))
print("银行卡右上角的像素点y坐标:"+ str(get_bank_value(jjk_bank_message,"bound.right_top.y")))
print("银行卡左上角的像素点X坐标:"+ str(get_bank_value(jjk_bank_message,"bound.left_top.x")))
print("银行卡左上角的像素点Y坐标:"+ str(get_bank_value(jjk_bank_message,"bound.left_top.y")))
print("银行卡右下角的像素点X坐标:"+ str(get_bank_value(jjk_bank_message,"bound.right_bottom.x")))
print("银行卡右下角的像素点Y坐标:"+ str(get_bank_value(jjk_bank_message,"bound.right_bottom.y")))
print("银行卡左下角的像素点X坐标:"+ str(get_bank_value(jjk_bank_message,"bound.left_bottom.x")))
print("银行卡左下角的像素点Y坐标:"+ str(get_bank_value(jjk_bank_message,"bound.left_bottom.y")))
print("银行卡号:"+ str(get_bank_value(jjk_bank_message,"number")))

说明::在Pycharm中导入函数时显示是错误的如下图:
这里写图片描述

But:你不用管不影响运行结果,可能是Pycharm的bug鬼知道那,不影响我们调用函数运行结果我就没管!!!

3:结果
这里写图片描述

备注:
图片大家就自己用自己的银行卡拍奥。
博主是新手,要有不对的地方或者任何建议和意见以及批评等还望指出!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jjkqjj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值