一、腾讯AI开放平台

https://ai.qq.com/

二、腾讯AI平台支持的功能

三、签名机制

1.计算步骤

用于计算签名的参数在不同接口之间会有差异,但算法过程固定如下4个步骤。

1.将<key, value>请求参数对按key进行字典升序排序,得到有序的参数对列表N

2.将列表N中的参数对按URL键值对的格式拼接成字符串,得到字符串T(如:key1=value1&key2=value2),URL键值拼接过程value部分需要URL编码,URL编码算法用大写字母,例如%E8,而不是小写%e8

3.将应用密钥以app_key为键名,组成URL键值拼接到字符串T末尾,得到字符串S(如:key1=value1&key2=value2&app_key=密钥)

4.对字符串S进行MD5运算,将得到的MD5值所有字符转换成大写,得到接口请求签名

2.注意事项

1.不同接口要求的参数对不一样,计算签名使用的参数对也不一样

2.参数名区分大小写,参数值为空不参与签名

3.URL键值拼接过程value部分需要URL编码

4.签名有效期5分钟,需要请求接口时刻实时计算签名信息

3.参考代码

import time
import random
import string
import base64
import hashlib
import requests
from urllib.parse import urlencode
from collections import OrderedDict class Sign:
def __init__(self):
self.app_id = 12345 # APP_ID
self.app_key = '' # APP_KEY @property
def time_stamp(self):
t = time.time()
return int(t) def random_string(self, num=16):
s = string.ascii_lowercase + string.digits
r = random.sample(s, num)
return ''.join(r) def add_field(self, dic):
dic['app_id'] = self.app_id
# 生成时间戳
dic['time_stamp'] = self.time_stamp
# 生成随机字符串
dic['nonce_str'] = self.random_string()
return dic def add_sign(self, dic):
d = OrderedDict()
# 将字典进行排序
for k in sorted(dic):
d[k] = dic[k]
# 将排序后的字典进行urlencode编码,得到字符串
s = urlencode(d, encoding='utf-8')
# 把app_key拼接到字符串
s += '&app_key={}'.format(self.app_key)
md = hashlib.md5()
md.update(s.encode('utf-8'))
# 将字符串进行md5运算得到签名
m = md.hexdigest().upper()
dic['sign'] = m
return dic

四、语音合成功能的使用

import time
import random
import string
import base64
import hashlib
import requests
from urllib.parse import urlencode
from collections import OrderedDict class Sound:
def __init__(self):
self.app_id = 12345 # APP_ID
self.app_key = '' # APP_KEY @property
def time_stamp(self):
t = time.time()
return int(t) def random_string(self, num=16):
s = string.ascii_lowercase + string.digits
r = random.sample(s, num)
return ''.join(r) def add_field(self, dic):
dic['app_id'] = self.app_id
dic['time_stamp'] = self.time_stamp
dic['nonce_str'] = self.random_string()
return dic def add_sign(self, dic):
d = OrderedDict()
for k in sorted(dic):
d[k] = dic[k]
s = urlencode(d, encoding='utf-8')
s += '&app_key={}'.format(self.app_key)
md = hashlib.md5()
md.update(s.encode('utf-8'))
m = md.hexdigest().upper()
dic['sign'] = m
return dic # 合成语音
def speech_synthesis(self, file_name=None, speaker=6, format=3, volume=0, speed=100, text=None, aht=0, apc=58):
if text == None:
text = '请输入想要转换的文字!'
if file_name == None:
file_name = 'test.mp3'
dic = {
'aht': aht,
'apc': apc,
'text': text,
'speed': speed,
'format': format,
'volume': volume,
'speaker': speaker,
}
# 生成字典
dic = self.add_field(dic)
# 获得签名后的字典
dic = self.add_sign(dic)
# 发post请求,把获得签名后的字典作为data
ret = requests.post(url='https://api.ai.qq.com/fcgi-bin/aai/aai_tts', data=dic).json()
# 将请求结果中的音频数据进行base64解码,然后写入文件
with open(file_name, 'wb') as f:
audio = base64.b64decode(ret['data']['speech'])
f.write(audio) if __name__ == '__main__':
s = Sound()
s.speech_synthesis(file_name='001.mp3', text='我爱你,中国!')

腾讯AI开放平台的使用的更多相关文章

  1. 腾讯AI开放平台的接口调用指南

    最近无意发现腾讯AI开放平台上提供了大量好玩的人工智能云服务,而且是完全免费的.只需要用QQ号登录即可.这么好的东西,作为一个程序员,当然要试试了! 从上图可以看出腾讯AI开放平台提供的人工智能服务主 ...

  2. 30行代码消费腾讯人工智能开放平台提供的自然语言处理API

    腾讯人工智能AI开放平台上提供了很多免费的人工智能API,开发人员只需要一个QQ号就可以登录进去使用. 腾讯人工智能AI开放平台的地址:https://ai.qq.com/ 里面的好东西很多,以自然语 ...

  3. 百度AI开放平台- API实战调用

    百度AI开放平台- API实战调用 一.      前言 首先说一下项目需求. 两个用户,分别上传了两段不同的文字,要计算两段文字相似度有多少,匹配数据库中的符合条件的数据,初步估计列出来会有60-1 ...

  4. 基于百度AI开放平台的人脸识别及语音合成

    基于百度AI的人脸识别及语音合成课题 课题需求 (1)人脸识别 在Web界面上传人的照片,后台使用Java技术接收图片,然后对图片进行解码,调用云平台接口识别人脸特征,接收平台返回的人员年龄.性别.颜 ...

  5. coding 绑定腾讯云开放平台注意事项

    coding升级后需要绑定腾讯云开放平台,按照coding文档的提示操作就好 1.创建腾讯云平台后,不要自定义邮箱和用户名 2.直接绑定原来我们使用的coding账号即可 绑定成功后,邮箱和用户名会自 ...

  6. 百度AI开放平台,语音识别,语音合成以及短文本相似度

    百度AI开放平台:https://ai.baidu.com/ 语音合成 from aip import AipSpeech APP_ID=" #'你的 App ID' API_KEY=&qu ...

  7. selenium自动化 | 借助百度AI开放平台识别验证码登录职教云

    #通过借助百度AI开放平台识别验证码登录职教云 from PIL import Image from aip import AipOcr import unittest # driver.get(zj ...

  8. 百度AI开放平台 UNIT平台开发在线客服 借助百度的人工智能如何开发一个在线客服系统

    这段时间在研究一些人工智能的产品,对比了国内几家做人工智能在线客服的,有些接口是要收费的,有些是免费的,但是做了很多限制,比如每天调用的接口次数限制是100次.后来就找到了百度的AI,大家也知道,目前 ...

  9. 百度AI开放平台 情感倾向分析实例以及gbk编码解决

    f=open('test.txt','a+',encoding='utf-8') for index,row in cxzg.iterrows(): text=str(row['text']) tex ...

随机推荐

  1. C++:普通变量C++命名规则

    C++提倡使用拥有一定意义的变量名,使程序代码更有阅读性,命名是必须使用的几种简单的C++命名规则: 命名时只能使用:字母字符.数字和下划线(_); 第一个字符不能是数字: 区分大小写(C++对大小写 ...

  2. Tomcat系列(5)——Tomcat配置详细部分

    Tomcat的架构图 Tomcat的组织结构 Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的是Catalina servlet容器,其他组件按照一定的格式要求配置在这个顶层 ...

  3. package.json 里的 dependencies和devDependencies区别

    dependencies(依赖的意思): 通过 --save 安装,是需要发布到生产环境的.比如项目中使用react,那么没有这个包的依赖就会报错,因此把依赖写入dependencies devDep ...

  4. 【作业4.0】HansBug的第四次面向对象课程思考

    嘛..不知不觉这门课程要结束了,那么就再说点啥以示庆祝呗. 测试vs正确性论证 说到这个,相比很多人对此其实很有疑惑,请让我慢慢分析. 逻辑概览 首先我们来看看两种方式各自的做法和流程是什么样的: 单 ...

  5. java平台学习笔记

    java程序从编写源码开始到程序执行一共有三个阶段,编写期,编译期,运行期. 通常,人们都希望自己的程序更快(不仅仅是执行更快,也有编写更快),因此java在不断更新. java源码先通过javac编 ...

  6. 20175204 张湲祯 2018-2019-2《Java程序设计》

    Arrays和String单元测试 一.类的作用 1.- String类 charAt String的charAt的作用是将字符串中第i个位置上的字符(从0开始计数)赋值给n,其用法为n=string ...

  7. java学习笔记05-运算符

    算数运算符 +:相加 -:相减 *:相乘 /:相除 %:取余 ++:自增 --:自减 public static void main(String[] args) { int i = 10; int ...

  8. c#串口编程(转)

    在单片机项目开发中,上位机也是一个很重要的部分,主要用于数据显示(波形.温度等).用户控制(LED,继电器等),下位机(单片机)与 上位机之间要进行数据通信的两种方式都是基于串口的: USB转串口 — ...

  9. ubuntu 18.04 配置远程ssh/远程ftp/远程vnc登陆

    18.04相比过去采用了新的桌面,配置环境稍微有一些不同了. 首先是远程登录,windows用Tera Trem连接,ip地址得自己根据实际情况来. ubuntu上,sudo apt-get inst ...

  10. jQuery-委托事件和on方法注册事件

    delegate注册委托事件 delegate--代理.委托 事件代理----事件最终不是由$("#first")执行,它只是代理元素 第一个参数:最终发生事件的元素 第二个参数: ...