PythonTkinter 练习10之 自编工具 利用Baidu识别API识别图片上的文字
#Time: 2020/03/4
#Author: Xiaohong
#运行环境: OS: Win7 64位 专业版Pack1
# Python: 3.7
功能:利用Baidu识别API识别图片上的文字
首要条件:需要在baidu 上注册,开启 图片识别的 API接口,获取到ak号与sk 号,具体操作方法,可baidu.
此程序在 PythonTkinter 练习9 之 自编工具 主界面编写 中被调用
import urllib.request
import json
import time
#设立函数,来取得当前时间,作为文件名的一部分,以免文件名重复
def get_sysdate():
now = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime(time.time()))
# print(now)
return now
def Tl_badiu_Scan(website):
ak='f2wosFQ4weetE**************' #baidu提供的ak号,在baidu开启图片识别功能时会提供
sk='Yb0Gs7W2Q6UQh**************' #baidu提供的sk号,在baidu开启图片识别功能时会提供
#设立返回列表,保存各阶段执行时间点及返回值
ret_val=[]
try:
# baidu 身份验证
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s' %(ak,sk)
request = urllib.request.Request(host)
#request.add_header('Content-Type','application/x-www-form-urlencoded;charset=UTF-8')
request.add_header('Content-Type','application/json;charset=UTF-8')
response = urllib.request.urlopen(request)
content = response.read()
json_all=json.loads(content)
access_token=json_all['access_token']
# baidu 图片识别的固定网址
url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=%s' %access_token
ret_val.append('1:'+get_sysdate())
print(ret_val)
# data = urllib.parse.urlencode({'url':'https://www.python.org/static/img/python-logo.png'}).encode()
ret_val.append('2:' + get_sysdate())
data = urllib.parse.urlencode({'url':website}).encode()
req=urllib.request.Request(url,method='POST')
ret_val.append('3:' + get_sysdate())
req.add_header('Content-Type','application/x-www-form-urlencoded')
ret_val.append('4:' + get_sysdate())
res= urllib.request.urlopen(req,data).read().decode('utf-8')
ret_val.append('5:' + get_sysdate())
ocr = json.loads(res)
ret_val.append('6:' + get_sysdate())
for item in ocr['words_result']:
print(item['words'])
ret_val.append('7:' + get_sysdate())
ret_val.append('7: Result is:' + item['words'] )
except KeyError as ke:
ret_val.append('X:' + get_sysdate())
ret_val.append('X: 错误发生:KeyError,请稍后再试' )
except :
import sys
tuple = sys.exc_info()
errmsg = ' 错误为:' + str(tuple[1])
ret_val.append('Z:' + get_sysdate())
ret_val.append('Z: 未知错误发生,请稍后再试:' +errmsg)
finally:
return ret_val
print(ret_val)
if __name__ == "__main__":
Tl_badiu_Scan('https://www.python.org/static/img/python-logo.png')