• 腾讯AI开放平台的使用


    一、腾讯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 = '12345'   # 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 = '12345'  # 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='我爱你,中国!')
  • 相关阅读:
    php包含(include/require)文件时的作用域
    Android使用DrawerLayout仿qq6.6版本侧滑效果
    Android几种强大的下拉刷新库
    Android 捕捉app系统中未处理的异常
    Android中内存泄露与如何有效避免OOM总结
    Android进程间的通信之Messenger
    Android中Parcelable接口用法
    《完美解决系列》Android5.0以上 Implicit intents with startService are not safe
    Android高效加载大图、多图解决方案,有效避免程序OOM
    使用真机导致Androidstudio打印不出log
  • 原文地址:https://www.cnblogs.com/Coufusion/p/10069385.html
Copyright © 2020-2023  润新知