最近接到一个任务,要求使用python进行语音合成,实现班级点名的功能。后来使用了pyttsx库,发现这个库合成的语音听起来不清晰,于是果断抛弃。然后就想起了使用腾讯的语音合成api,发现腾讯优图的语音合成还是比较清晰的。本来腾讯ai开放平台的api使用起来不难,但就是计算 “sign” 这个签名时有些不好理解。这里只对这个签名的算法进行讲解。

官方提供的介绍如下:

下面分步介绍:

# 在执行这一步时首先要保证parms里的所有必须参数(sign除外)都已经完整
# 我的params如下:
params = {'app_id' : self.APP_ID,'time_stamp' : time_stamp,'nonce_str' : nonce_str,'text' : self.TEXT,'model_type' : self.model_type, # 语音 0~2。0:女。1:女英文。2:男'speed' : self.speed, # 语速 -2:0.6,-1:0.8, 0:正常, 1:1.2倍,2:1.5倍};
# 其中的time_stamp和nonce_str需要实时计算。方法如下:time_stamp = int(time.time());   # 获得时间戳(秒级),防止请求重放nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10)); # 获得随机字符串,保证签名不被预测。"""将<key, value>请求参数对按key进行字典升序排序,得到有序的参数对列表N将列表N中的参数对按URL键值对的格式拼接成字符串,得到字符串T(如:key1=value1&key2=value2),URL键值拼接过程value部分需要URL编码,URL编码算法用大写字母,例如%E8,而不是小写%e8"""# 获得sign对应的值before_sign = '';# 对key排序拼接for key in sorted(params):before_sign += f'{key}={quote(str(params[key]).encode("utf8"))}&';

# 将应用秘钥以app_key为键名,拼接到before_sign的末尾before_sign += f"app_key={self.APP_KEY}";

 # 对获得的before_sign进行MD5加密(结果大写),得到借口请求签名sign = hashlib.md5(before_sign.encode("utf-8")).hexdigest().upper();# 将请求签名添加进参数字典params["sign"] = sign;

最后附上完整代码:

        # 获得时间戳(秒级),防止请求重放time_stamp = int(time.time());# 获得随机字符串,保证签名不被预测nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10))# 组合参数(缺少sign,其值要根据以下获得)params = {'app_id' : self.APP_ID,'time_stamp' : time_stamp,'nonce_str' : nonce_str,'text' : self.TEXT,'model_type' : self.model_type, # 语音 0~2。0:女。1:女英文。2:男'speed' : self.speed, # 语速 -2:0.6,-1:0.8, 0:正常, 1:1.2倍,2:1.5倍};# 获得sign对应的值before_sign = '';# 对key排序拼接for key in sorted(params):before_sign += f'{key}={quote(str(params[key]).encode("utf8"))}&';# 将应用秘钥以app_key为键名,拼接到before_sign的末尾before_sign += f"app_key={self.APP_KEY}";# 对获得的before_sign进行MD5加密(结果大写),得到借口请求签名sign = hashlib.md5(before_sign.encode("utf-8")).hexdigest().upper();# 将请求签名添加进参数字典params["sign"] = sign;

腾讯AI开放平台的签名算法(Python)相关推荐

  1. 腾讯AI开放平台 SDK

    腾讯AI开放平台 SDK Tencent AI open platform sdk Special thanks to the generous sponsorship by: Requirement ...

  2. python3调用腾讯AI开放平台

    CSDN上偶遇一文说明如何调用腾讯AI开放平台API,因为喜欢python3,所以用python3实现了下. 用qq登录获取自己的id和key. 参考点击打开链接. 首先获取请求参数.新建了个文件md ...

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

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

  4. 腾讯ai开放平台 手册_创建手册以实现大规模开放

    腾讯ai开放平台 手册 "是的,但是你实际上是怎么做到的呢?" 在Opensource.com以及无数的会议和研讨会上,这是我们社区领域最常见的问题. 人们倾向于理解为什么在工作场 ...

  5. 腾讯AI开放平台使用尝试:代理后的文本翻译API使用方式

    这篇文章介绍一下如何结合代理服务器使用腾讯AI开放平台提供的文本翻译API. 目录 事前准备 请求参数 返回格式 示例代码 使用示例 常见问题 结果确认 总结 参考内容 事前准备 实现需要申请申请账号 ...

  6. 腾讯AI开放平台使用尝试:账号开通/应用创建/能力开通

    这篇文章记录一下使用腾讯AI开放平台的使用:如何进行账号开通.应用创建和能力开通. 目录 文档中心地址 注册成为开发者 步骤1:点击控制台 步骤2: 通过QQ账号关联 创建应用并开通能力 步骤1: 创 ...

  7. 腾讯AI开放平台的使用

    一.腾讯AI开放平台 https://ai.qq.com/ 二.腾讯AI平台支持的功能 三.签名机制 1.计算步骤 用于计算签名的参数在不同接口之间会有差异,但算法过程固定如下4个步骤.1.将< ...

  8. 腾讯开发平台php,腾讯AI开放平台 Tencent AI open platform

    腾讯AI开放平台 SDK Tencent AI open platform sdk Special thanks to the generous sponsorship by: Requirement ...

  9. php图像识别api,使用腾讯AI开放平台api进行图片OCR文字识别

    重要:本文最后更新于2019-05-20 08:46:46,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗. 其实图片的文字识别其实还算简单,一般是根据特定字体制作出字码文件,然后分割 ...

最新文章

  1. NSWindow添加NSViewController
  2. 如何创建高性能、可扩展的Node.js应用?
  3. LAS点云查看 转换格式
  4. php通过条件来定义const,php用const出错是什么原因
  5. Django-组件拾遗
  6. sg nc的java下载,01_SG-NC-客户端安装说明及培训材料下载 3
  7. 算法导论第22章部分答案
  8. 七牛 html 上传,在七牛上传之后如何自己自定义上传完成处理并在页面显示。_html/css_WEB-ITnose...
  9. ISA——防火墙策略的执行过程
  10. SQL高级查询—实验报告
  11. 《社会动物——爱、性格和成就的潜在根源》读后感及摘录(2)
  12. Windows10系统变慢,用上这19招,电脑性能大幅度提升!
  13. 关于Java的抽象类与接口
  14. verilog对信号二分频 时钟分频信号作为时钟使能信号
  15. 1790D Matryoshkas
  16. Xen与XenServer的区别
  17. 局域网在线设备扫描工具 v1.0
  18. HM二次开发 - Data Names及其使用
  19. mysql优化总结(四)
  20. VSTO开发入门教程(bili网站搜罗VSTO免费视频资源)

热门文章

  1. 计算机音乐会议,全国声音与音乐技术会议6thConferenceonSoundandMusic.PDF
  2. 红外对管应用电路_红外对管的原理及应用
  3. 2019微博#让红包飞#圆满收官 4.6亿网友嗨抢锦鲤红包
  4. JVM之本地方法接口和本地方法栈
  5. .net framework 4.8是什么,用于哪些方面,作用在哪
  6. 有了电脑怎么搞?我有办法(第一部分)-涵子的个人想法
  7. 蔚来的“未来”有多远?
  8. luogu1889 士兵站队
  9. Allegro导入PADS文件
  10. java连接couchdb,Java CouchDB连接详细实现步骤