调用腾讯Ai 识别图片文本信息

此程序主要调用的是腾讯通用Ai接口识别  、支持JPG、PNG、BMP格式

首先查看下接口文档

一、首先是python2.7版本代码

#encoding=utf-8
import requests
import  time
import  string
import random
import base64
import hashlib
import  urllib
from urllib import urlencode
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)




CommonUrl="https://api.ai.qq.com/fcgi-bin/ocr/ocr_generalocr"
app_id="填自己的"
AppKey="填自己的"
time_stamp=int(time.time())
nonce_str=''.join(random.sample(string.ascii_letters + string.digits, 15))


def MakeSign():
    Dict ={'app_id': app_id, 'time_stamp': time_stamp, 'nonce_str': nonce_str, 'image': ImageBase64()}
    T_str1 = ""
    for key in sorted(Dict.keys()):
        if key == 'app_key':
            continue
        T_str1 = T_str1 + "%s=%s&" % (key, urllib.quote(str(Dict[key]), safe=''))
    T_sgin = T_str1 + 'app_key=' + AppKey
    signraw=T_sgin.encode("utf-8")
    hash_md5 = hashlib.md5()
    hash_md5.update(signraw)
    sign=hash_md5.hexdigest().upper()
    return sign



def ImageBase64():
    imagebase64=None
    try:
        with open("C:\\Users\\Administrator\\Desktop\\xiejiangpeng.pn1g", "rb") as f:
            imagebase64 = base64.b64encode(f.read())
    except Exception as ex:
        print(ex)
        exit()
    return imagebase64




sign=MakeSign()#签名
image=ImageBase64()#图片


#调用OCR图片识别接口
TengXunAiCommonBody={'app_id':app_id,'time_stamp':time_stamp,'nonce_str':nonce_str,'sign':sign,'image':image}
TengXunAiCommon=requests.post(CommonUrl,TengXunAiCommonBody,verify=False)
try:
    temp=TengXunAiCommon.json()["data"]["item_list"][0]["itemstring"]#标志符。用于判断异常
    print("识别出来的文字如下:")
    for i in  range(0,len(TengXunAiCommon.json()["data"]["item_list"])):
        print(TengXunAiCommon.json()["data"]["item_list"][i]["itemstring"])
except Exception:
    print("程序异常.....")
    print(TengXunAiCommon.json()["msg"])

运行结果 :

图片信息

接口抓包记录

程序控制台输出:

二、python3.6代码

相对于python2.7   此版本区别有以下几个点  

1.对字符串进行url编码的时候 

在 Python2.x 中的用法是:
urllib.quote(text)
Python3.x 中是

urllib.parse import urlencode
from urllib import parse

urllib.parse.quote(text)

2.python3.x对image进行base64编码之后 是byte的类型 需要decode转化成str 否则参加拼接字符串会多一个b' 导致签名错误

3.注意url编码后 只会将特殊符号的变成大写 比如B%27     其他的不需要变成大写字符串

4. 字节转化到str需要decode  而str到byte需要encode    在python3.6的时候 md5加密 如果输入str类型的会报错  只能填byte格式的   也就是需要encode()的原因  

5.另外可以直接对dict进行url编码 (默认情况下 就是对value进行url编码 符合此次的情况)使用Urlencode(Dict).encode()

urlencode(Dict).encode()首先urlencode 得到一个str  之后在encode转化成byte 从而进行md5加密  这种方式比较简单  而python2.7中 使用的是对单个str进行url编码  这里是对dict直接进行urlencode
#encoding=utf-8
import requests
import  time
import  string
import random
import base64
import hashlib

#这些是urlencode
from urllib.parse import urlencode
from urllib import parse

from requests.packages.urllib3.exceptions import InsecureRequestWarning
import  urllib
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)




CommonUrl="https://api.ai.qq.com/fcgi-bin/ocr/ocr_generalocr"
app_id="填自己的"
AppKey="填自己的"
time_stamp=int(time.time())
nonce_str=''.join(random.sample(string.ascii_letters + string.digits, 15))
T_str1=""

def MakeSign():
    Dict={'app_id':app_id,'time_stamp':time_stamp,'nonce_str':nonce_str,'image':ImageBase64()}
    #global T_str1
    # for key in sorted(Dict.keys()):#其中sorted是按照key的升序进行循环
    #     if key == 'app_key':
    #         continue
    #     #累加除了app_key之外的键与值拼接成url 格式)
    #     T_str1 = T_str1+ "%s=%s&" % (key, urllib.parse.quote(str(Dict[key]), safe=''))
    # signStr=T_str1+'app_key'+"="+AppKey
    # signraw=signStr.encode("utf-8")
    # Md5 = hashlib.md5()
    # Md5.update(signraw)
    # sign = Md5.hexdigest().upper()
    # print(sign)
    """方法二 python3.x(imagebase64之后生成的是byte而不是str) 同时直接对dict进行url中value进行编码 """
    Dict = sorted(Dict.items(), key=lambda item: item[0], reverse=False)
    Dict.append(('app_key', AppKey))
    sha = hashlib.md5()
    rawtext = urlencode(Dict).encode("utf-8")
    sha.update(rawtext)
    sign = sha.hexdigest().upper()
    return sign

def ImageBase64():
    imagebase64=None
    try:
        with open("C:\\Users\\xjp\\Desktop\\xiejiangpeng.png", "rb") as f:
                imagebase64 = base64.b64encode(f.read()).decode("utf-8")#需要decode否则是byte的类型
    except Exception as ex:
        print(ex)
        exit()
    return imagebase64






sign=MakeSign()
image=ImageBase64()

TengXunAiCommonBody={'app_id':app_id,'time_stamp':time_stamp,'nonce_str':nonce_str,'sign':sign,'image':image}
TengXunAiCommon=requests.post(CommonUrl,TengXunAiCommonBody,verify=False)
try:
    temp=TengXunAiCommon.json()["data"]["item_list"][0]["itemstring"]#标志符。用于判断异常
    print("识别出来的文字如下:")
    for i in  range(0,len(TengXunAiCommon.json()["data"]["item_list"])):
        print(TengXunAiCommon.json()["data"]["item_list"][i]["itemstring"])
except Exception:
    print("程序异常.....")
    print(TengXunAiCommon.json()["msg"])

识别的图片和运行的结果如下

猜你喜欢

转载自blog.csdn.net/Tester_xjp/article/details/81628006