Python3腾讯优图ocr

腾讯优图给的示例还是Python2.7的
在官方文档上改的时候后面一直提示签名信息无效,借鉴了下这位兄弟的签名计算方式。
后面加了tkinter选择文件夹的功能。
把要识别的图片放入文件夹,识别,识别结果会存到文件夹中。
代码:

#-*- coding: UTF-8 -*-
import requests
import hashlib
import time
import random
import string
import base64
import os
import re
from urllib.parse import quote
from docx import Document
from docx.shared import Inches
from tkinter import filedialog
 
def curlmd5(src):
    m = hashlib.md5(src.encode('UTF-8'))
    return m.hexdigest().upper()
 
def get_params(item):
    # 请求时间戳
    t = time.time()
    time_stamp=str(int(t))

    nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10))

    # 应用标志,这里修改成自己的id和key
    app_id = 'XXXXXXX'
    app_key = 'XXXXXXXXX'

    params = {'app_id':app_id, 'image':item, 'time_stamp':time_stamp, 'nonce_str':nonce_str}
    
    sign_before = ''

    # 要对key排序再拼接
    for key in sorted(params):
        # 键值拼接过程value部分需要URL编码,URL编码算法用大写字母,例如%E8。quote默认大写。
        sign_before += '{}={}&'.format(key,quote(params[key], safe=''))
    
    # 将应用密钥以app_key为键名,拼接到字符串sign_before末尾
    sign_before += 'app_key={}'.format(app_key)

    # 对字符串sign_before进行MD5运算,得到接口请求签名
    sign = curlmd5(sign_before)
    params['sign'] = sign
    return params

def get_content(item):
    # 聊天的API地址    
    url = "https://api.ai.qq.com/fcgi-bin/ocr/ocr_generalocr"
    # 获取请求参数  
    payload = get_params(item)
    # r = requests.get(url,params=payload)  
    r = requests.post(url,data = payload)
    return r

def add_Word(item):
    global document
    document.add_paragraph(item)

if __name__ == '__main__':
    inpath = filedialog.askdirectory()
    outpath = inpath
    filenames = os.listdir(inpath)
    document = Document()

    filenames.sort()
    for i, file in enumerate(filenames):
        with open(inpath + '\\' + file, 'rb') as bin_data:
            image_data = bin_data.read()
            image_data = base64.b64encode(image_data)

        response = get_content(image_data)
        print('----------------------SEND REQ----------------------')

        if response.json()['ret'] != 0:
            print(response.json()['ret'])
            print('----------------------API FAIL----------------------')
        
        else:
            document.add_heading(str(i + 1), 3)
            for results in response.json()['data']['item_list']:
                add_Word(results['itemstring'])
            document.add_paragraph('')
            document.add_paragraph('')
            print('----------------------API SUCC----------------------')

    document.save(outpath + '\\' + '生成结果.docx')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值