import os
import time
import json
import random
import base64
import string
import hashlib
import requests
from urllib import parse
from dataclasses import dataclass
def get_nonce_str():
"""生成随机字符串,得到noce_str参数"""
rule = string.ascii_lowercase + string.digits
ran_str = random.sample(rule, 16)
return "".join(ran_str)
def get_img_base64str(image_file):
"""生成原始图片的base64编码数据,得到image参数"""
if not isinstance(image_file, str):
return None
if not os.path.isfile(image_file):
print ('图片文件有误,请传入正确的文件路径')
return None
with open(image_file, 'rb') as fp:
imgbase64 = base64.b64encode(fp.read())
return imgbase64.decode()
@dataclass
class TencentAPIMsg(object):
app_id: str
app_key: str
app_url: str
image_file: str
def __post_init__(self):
self.time_stamp = str(int(time.time()))
self.image = get_img_base64str(self.image_file)
self.nonce_str = get_nonce_str()
def get_param_sign_str(self, param_dict):
"""根据规则拼接字符串,并对其进行MD5运算,得到sign"""
param_sign = parse.urlencode(param_dict)
md5 = hashlib.md5()
md5.update(param_sign.encode())
return md5.hexdigest().upper()
def set_req_dict(self):
"""生成字典,得到请求参数,严格按照此代码顺序,避免排序"""
req_dict = {
'app_id': self.app_id,
'image': self.image,
'nonce_str': self.nonce_str,
'time_stamp': self.time_stamp,
'app_key': self.app_key, }
req_dict['sign'] = self.get_param_sign_str(req_dict)
return req_dict
def get_ocr_result(self):
data = self.set_req_dict()
res = requests.post(self.app_url, data=data)
try:
res_data = res.json()
item_list = res_data['data']['item_list']
text = '\n'.join([each['itemstring'] for each in item_list])
except:
print ('获取结果失败,请检查各参数是否配置正确。')
text = ''
return text
if __name__ == "__main__":
api_id = '2********9' #需要自己申请
api_key = '0**************7' #需要自己申请
api_url = 'https://api.ai.qq.com/fcgi-bin/ocr/ocr_generalocr'
image_file = 'F:\\20180829193608871.jpg'
Tencent = TencentAPIMsg(api_id, api_key, api_url, image_file)
result = Tencent.get_ocr_result()
print(result)
Python3 调用腾讯AI,进行文字识别
猜你喜欢
转载自blog.csdn.net/qq523176585/article/details/84638128
今日推荐
周排行