可识别身份证正反面信息,优化了提取识别信息代码。
'''
百度AI开放平台,身份证识别应用,后期将进行UI设计,将识别可视化
'''
#导入相关库
# encoding:utf-8
import requests
import base64
import re
#API_Key Secret_Key 请从百度AI开放平台申请。
API_Key = "dz2******Ojj8U2"
Secret_Key = "zUtd3Mw********K7qqXZ"
#调用鉴权接口获取的token,方法参考:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu中示例代码
def get_access_token():
url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id="+ API_Key +"&client_secret="+Secret_Key
payload = ""
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
access_token = re.findall(r'access_token":"(.*?)"',response.text)
return access_token
#识别过程代码,参考:https://ai.baidu.com/ai-doc/OCR/rk3h7xzck中的示例代码
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard"
# 二进制方式打开图片文件,e:/lai.jpg为识别的身份证图片的本地地址
path = input("请输入身份证图片地址:")
f = open(path, 'rb')
img = base64.b64encode(f.read())
params = {"id_card_side":"front","image":img}
#获取access_token
access_token = get_access_token()
#填入access_token信息
request_url = request_url + "?access_token=" + str(access_token)
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
#如果识别结果不为空,打印识别关键信息
if response:
#从response.json()中取出识别的信息
# sxrq = re.findall(r"'签发日期': {'words': '(.*?)'",str(response.json()))
# ssrq = re.findall(r"'失效日期': {'words': '(.*?)'",str(response.json()))
# qfjg = re.findall(r"'签发机关': {'words': '(.*?)'", str(response.json()))
# #打印信息
# print("签发日期:" + str(sxrq))
# print("失效日期:"+str(ssrq))
# print("签发机关:" + str(qfjg))
# print(response.json())
sfz = response.json()
if '签发日期' in sfz['words_result']:
qfq = sfz['words_result']['签发日期']['words']
sxq = sfz['words_result']['失效日期']['words']
qfjg = sfz['words_result']['签发机关']['words']
print("签发日期:" + qfq)
print("失效日期:"+sxq)
print("签发机关:" + qfjg)
elif '姓名' in sfz['words_result']:
xm = sfz['words_result']['姓名']['words']
xb = sfz['words_result']['性别']['words']
mz = sfz['words_result']['民族']['words']
cs = sfz['words_result']['出生']['words']
zz = sfz['words_result']['住址']['words']
sfzh = sfz['words_result']['公民身份号码']['words']
print('姓名:' + xm)
print('性别:' + xb)
print('民族:' + mz)
print('出生:' + cs)
print('住址:' + zz)
print('公民身份号码:' + sfzh)
else:
print("身份证信息识别失败!")