Пример #1
0
def aksk_connect(ak, sk, url, params, http_method, config=None):
    """
        根据url,返回json
    :param ak:  ak
    :param sk:  sk
    :param url: 完整请求url
    :param params:  请求参数, dict
    :param http_method: 请求方法,'POST' or 'GET', 其他会报错
    :param config: SisConfig(), 配置超时和代理
    :return: http返回结果转化为json
    """
    sis_config = config
    if sis_config is None:
        sis_config = SisConfig()
    if not isinstance(sis_config, SisConfig):
        error_msg = 'the param \'config\' in aksk_connect must be SisConfig class'
        logger.error(error_msg)
        raise ClientException(error_msg)
    signed_headers = _get_signed_headers(ak, sk, url, params, http_method)
    time_out = (sis_config.get_connect_timeout(),
                sis_config.get_read_timeout())
    resp = http_utils.http_connect(url, signed_headers, params, http_method,
                                   time_out, sis_config.get_proxy())
    json_result = http_utils.parse_resp(resp)
    if resp is not None:
        resp.close()
    return json_result
Пример #2
0
 def __init__(self,
              ak,
              sk,
              region,
              project_id,
              service_endpoint=None,
              sis_config=None):
     """
         定制语音识别client初始化
     :param ak:                  ak
     :param sk:                  sk
     :param region:              区域,如cn-north-4
     :param project_id:          项目id,可参考https://support.huaweicloud.com/api-sis/sis_03_0008.html
     :param service_endpoint:    终端节点,可不填使用默认即可
     :param sis_config:          配置信息,包括超时、代理等,可不填使用默认即可。
     """
     self._ak = ak
     self._sk = sk
     self._region = region
     self._project_id = project_id
     if service_endpoint is None:
         self._service_endpoint = 'https://sis-ext.' + region + '.myhuaweicloud.com'
     else:
         self._service_endpoint = service_endpoint
     if sis_config is None:
         self._sis_config = SisConfig()
     else:
         self._sis_config = sis_config
Пример #3
0
def get_token(user_name,
              password,
              domain_name,
              region,
              url=None,
              config=SisConfig()):
    """
        获取token
    :param user_name:   用户名
    :param password:    密码
    :param domain_name: 账户名,一般等同用户名
    :param region:      区域,如cn-north-4
    :param url:         请求token的url,可使用默认值
    :param config       配置信息
    :return:            请求的token
    """
    if url is None:
        url = 'https://iam.' + region + '.myhuaweicloud.com/v3/auth/tokens'
    if not isinstance(config, SisConfig):
        error_msg = 'the param \'config\' in token_service must be SisConfig class'
        logger.error(error_msg)
        raise ClientException(error_msg)
    time_out = (config.get_connect_timeout(), config.get_read_timeout())
    proxy = config.get_proxy()
    auth_data = {
        "auth": {
            "identity": {
                "password": {
                    "user": {
                        "name": user_name,
                        "password": password,
                        "domain": {
                            "name": domain_name
                        }
                    }
                },
                "methods": ["password"]
            },
            "scope": {
                "project": {
                    "name": region
                }
            }
        }
    }

    headers = {'Content-Type': 'application/json'}
    req = http_utils.http_connect(url, headers, auth_data, 'POST', time_out,
                                  proxy)
    if 'X-Subject-Token' not in req.headers:
        logger.error('Error occurs in getting token, %s' % req.text)
        raise ClientException('Error occurs in getting token, %s' % req.text)
    token = req.headers['X-Subject-Token']
    return token
Пример #4
0
def rasr_detect(path):
    """ 实时语音转写demo """
    # step1 初始化RasrClient, 暂不支持使用代理
    my_callback = MyCallback()
    config = SisConfig()
    # 设置连接超时,默认是10
    config.set_connect_timeout(10)
    # 设置读取超时, 默认是10
    config.set_read_timeout(10)
    # 设置connect lost超时,一般在普通并发下,不需要设置此值。默认是4
    config.set_connect_lost_timeout(4)
    # websocket暂时不支持使用代理
    rasr_client = RasrClient(ak=ak,
                             sk=sk,
                             use_aksk=True,
                             region=region,
                             project_id=project_id,
                             callback=my_callback,
                             config=config)

    # step2 构造请求
    request = RasrRequest(audio_format, property)
    # 所有参数均可不设置,使用默认值
    request.set_add_punc('yes')  # 设置是否添加标点, yes or no, 默认no
    request.set_vad_head(10000)  # 设置有效头部, [0, 60000], 默认10000
    request.set_vad_tail(500)  # 设置有效尾部,[0, 3000], 默认500
    request.set_max_seconds(30)  # 设置一句话最大长度,[0, 60], 默认30
    request.set_interim_results('no')  # 设置是否返回中间结果,yes or no,默认no
    request.set_digit_norm('no')  # 设置是否将语音中数字转写为阿拉伯数字,yes or no,默认yes
    request.set_vocabulary_id(
        '039061ac-d8f7-44e1-b2f5-6cb1c4b82c6a')  # 设置热词表id,若不存在则不填写,否则会报错

    # step3 选择连接模式
    rasr_client.short_stream_connect(request)  # 流式一句话模式
    # rasr_client.sentence_stream_connect(request)    # 实时语音转写单句模式
    # rasr_client.continue_stream_connect(request)  # 实时语音转写连续模式

    # step4 发送音频
    rasr_client.send_start()
    # 连续模式下,可多次发送音频,发送格式为byte数组
    with open(path, 'rb') as f:
        data = f.read()
        rasr_client.send_audio(data)  # 可选byte_len和sleep_time参数,建议使用默认值
    rasr_client.send_end()

    # step5 关闭客户端,使用完毕后一定要关闭,否则服务端20s内没收到数据会报错并主动断开。
    rasr_client.close()

    response_text = re.findall(r'"text": "(.*?)。', str(my_callback.response))
    print(response_text)
    return response_text
Пример #5
0
def asrc_short_example():
    ak = sys_ak  # 参考https://support.huaweicloud.com/sdkreference-sis/sis_05_0003.html
    sk = sys_sk  # 参考https://support.huaweicloud.com/sdkreference-sis/sis_05_0003.html
    region = sys_region  # region,如cn-north-4
    project_id = sys_project_id  # 同region一一对应,参考https://support.huaweicloud.com/api-sis/sis_03_0008.html
    path = input_path  # 文件位置, 需要具体到文件,如D:/test.wav
    # 音频格式,默认不改动
    path_audio_format = 'wav'  # 音频格式,如wav等,详见api文档
    path_property = 'chinese_16k_common'  # language_sampleRate_domain, 如chinese_8k_common,详见api文档

    # step1 初始化客户端
    config = SisConfig()
    config.set_connect_timeout(5)  # 设置连接超时
    config.set_read_timeout(10)  # 设置读取超时
    # 设置代理,使用代理前一定要确保代理可用。 代理格式可为[host, port] 或 [host, port, username, password]
    # config.set_proxy(proxy)
    asr_client = AsrCustomizationClient(ak, sk, region, project_id, sis_config=config)

    # step2 构造请求
    data = io_utils.encode_file(path)
    asr_request = AsrCustomShortRequest(path_audio_format, path_property, data)
    # 所有参数均可不设置,使用默认值
    # 设置是否添加标点,yes or no,默认no
    asr_request.set_add_punc('yes')
    # 设置是否添加热词表id,没有则不填
    # asr_request.set_vocabulary_id(None)

    # step3 发送请求,返回结果,返回结果为json格式
    result = asr_client.get_short_response(asr_request)
    # print(json.dumps(result))
    return(json.dumps(result, indent=2, ensure_ascii=False))
Пример #6
0
 def __init__(self, ak, sk, region, project_id, service_endpoint=None, sis_config=None):
     self._ak = ak
     self._sk = sk
     self._region = region
     self._project_id = project_id
     if service_endpoint is None:
         self._service_endpoint = 'https://sis-ext.' + region + '.myhuaweicloud.com'
     else:
         self._service_endpoint = service_endpoint
     if sis_config is None:
         self._sis_config = SisConfig()
     else:
         self._sis_config = sis_config
Пример #7
0
def hot_word_example(name):
    """
        1. 热词使用包含创建、更新、查询、删除等,一个用户可以创建多个热词表,一个热词表可以包含多个热词。一个vocabulary_id对应一个热词表。
        2. 目前支持一个用户最多创建10个热词表,一个热词表最多包含1024个热词。
        3. 热词可在一句话识别、录音文件识别、实时语音转写使用。例如将地名和人名作为热词,则语音可以准确识别出人名和地名。
    :return: 无
    """
    # 初始化客户端
    config = SisConfig()
    config.set_connect_timeout(10)  # 设置连接超时
    config.set_read_timeout(10)  # 设置读取超时
    # 设置代理,使用代理前一定要确保代理可用。 代理格式可为[host, port] 或 [host, port, username, password]
    # config.set_proxy(proxy)
    hot_word_client = HotWordClient(ak,
                                    sk,
                                    region,
                                    project_id,
                                    sis_config=config)

    # option 1 创建热词表
    word_list.append('test')
    create_request = HotWordRequest(name, word_list)
    # 可选,热词语言,目前仅支持中文 chinese_mandarin。
    create_request.set_language('chinese_mandarin')
    # 可选,热词表描述信息
    create_request.set_description('test')
    create_result = hot_word_client.create(create_request)
    # 返回结果为json格式
    print('成功创建热词表')
    print(json.dumps(create_result, indent=2, ensure_ascii=False))
    """
    # option 2 根据热词表id 更新热词表。新的热词表会替换旧的热词表。使用前需确保热词表id已存在。
    word_list.append('进入系统')
    update_request = HotWordRequest('test2', word_list)
    update_result = hot_word_client.update(update_request, vocabulary_id)
    # 返回结果为json格式
    print('成功更新热词表', vocabulary_id)
    print(json.dumps(update_result, indent=2, ensure_ascii=False))
    """
    # option 3 查看热词表列表
    query_list_result = hot_word_client.query_list()
    print(json.dumps(query_list_result, indent=2, ensure_ascii=False))

    # option 4 根据热词表id查询具体热词表信息,使用前需确保热词表id已存在。
    query_result = hot_word_client.query_by_vocabulary_id(vocabulary_id)
    print(json.dumps(query_result, indent=2, ensure_ascii=False))

    # option 5 根据热词表id删除热词表,使用前需确保热词表id已存在。
    delete_result = hot_word_client.delete(vocabulary_id)
    if delete_result is None:
        print('成功删除热词表', vocabulary_id)
    else:
        print(json.dumps(delete_result, indent=2, ensure_ascii=False))
Пример #8
0
 def __init__(self, ak, sk, region, service_endpoint=None, sis_config=None):
     """
         语音合成client初始化
     :param ak:                  ak
     :param sk:                  sk
     :param region:              区域,如cn-north-1
     :param service_endpoint:    终端节点,可不填使用默认即可
     :param sis_config:          配置信息,包含超时代理等,一般使用默认即可。
     """
     self._ak = ak
     self._sk = sk
     self._region = region
     if service_endpoint is None:
         self._service_endpoint = 'https://sis.' + region + '.myhuaweicloud.com'
     else:
         self._service_endpoint = service_endpoint
     if sis_config is None:
         self._sis_config = SisConfig()
     else:
         self._sis_config = sis_config
Пример #9
0
 def __init__(self, ak, sk, region, service_endpoint=None, sis_config=None):
     """
         短语音识别client初始化
     :param ak:                  用户的ak
     :param sk:                  用户的sk
     :param region:              区域,如cn-north-1
     :param service_endpoint:    终端节点,一般使用默认即可,不需要填写此值。
     :param sis_config:          配置,包括超时和代理等设置,可不填使用默认即可。
     """
     self._ak = ak
     self._sk = sk
     self._region = region
     if service_endpoint is None:
         self._service_endpoint = 'https://sis.' + region + '.myhuaweicloud.com'
     else:
         self._service_endpoint = service_endpoint
     if sis_config is None:
         self._sis_config = SisConfig()
     else:
         self._sis_config = sis_config
Пример #10
0
def tts_example(text):
    """ 语音合成demo """
    ak = 'GVOC7YSBOBAO3VZ38TPW'
    sk = 'EpbGXUHTHoffHjj07W8UNWsGhxNEnEPESp7Gr6Qj'
    region = 'cn-north-1'  # region,如cn-north-1
    # text = '欢迎在win10系统中,默认使用的是微软输入法。最近有用户反应称使用微软输入法打出来的字都是繁体的,该怎么办?出现这样的情况是因为微软输入法本身支持简体和繁体输入,并且可以通过快捷键切换,我们只需按下面步骤进行设置即可还原成简单!'
    path = 'huawei.wav'  # 保存路径,需要具体到音频文件,如D:/test.wav,可在设置中选择不保存本地

    # step1 初始化客户端
    config = SisConfig()
    config.set_connect_timeout(10)  # 设置连接超时
    config.set_read_timeout(10)  # 设置读取超时
    # 设置代理,使用代理前一定要确保代理可用。 代理格式可为[host, port] 或 [host, port, username, password]
    # config.set_proxy(proxy)
    tts_client = TtsClient(ak, sk, region, sis_config=config)

    # step2 构造请求
    tts_request = TtsRequest(text)
    # 设置请求,所有参数均可不设置,使用默认参数
    # 设置发声人,默认xiaoyan,xiaoqi 正式女生xiaoyu正式男生xiaoyan情感女生xiaowang童声
    tts_request.set_voice_name('xiaoyan')
    # 设置采样率,默认8k
    tts_request.set_sample_rate('8k')
    # 设置音量,[-20, 20],默认0
    tts_request.set_volume(0)
    # 设置音高, [-500, 500], 默认0
    tts_request.set_pitch_rate(2)
    # 设置音速, [-500, 500], 默认0
    tts_request.set_speech_speed(-10)
    # 设置是否保存,默认False
    tts_request.set_saved(True)
    # 设置保存路径,只有设置保存,此参数才生效
    tts_request.set_saved_path(path)

    # # step3 发送请求,返回结果,格式为json. 如果设置保存,可在指定路径里查看保存的音频
    try:
        result = tts_client.get_tts_response(tts_request)
    except ClientException as e:
        print(e)
    except ServerException as e:
        print(e)
    # print(json.dumps(result, indent=2, ensure_ascii=False))
    print("已合成" + path)
Пример #11
0
def tts_example(text):
    """ 华为云sis语音合成 """
    # ak = 'GVOC7YSBOBAO3VZ38TPW'
    # sk = 'EpbGXUHTHoffHjj07W8UNWsGhxNEnEPESp7Gr6Qj'
    region = 'cn-north-1'
    path = RESULT_FILE

    # step1 初始化客户端
    config = SisConfig()
    config.set_connect_timeout(10)       # 设置连接超时
    config.set_read_timeout(10)         # 设置读取超时
    # 设置代理,使用代理前一定要确保代理可用。 代理格式可为[host, port] 或 [host, port, username, password]
    # config.set_proxy(proxy)
    tts_client = TtsClient(ak, sk, region, sis_config=config)

    # step2 构造请求
    tts_request = TtsRequest(text)
    # 设置请求,所有参数均可不设置,使用默认参数
    # 设置发声人,默认xiaoyan,xiaoqi 正式女生xiaoyu正式男生xiaoyan情感女生xiaowang童声
    tts_request.set_voice_name('xiaoyan')
    # 设置采样率,默认8k
    tts_request.set_sample_rate('8k')
    # 设置音量,[-20, 20],默认0
    tts_request.set_volume(0)
    # 设置音高, [-500, 500], 默认0
    tts_request.set_pitch_rate(2)
    # 设置音速, [-500, 500], 默认0
    tts_request.set_speech_speed(-10)
    # 设置是否保存,默认False
    tts_request.set_saved(True)

    # 设置保存路径,只有设置保存,此参数才生效
    tts_request.set_saved_path(path)
    # print("已合成"+path)

    # # step3 发送请求,返回结果,格式为json. 如果设置保存,可在指定路径里查看保存的音频
    try:
        result = tts_client.get_tts_response(tts_request)
    except ClientException as e:
        print(e)
    except ServerException as e:
        print(e)
Пример #12
0
def text2speech(text, out_file):
    """ 语音合成 """
    ak = 'GVOC7YSBOBAO3VZ38TPW'
    sk = 'EpbGXUHTHoffHjj07W8UNWsGhxNEnEPESp7Gr6Qj'
    region = 'cn-north-1'  # region,如cn-north-1
    path = out_file  # 保存路径,需要具体到音频文件,如D:/test.wav,可在设置中选择不保存本地
    # print("合成 "+text)
    # step1 初始化客户端
    config = SisConfig()
    config.set_connect_timeout(10)  # 设置连接超时
    config.set_read_timeout(10)  # 设置读取超时
    # 设置代理,使用代理前一定要确保代理可用。 代理格式可为[host, port] 或 [host, port, username, password]
    # config.set_proxy(proxy)
    tts_client = TtsClient(ak, sk, region, sis_config=config)

    # step2 构造请求
    tts_request = TtsRequest(text)
    # 设置请求,所有参数均可不设置,使用默认参数
    # 设置发声人,默认xiaoyan,xiaoqi 正式女生xiaoyu正式男生xiaoyan情感女生xiaowang童声
    tts_request.set_voice_name('xiaoyu')
    # 设置采样率,默认8k
    tts_request.set_sample_rate('8k')
    # 设置音量,[-20, 20],默认0
    tts_request.set_volume(17)
    # 设置音高, [-500, 500], 默认0
    tts_request.set_pitch_rate(4)
    # 设置音速, [-500, 500], 默认0
    tts_request.set_speech_speed(0)
    # 设置是否保存,默认False
    tts_request.set_saved(True)
    # 设置保存路径,只有设置保存,此参数才生效
    tts_request.set_saved_path(path)

    # # step3 发送请求,返回结果,格式为json. 如果设置保存,可在指定路径里查看保存的音频
    try:
        result = tts_client.get_tts_response(tts_request)
    except ClientException as e:
        print(e)
    except ServerException as e:
        print(e)
    # print(json.dumps(result, indent=2, ensure_ascii=False))
    print("已合成语音片段 " + text)
Пример #13
0
def ttsc_example():
    """ 定制语音合成demo """
    ak = sys_ak             # 参考https://support.huaweicloud.com/sdkreference-sis/sis_05_0003.html
    sk = sys_sk            # 参考https://support.huaweicloud.com/sdkreference-sis/sis_05_0003.html
    region = sys_region         # region,如cn-north-4
    project_id = sys_project_id     # 同region一一对应,参考https://support.huaweicloud.com/api-sis/sis_03_0008.html
    text = output_text           # 待合成文本,不超过500字
    path = output_path          # 保存路径,如D:/test.wav。 可在设置中选择不保存本地

    # step1 初始化客户端
    config = SisConfig()
    config.set_connect_timeout(5)       # 设置连接超时,单位s
    config.set_read_timeout(10)         # 设置读取超时,单位s
    # 设置代理,使用代理前一定要确保代理可用。 代理格式可为[host, port] 或 [host, port, username, password]
    # config.set_proxy(proxy)
    ttsc_client = TtsCustomizationClient(ak, sk, region, project_id, sis_config=config)

    # step2 构造请求
    ttsc_request = TtsCustomRequest(text)
    # 设置请求,所有参数均可不设置,使用默认参数
    # 设置属性字符串, language_speaker_domain, 默认chinese_xiaoyan_common, 参考api文档
    ttsc_request.set_property('chinese_xiaoyan_common')
    # 设置音频格式,默认wav,可选mp3和pcm
    ttsc_request.set_audio_format('wav')
    # 设置采样率,8000 or 16000, 默认8000
    ttsc_request.set_sample_rate('8000')
    # 设置音量,[0, 100],默认50
    ttsc_request.set_volume(50)
    # 设置音高, [-500, 500], 默认0
    ttsc_request.set_pitch(0)
    # 设置音速, [-500, 500], 默认0
    ttsc_request.set_speed(0)
    # 设置是否保存,默认False
    ttsc_request.set_saved(True)
    # 设置保存路径,只有设置保存,此参数才生效
    ttsc_request.set_saved_path(path)

    # step3 发送请求,返回结果。如果设置保存,可在指定路径里查看保存的音频。
    result = ttsc_client.get_ttsc_response(ttsc_request)
Пример #14
0
    def __init__(self,
                 user_name,
                 password,
                 domain_name,
                 region,
                 project_id,
                 callback,
                 config=SisConfig(),
                 service_endpoint=None,
                 token_url=None,
                 retry_sleep_time=1):
        """
            实时语音转写client初始化
        :param user_name:           用户名
        :param password:            密码
        :param domain_name:         账户名,一般等同用户名
        :param region:              区域,如cn-north-4
        :param project_id:          项目ID,可参考https://support.huaweicloud.com/api-sis/sis_03_0008.html
        :param callback:            回调类RasrCallBack,用于监听websocket连接、响应、断开、错误等
        :param service_endpoint:    终端节点,一般使用默认即可
        :param token_url:           请求token的url,一般使用默认即可
        :param retry_sleep_time:          当websocket连接失败重试的间隔时间,默认为5s
        """
        if service_endpoint is None:
            self._service_endpoint = 'wss://sis-ext.' + region + '.myhuaweicloud.com'
        else:
            self._service_endpoint = service_endpoint
        if token_url is None:
            self._token_url = 'https://iam.' + region + '.myhuaweicloud.com/v3/auth/tokens'
        else:
            self._token_url = token_url
        if not isinstance(callback, RasrCallBack):
            logger.error('The parameter callback must be RasrCallBack class')
            raise ClientException(
                'The parameter callback must be RasrCallBack class')
        if not isinstance(config, SisConfig):
            logger.error('The parameter config must by SisConfig class')
            raise ClientException(
                'The parameter config must by SisConfig class')
        self._project_id = project_id
        self._config = config

        # token 缓存必须在client进行,才可以在多线程中生效。
        now_time = time.time()
        self._token = None
        if user_name in user_dict and user_name in time_dict:
            token = user_dict[user_name]
            save_time = time_dict[user_name]
            if now_time - save_time < 5 * 3600:
                logger.info('use token cache')
                self._token = token
        if self._token is None:
            self._token = token_service.get_token(user_name,
                                                  password,
                                                  domain_name,
                                                  region,
                                                  url=self._token_url,
                                                  config=self._config)
            user_dict[user_name] = self._token
            time_dict[user_name] = now_time

        self._callback = callback
        self._status = 'pre_start'
        self._request = None
        self._retry_sleep_time = retry_sleep_time