Python3 调用腾讯AI,进行文字识别

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)

猜你喜欢

转载自blog.csdn.net/qq523176585/article/details/84638128