IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 使用python内置函数进行常规API接口调用 -> 正文阅读

[人工智能]使用python内置函数进行常规API接口调用

这里使用百度智能云API接口调用为例(可以使用AipSpeech和request直接做出来,但不是本问目的):

调用API接口前您需要:

1、注册百度智能云并进行实名认证

2、打开左上角那三个杠的图标(导航栏):产品服务-人工智能(语音技术)

3、下载并安装python3

4、创建百度智能云APP(用于调用API),创建方法网上很多就不再赘述。

一:代码

详细代码和注释如下:

from urllib.request import urlopen
from urllib.request import Request
from urllib.parse import urlencode
import json
import base64


#说明:百度智能云用户APP监控报表每小时更新一次(自测,非实时更新)
AppID=1#'25046940'#用户唯一标识(必填项),实际使用时需要将AppID改为25046940,目前为了测试异常处理
# (实测结果显示对该号码小幅度改动不影响结果,说明百度智能云内部对该号码进行了模糊查询),用于API接口传参
API_KEY = 'GjssEQmW6F5wmE59XFYfB21A'#接口钥匙,用于鉴权认证
SECRET_KEY = 'EVfTGNv8Se0wqoHhovXx6PAkltlWYS9Z'#密钥,用于鉴权认证
TOKEN_URL = 'http://openapi.baidu.com/oauth/2.0/token'#鉴权认证传参网址,固定
ASR_URL = 'http://vop.baidu.com/server_api'#API接口传参网址,固定
file_path=r'./audio/16k.pcm'#pcm语音文件路径

#语音文件读取
speach_data=open(file_path,mode='rb').read()#打开并读取pcm语音文件为类二进制数据
length=len(speach_data)
base64_data=base64.b64encode(speach_data)#将类二进制数据转化为二进制数据
base64_data=str(base64_data,encoding='utf-8')#使用utf-8转换成二进制字符串
print('输出原始类二进制文件长度:',length)
print('转换为二进制文件输出:',base64_data[:10])


#获取认证
# 向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数
# 举例完整结构为https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pVw2&
params_token = {'grant_type': 'client_credentials',  # 必须参数,固定为client_credentials
          'client_id': API_KEY,  # API钥匙
          'client_secret': SECRET_KEY}  # 密钥
post_data_token = urlencode(params_token)#字典转化为网址序列
print('字典转化为网址序列:',post_data_token)
post_data_token = post_data_token.encode('utf-8')#二进制序列编码为utf-8格式的二进制序列
print('二进制序列编码为utf-8格式的二进制序列:',post_data_token)
def token(post_data,url=TOKEN_URL,headers={}):
    result=Request(url=url,data=post_data,headers=headers)#通过传入网址和参数爬取网址内容,headers主要用于拥有反爬机制的网址
    result=urlopen(result).read()#可视化网页爬取数据(转化为二进制字符串)urlopen是专门打开网页文件的open,该结果默认为json数据,json数据的本质:字符串
    print('爬取结果:',result)
    print('解码爬取结果:',result.decode())
    result=json.loads(result.decode())#加载json解码数据并转化为字典(实际不用解码,load能自己解码,但是为了保持代码结构的完整性保留了下来)
    return result
token=token(post_data_token,url=TOKEN_URL)['access_token']#获取access_token(认证编号)
print('查看token数据类型:',type(token))

#传入API参数和数据并获取结果
params = {'format': 'pcm',#文件格式(必填项)
          'rate': 16000,#采样率,值越高,语料传到API接口内的语料越精细(或者越丰富,涉及到连续与离散),识别精度越高(必填项)
          'token': token,#认证编号(必填项)
          'cuid': AppID,  # 用户唯一标识(必填项)(实测结果显示对该号码小幅度改动不影响结果,说明百度智能云内部对该号码进行了模糊查询)
          'channel': 1,#仅支持单声道,固定值1(必填项)
          'speech': base64_data,#本地语音文件的二进制语音数据 ,需要进行base64 编码成二进制数据。与len参数连一起使用。
          'len': length#本地语音文件的的字节数,单位字节
        }
post_data=json.dumps(params).encode('utf-8')#将参数转化为utf-8编码格式的json数据,json数据的本质:字符串
print('参数输出:',post_data[:30])

#存在的问题:为何token函数不可复用?
# result=token(post_data,url=ASR_URL,headers={'Content-Type':'application/json'})
result = Request(url=ASR_URL, data=post_data, headers={'Content-Type':'application/json'})  # 通过传入网址和参数爬取网址内容,headers主要用于拥有反爬机制的网址
result = urlopen(result).read()  # 可视化网页爬取数据(转化为二进制字符串)urlopen是专门打开网页文件的open,该结果默认为json数据,json数据的本质:字符串
print('爬取结果:', result)
print('解码爬取结果:', result.decode())
result = json.loads(result.decode())  # 加载json解码数据并转化为字典(实际不用解码,load能自己解码,但是为了保持代码结构的完整性保留了下来)


errocode_= {}
with open(r'./百度智能云API错误码大全.txt','r',encoding='utf-8') as f:
    r=f.readlines()
    num=0
    for i in range(int(len(r)/8+1)):
        num0=r[num].strip()
        num1=r[num+2].strip()
        num2=r[num+4].strip()
        num3=r[num+6].strip()
        errocode_[f"{num0}"]=[num1,num2,num3]
        num+=8

try:
    print('最终结果:',result['result'][0])
except KeyError as err:
    errocode=str(result['err_no'])
    print(f"!!!获取失败,错误来源:{errocode_[errocode][0]}\n错误原因:{errocode_[errocode][1]}\n解决方案:{errocode_[errocode][2]}")



二:数据

1、关于文件pcm语音文件需要自己录制。

2、将下面文本块复制存为“百度智能云API错误码大全.txt”并与上述代码文件放置同一路径

3300

用户输入错误

输入参数不正确

请仔细核对文档及参照demo,核对输入参数

3301

用户输入错误

音频质量过差

请上传清晰的音频

3302

用户输入错误

鉴权失败

token字段校验失败。请使用正确的API_KEY 和 SECRET_KEY生成。或QPS、调用量超出限额。或音频采样率不正确(可尝试更换为16k采样率)。

3303

服务端问题

语音服务器后端问题

请将api返回结果反馈至论坛或者QQ群

3304

用户请求超限

用户的请求QPS超限

请降低识别api请求频率 (qps以appId计算,移动端如果共用则累计)

3305

用户请求超限

用户的日pv(日请求量)超限

请“申请提高配额”,如果暂未通过,请降低日请求量

3307

服务端问题

语音服务器后端识别出错问题

目前请确保16000的采样率音频时长低于30s。如果仍有问题,请将api返回结果反馈至论坛或者QQ群

3308

用户输入错误

音频过长

音频时长不超过60s,请将音频时长截取为60s以下

3309

用户输入错误

音频数据问题

服务端无法将音频转为pcm格式,可能是长度问题,音频格式问题等。 请将输入的音频时长截取为60s以下,并核对下音频的编码,是否是16K, 16bits,单声道。

3310

用户输入错误

输入的音频文件过大

语音文件共有3种输入方式: json 里的speech 参数(base64后); 直接post 二进制数据,及callback参数里url。 分别对应三种情况:json超过10M;直接post的语音文件超过10M;callback里回调url的音频文件超过10M

3311

用户输入错误

采样率rate参数不在选项里

目前rate参数仅提供16000,填写4000即会有此错误

3312

用户输入错误

音频格式format参数不在选项里

目前格式仅仅支持pcm,wav或amr,如填写mp3即会有此错误

有问题请联系邮箱:1055365751@qq.com

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-26 12:13:20  更:2021-10-26 12:15:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 8:29:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码