腾讯优图给的示例还是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')