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
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
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
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
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))
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
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))
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
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
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)
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)
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)
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)
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