python 获取 身份证扫描件信息,python身份证信息识别代码
一、主要步骤
2.它让我们先获取访问令牌,先看获取访问令牌的文档
https://ai.baidu.com/docs#/Auth/top
3.需要应用密钥保密密钥需要先自行申请好
二、开始编码
1.先定义一个百度_令牌类用来处理代币相关的工作
类百度_令牌:
__app_key=申请到的 app_key
_ _ secrect _ key=申请到的 secrect _ key
def __init__(self):
自我. access _ token _ URL= https://AIP . baidubce . com/oauth/2.0/token?grant _ type=client _ credentials client _ id=% s client _ secret=% s
自我. access_token_url=self ._access_token_url % (self).__app_key,self ._ _秘密密钥)
自我. ok=假
自我. token_js=无
自我. get_token()
def _get_token(self,cb=print):
尝试:
rsp=requests.get(self ._访问_令牌_url)
如果rsp.status_code==200:
自我. token _ js=JSON。负载(RSP。内容。decode())
如果自我. token_js.get(access_token ):
自我. ok=真
除了:
及格
定义访问令牌(自身):
如果自我。_好的:
回归自我[access _ token ]
2.定义一个百度识别身份证照片的类
类百度_卡_img:
_ _ request _ URL= https://AIP。白杜布斯。 com/rest/2.0/ocr/v1/general _ basic
def __init__(self,baidu_token=None,img_path=None):
自我. img_path=img_path
自我. token=百度_token
def _get_data(self):
如果不是自我. token:
打印("访问令牌无效")
返回
访问令牌=自我.令牌.访问令牌()
如果不是访问令牌:
打印("访问令牌无效")
返回
尝试:
#二进制读取图片使用base64编码
用开放的(自我. img_path, rb )作为女:
data=base64.b64encode(f.read())
除了:
打印( img_path无效)
返回
#组装百度应用程序接口需要的参数
param={image:data}
url=self ._ _请求网址?访问令牌=访问令牌
#标题
headers={ Content-Type : application/x-www-form-urlencoded }
rsp=requests.post(url,data=param,headers=headers)
如果rsp.status_code==200:
返回json.loads(rsp.content.decode())
def get_image_data(self,token=None,image_path=None):
自我. img_path=image_path或自我._img_path
自我. token=令牌或自身. token
ret_js=self ._get_data()
如果不是ret_js:
返回
lst _ words=ret _ js。get(单词_结果)
如果不是第一个单词或len(lst_words) 5:
打印(“api不返回任何内容")
返回
real_words=[]
对我来说,用第一句话来说:
#测试发现身份证上面那行英文字母会被识别出来用正则过滤掉字母开头的结果
#被str.isalpha()坑了函数返回的是字符串全英文或中文不能用来过滤纯英文
如果不是re.match(r[a-zA-Z],i[words][0]):
real _ words.append(一)
lst_words=真实单词
结果={}
result[ name ]=lst _ words[0][ words ][2:]
result[ sex ]=lst _ words[1][ words ][2]
result[ nation ]=lst _ words[1][ words ][5:]
result[ born ]=lst _ words[2][ words ][2:]
result[ address ]=lst _ words[3][ words ][2:]
#测试发现如果身份证地址信息可能占一行也可能占两行
if len(lst_words) 5:
结果[ address ]=lst _ words[4][ words ]
结果[卡片编号]=第一个单词[len(第一个单词)- 1][单词][6:]
否则:
result[ card _ num ]=lst _ words[4][ words ][6:]
回送结果
写个演示测试一下结果
卡片=百度_卡_img(百度_令牌())
目录路径=。/test_img/
dirs=os.listdir(目录路径)
对于目录中的文件:
如果len(文件)4:
继续
后缀=文件[-4:]
如果后缀==。 jpg 或后缀==。png :
abs_path=目录_路径文件
数据=卡。获取图像数据(图像路径=绝对路径)
打印(数据)
结果如图:(图片是网图我自己也拿身份拍了一张试了也好的)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。