python实现图⽚⽂字提取,准确率⾼达99%,强⽆敌
上次我使⽤的百度AI开放平台的API接⼝实现图⽚的转化,后来有许多⼩伙伴都私信问我,怎么获取百度AI平台的AK和SK。为了统⼀回答⼤家的问题,今天我⼜使⽤百度API实现了⼀个从图⽚中提取⽂字和识别⾝份证的功能,详细描述实现过程,有收获的⼩伙伴记得收藏、转发分享哦。
百度AI开放平台
⾸先我们需要注册⼀个账号,注册登录之后我们选择⽂字识别
菜鸟⼩⽩的平台因为已经创建了⼀个应⽤了,⾸次登录应该是没有应⽤的,点击创建应⽤就好了
后⾯输⼊创建的应⽤名称,从创建页⾯上看API⽀持的功能很多,什么⽂字识别、⾝份证识别、银⾏卡识别和驾驶证识别等等,另外如果需要其他类型的功能(如图⽚效果增强等)也可以直接勾选上。
下⾯我们不需要选择⽂字识别包名,填写⼀个应⽤描述点击创建就OK了。
创建完成之后我们就可以看到我们需要的AK(API Key)和SK(Secret Key)了。
思路分析
可以看到百度AI开放平台是有提供API⽂档和举例代码的。写程序之前需要先看看我们的要使⽤的接⼝是什么格式,是否需要⾝份认证。百度AI开放就是需要使⽤AK和SK去和平台做⼀个鉴权操作,获取⼀个access token,然后我们再拿着这个access token去请求接⼝,完成我们今天需要完成的⽂字识别和⾝份证识别功能。
鉴权函数
百度AI开放平台鉴权函数
def get_access_token():
菜鸟教程python函数url ='aip.baidubce/oauth/2.0/token'
data ={
'grant_type':'client_credentials',# 固定值
'client_id':'eFGwDIb*******HucbnPr',# 在开放平台注册后所建应⽤的API Key
'client_secret':'XPxWT2L********PFVCKS6PVih'# 所建应⽤的Secret Key
}
res = requests.post(url, data=data)
res = res.json()
print(res)
access_token = res['access_token']
return access_token
⽂字识别函数
#通⽤⽂字识别
def general_word():
#通⽤⽂字识别接⼝url
general_word_url ="aip.baidubce/rest/2.0/ocr/v1/accurate_basic"
#获取执⾏路径
# path = os.getcwd()
# ⼆进制⽅式打开图⽚⽂件
f =open('5.jpg','rb')
img = base64.ad())
print(img)
params ={"image":img,
"language_type":"CHN_ENG"}
access_token = get_access_token()
request_url = general_word_url +"?access_token="+ access_token
print(request_url)
headers ={'content-type':'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
# print(response)
# res = response.json()
if response:
res = response.json()["words_result"]
print(res)
file_name ="菜鸟⼩⽩.txt"
with open(file_name,'w', encoding='utf-8')as f:
for j in res:
print(j["words"])
f.write(j["words"]+"\n")
当我们判断返回值存在内容时,我们将json格式的返回值,写⼊“菜鸟⼩⽩.txt”⽂档中。⾝份证识别函数
我们写完了⽂字识别之后,其实写⾝份证识别和其它证件的识别就都是⼀样的⽅式了调⽤了。#⾝份证识别
def idcard():
idcard_url ="aip.baidubce/rest/2.0/ocr/v1/idcard"
# ⼆进制⽅式打开图⽚⽂件
f =open('4.jpg','rb')
img = base64.ad())
params ={"id_card_side":"front","image":img}
access_token = get_access_token()
request_url = idcard_url +"?access_token="+ access_token
print(request_url)
headers ={'content-type':'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
res = response.json()["words_result"]
file_name ="菜鸟⼩⽩的学习分享.txt"
with open(file_name,'w', encoding='utf-8')as f:
f.write("住址:"+res["住址"]["words"]+"\n")
f.write("出⽣⽇期:"+ res["出⽣"]["words"]+"\n")
f.write("姓名:"+ res["姓名"]["words"]+"\n")
f.write("公民⾝份号码:"+ res["公民⾝份号码"]["words"]+"\n")
f.write("性别:"+ res["性别"]["words"]+"\n")
f.write("民族:"+ res["民族"]["words"]+"\n")
主函数
最后我们写⼀个主函数调⽤不同的功能函数就好了。