华为云语音交互服务SIS的智能化--SIS一句话语音识别
云服务、API、SDK,调试,查看,我都行
阅读短文您可以学习到:人工智能AI之SIS的实时、识别、分析、分类
1 Classroom和Toolkit的关系
1.1 Classroom的简介
classroom是基于华为云的云上软件教学服务,支持初级开发者和高校师生实现备课、上课、作业、考试、实验、实训等全教学流程的线上教学,提供多类习题自动判题、企业级DevOps实训、免费在线习题库等众多高级特性辅助进行数字化教学转型。
1.2 Toolkit插件之华为云API实战课程
2 IntelliJ IDEA 之API插件介绍
API插件支持 VS Code IDE、IntelliJ IDEA等平台、以及华为云自研 CodeArts IDE,基于华为云服务提供的能力,帮助开发者更高效、便捷的搭建应用。API插件关联华为云服务下的 API Explorer、DevStar、CodeLabs、SDK 中心和 CLI 中心产品,致力于为开发者提供更稳定、快速、安全的编程体验。
在本插件中,我们提供了但不局限于如下的功能:
对接华为云API开放平台,支持用户检索API、查看API文档、调试API、以及提供SDK示例代码供用户学习如何使用API。
提供华为云SDK代码片段补全功能,SDK依赖包自动引入,加速用户集成华为云API。
对接华为云开发体验馆Codelabs,提供500+云服务代码示例,向导式教程帮助用户快速学习。
说明:
在IntelliJ IDEA等系列平台和VS Code IDE,华为云API插件的名称是Huawei Cloud API。而在CodeArts IDE,API插件是IDE原生内置的,名称是华为云API开发套件。
API插件在IntelliJ IDEA等系列平台和VS Code IDE的使用依赖底座插件,请提前安装底座插件。
3 API插件安装--IntelliJ IDEA
3.1 IntelliJ IDEA等平台
安装准备:下载并安装JDK1.8或更高版本。下载并安装IntelliJ IDEA 2020.2或更高版本。
须知:IntellIj平台同时支撑包括Goland、Pycharm等在内的IDE,若在其它相关IDE上开发,请下载配置好对应语言的编译器或者解释器。这里以IDEA为例介绍IntelliJ平台插件的安装流程,其他IntelliJ系列的IDE请参考IDEA。
开始安装:
您可以在直接在IDE插件市场或者直接在JetBrains插件市场下载离线包安装。
IDE安装
- 在IntelliJ IDEA顶部菜单栏中选择File > Settings,在Settings对话框的左侧导航栏中单击Plugins。
- Plugins区域单击Marketplace,在搜索栏中输入Huawei Cloud API。
- Search Results区域会出现Huawei Cloud API,单击Install,完成后重启IDE。
离线包安装:
- 进入插件市场搜索Huawei Cloud API,进入插件详情页,在Versions页签下选择想要版本的API插件,点击Download下载离线的插件压缩包保存到本地。。
- 在IntelliJ IDEA顶部菜单栏中选择File > Settings,在Settings对话框的左侧导航栏中单击Plugins。
- 在Plugins区域单击 ,再单击Install Plugin from Disk...。
- 在Choose Plugin File对话框中选择离线安装包(不用解压),并按照IntelliJ IDEA安装页面的提示,完成后续安装步骤。
说明:若当前您想要安装插件的IntelliJ IDE已经在桌面打开,则进入插件市场搜索Huawei Cloud API,进入插件详情页,在右上角会识别到本地已经打开的IDE,点击相应按钮,在弹出的IDE窗口中点击ok,则IDE后台会开始安装相应版本的API插件。
安装验证:在IntelliJ系列平台上安装插件成功后在左侧的导航栏中可以看到Huawei Cloud Toolkit图标,点击后面板会出现Huawei Cloud API的字样,则说明安装成功。
3.2 API列表
左侧展示API列表,可以查询所有API,目前云服务206,APIs9213
4 实时语音识别
基于websocket接口对输入的音频流进行识别,实时返回识别结果。
前提条件
1、在保证华为云账号余额充足或已购买套餐包的情况下,语音交互服务无需申请即可使用。
https://support.huaweicloud.cn/sdkreference-sis/sis_05_0003.html
2、进行 AK/SK 认证,并妥善保管 AK/SK 信息。
https://support.huaweicloud.cn/sdkreference-sis/sis_05_0004.html#sis_05_0004__table47650414583
3、下载相应的 Python SDK。
https://support.huaweicloud.cn/sdkreference-sis/sis_05_0056.html
4、确保已按照 Python 环境配置细则配置完毕,注意Python SDK 仅支持Python3。
5、准备好待识别的音频文件。
示例代码
以下示例代码对应SDK中的\cn_demo\rasr_demo.py,可进入 SDK 直接运行。
# -*- coding: utf-8 -*-
from huaweicloud_sis.client.rasr_client import RasrClient
from huaweicloud_sis.bean.rasr_request import RasrRequest
from huaweicloud_sis.bean.callback import RasrCallBack
from huaweicloud_sis.bean.sis_config import SisConfig
import json
# 鉴权信息
ak = '' # 用户的ak
sk = '' # 用户的sk
region = 'cn-north-4' # region,如cn-north-4
project_id = '' # 同region一一对应,参考https://support.huaweicloud.cn/api-sis/sis_03_0008.html
"""
todo 请正确填写音频格式和模型属性字符串
- 音频格式一定要相匹配.
例如音频是pcm格式,并且采样率为8k,则格式填写pcm8k16bit。
如果返回audio_format is invalid 说明该文件格式不支持。具体支持哪些音频格式,需要参考一些api文档。
2.音频采样率要与属性字符串的采样率要匹配。
例如格式选择pcm16k16bit,属性字符串却选择chinese_8k_common, 则会返回'audio_format' is not match model
"""
# 实时语音识别参数
path = '' # 需要发送音频路径,如D:/test.pcm, 同时sdk也支持byte流发送数据。
audio_format = 'pcm16k16bit' # 音频支持格式,如pcm16k16bit,详见api文档
property = 'chinese_16k_general' # 属性字符串,language_sampleRate_domain, 如chinese_16k_general, 采样率要和音频一致。详见api文档
class MyCallback(RasrCallBack):
""" 回调类,用户需要在对应方法中实现自己的逻辑,其中on_response必须重写 """
def on_open(self):
""" websocket连接成功会回调此函数 """
print('websocket connect success')
def on_start(self, message):
"""
websocket 开始识别回调此函数
:param message: 传入信息
:return: -
"""
print('webscoket start to recognize, %s' % message)
def on_response(self, message):
"""
websockert返回响应结果会回调此函数
:param message: json格式
:return: -
"""
print(json.dumps(message, indent=2, ensure_ascii=False))
def on_end(self, message):
"""
websocket 结束识别回调此函数
:param message: 传入信息
:return: -
"""
print('websocket is ended, %s' % message)
def on_close(self):
""" websocket关闭会回调此函数 """
print('websocket is closed')
def on_error(self, error):
"""
websocket出错回调此函数
:param error: 错误信息
:return: -
"""
print('websocket meets error, the error is %s' % error)
def rasr_example():
""" 实时语音识别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('') # 设置热词表id,若不存在则不填写,否则会报错
request.set_need_word_info('no') # 设置是否需要word_info,yes or no, 默认no
# 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()
if __name__ == '__main__':
rasr_example()
5 语音合成
前提条件
1、在保证华为云账号余额充足或已购买套餐包的情况下,语音交互服务无需申请即可使用。
https://support.huaweicloud.cn/sdkreference-sis/sis_05_0003.html
2、进行 AK/SK 认证,并妥善保管 AK/SK 信息。
https://support.huaweicloud.cn/sdkreference-sis/sis_05_0004.html#sis_05_0004__table47650414583
3、下载相应的 Python SDK。
https://support.huaweicloud.cn/sdkreference-sis/sis_05_0056.html
4、确保已按照 Python 环境配置细则配置完毕,注意Python SDK 仅支持Python3。
示例代码
以下示例代码对应SDK中的\cn_demo\tts_demo.py,可进入 SDK 直接运行。
# -*- coding: utf-8 -*-
from huaweicloud_sis.client.tts_client import TtsCustomizationClient
from huaweicloud_sis.bean.tts_request import TtsCustomRequest
from huaweicloud_sis.bean.sis_config import SisConfig
from huaweicloud_sis.exception.exceptions import ClientException
from huaweicloud_sis.exception.exceptions import ServerException
import json
def ttsc_example():
""" 语音合成demo """
ak = '' # 参考https://support.huaweicloud.cn/sdkreference-sis/sis_05_0003.html
sk = '' # 参考https://support.huaweicloud.cn/sdkreference-sis/sis_05_0003.html
region = '' # region,如cn-north-4
project_id = '' # 同region一一对应,参考https://support.huaweicloud.cn/api-sis/sis_03_0008.html
text = '' # 待合成文本,不超过500字
path = '' # 保存路径,如D:/test.wav。 可在设置中选择不保存本地
# step1 初始化客户端
config = SisConfig()
config.set_connect_timeout(10) # 设置连接超时,单位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)
print(json.dumps(result, indent=2, ensure_ascii=False))
if __name__ == '__main__':
try:
ttsc_example()
except ClientException as e:
print(e)
except ServerException as e:
print(e)
6 录音文件识别
前提条件
1、在保证华为云账号余额充足或已购买套餐包的情况下,语音交互服务无需申请即可使用。
https://support.huaweicloud.cn/sdkreference-sis/sis_05_0003.html
2、进行 AK/SK 认证,并妥善保管 AK/SK 信息。
3、进入语音交互服务控制台服务授权页面,打开授权开关,允许录音文件识别服务使用您存储在对象存储服务上的数据。
https://console.huaweicloud.cn/sis/#/sis/auth
4、准备好待识别的录音文件,注意录音时长不超过5小时,文件大小不超过300M。
https://console.huaweicloud.cn/obs/#/obs/manager/buckets
5、进入对象存储服务控制台,创建桶,并将录音文件上传,记录文件的OBS链接如下图所示:
6、下载相应的 Python SDK 。
7、确保已按照 Python 环境配置细则配置完毕,注意Python SDK 仅支持Python3。
示例代码
以下示例代码对应SDK中的\cn_demo\lasr_demo.py,可进入 SDK 直接运行。
# -*- coding: utf-8 -*-
from huaweicloud_sis.client.asr_client import AsrCustomizationClient
from huaweicloud_sis.bean.asr_request import AsrCustomLongRequest
from huaweicloud_sis.exception.exceptions import ClientException
from huaweicloud_sis.exception.exceptions import ServerException
from huaweicloud_sis.bean.sis_config import SisConfig
import json
import time
# 鉴权参数
ak = '' # 参考https://support.huaweicloud.cn/sdkreference-sis/sis_05_0003.html
sk = '' # 参考https://support.huaweicloud.cn/sdkreference-sis/sis_05_0003.html
region = '' # region,如cn-north-4
project_id = '' # 同region一一对应,参考https://support.huaweicloud.cn/api-sis/sis_03_0008.html
"""
请正确填写音频格式和模型属性字符串
- 音频格式一定要相匹配.
例如wav音频,格式是auto。具体参考api文档。
例如音频是pcm格式,并且采样率为8k,则格式填写pcm8k16bit。
如果返回audio_format is invalid 说明该文件格式不支持。具体支持哪些音频格式,需要参考一些api文档。
2.音频采样率要与属性字符串的采样率要匹配。
例如格式选择pcm16k16bit,属性字符串却选择chinese_8k_common, 则会返回'audio_format' is not match model
例如wav本身是16k采样率,属性选择chinese_8k_common, 同样会返回'audio_format' is not match model
"""
# 录音文件识别参数,音频文件以obs连接方式传入(即先需要将音频传送到华为云的obs)
obs_url = '' # 音频obs连接
obs_audio_format = '' # 音频格式,如auto等,详见api文档
obs_property = '' # language_sampleRate_domain, 如chinese_8k_common,详见api文档
def lasr_example():
""" 录音文件识别示例 """
# step1 初始化客户端
config = SisConfig()
config.set_connect_timeout(10) # 设置连接超时
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 构造请求
asrc_request = AsrCustomLongRequest(obs_audio_format, obs_property, obs_url)
# 所有参数均可不设置,使用默认值
# 设置是否添加标点,yes or no,默认no
asrc_request.set_add_punc('yes')
# 设置是否将语音中数字转写为阿拉伯数字,yes or no,默认yes
asrc_request.set_digit_norm('yes')
# 设置 是否需要分析信息,True or False, 默认False。 只有need_analysis_info生效,diarization、channel、emotion、speed才会生效
# 目前仅支持8k模型,详见api文档
asrc_request.set_need_analysis_info(True)
# 设置是否需要话者分离,默认True,需要need_analysis_info设置为True才生效。
asrc_request.set_diarization(True)
# 设置声道信息, 一般都是单声道,默认为MONO,需要need_analysis_info设置为True才生效
asrc_request.set_channel('MONO')
# 设置是否返回感情信息, 默认True,需要need_analysis_info设置为True才生效。
asrc_request.set_emotion(True)
# 设置是否需要返回语速信息,默认True,需要need_analysis_info设置为True才生效。
asrc_request.set_speed(True)
# 设置回调地址,设置后音频转写结果将直接发送至回调地址。请务必保证地址可联通。
# asrc_request.set_callback_url('')
# 设置是否添加热词表id,没有则不填
# asrc_request.set_vocabulary_id(None)
# 设置是否需要word_info,yes or no, 默认no
asrc_request.set_need_word_info('no')
# step3 发送请求,获取job_id
job_id = asr_client.submit_job(asrc_request)
# step4 根据job_id轮询,获取结果。
status = 'WAITING'
count = 0 # 每2s查询一次,尝试2000次,即4000s。如果音频很长,可适当考虑加长一些。
while status != 'FINISHED' and count < 2000:
print(count, ' query')
result = asr_client.get_long_response(job_id)
status = result['status']
if status == 'ERROR':
print('录音文件识别执行失败, %s' % json.dump(result))
break
time.sleep(2)
count += 1
if status != 'FINISHED':
print('录音文件识别未在 %d 内获取结果,job_id 为%s' % (count, job_id))
# result为json格式
print(json.dumps(result, indent=2, ensure_ascii=False))
if __name__ == '__main__':
try:
lasr_example()
except ClientException as e:
print(e)
except ServerException as e:
print(e)
7 一句话识别
前提条件
1、在保证华为云账号余额充足或已购买套餐包的情况下,语音交互服务无需申请即可使用。
2、进行 AK/SK 认证,并妥善保管 AK/SK 信息。
3、下载相应的 Python SDK。
4、确保已按照 Python 环境配置细则配置完毕,注意Python SDK 仅支持Python3。
5、准备好待识别的音频文件。
示例代码
以下示例代码对应SDK中的\cn_demo\sasr_demo.py,可进入 SDK 直接运行。
# -*- coding: utf-8 -*-
from huaweicloud_sis.client.asr_client import AsrCustomizationClient
from huaweicloud_sis.bean.asr_request import AsrCustomShortRequest
from huaweicloud_sis.exception.exceptions import ClientException
from huaweicloud_sis.exception.exceptions import ServerException
from huaweicloud_sis.utils import io_utils
from huaweicloud_sis.bean.sis_config import SisConfig
import json
# 鉴权参数
ak = '' # 参考https://support.huaweicloud.cn/sdkreference-sis/sis_05_0003.html
sk = '' # 参考https://support.huaweicloud.cn/sdkreference-sis/sis_05_0003.html
region = '' # region,如cn-north-4
project_id = '' # 同region一一对应,参考https://support.huaweicloud.cn/api-sis/sis_03_0008.html
"""
请正确填写音频格式和模型属性字符串
- 音频格式一定要相匹配.
例如wav音频,格式是wav。具体参考api文档。
例如音频是pcm格式,并且采样率为8k,则格式填写pcm8k16bit。
如果返回audio_format is invalid 说明该文件格式不支持。具体支持哪些音频格式,需要参考一些api文档。
2.音频采样率要与属性字符串的采样率要匹配。
例如格式选择pcm16k16bit,属性字符串却选择chinese_8k_common, 则会返回'audio_format' is not match model
例如wav本身是16k采样率,属性选择chinese_8k_common, 同样会返回'audio_format' is not match model
"""
# 一句话识别参数,以音频文件的base64编码传入,1min以内音频
path = '' # 文件位置, 需要具体到文件,如D:/test.wav
path_audio_format = '' # 音频格式,如wav等,详见api文档
path_property = '' # language_sampleRate_domain, 如chinese_8k_common,详见api文档
def sasr_example():
""" 一句话识别示例 """
# step1 初始化客户端
config = SisConfig()
config.set_connect_timeout(10) # 设置连接超时
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')
# 设置是否将语音中数字转写为阿拉伯数字,yes or no,默认yes
asr_request.set_digit_norm('yes')
# 设置是否添加热词表id,没有则不填
# asr_request.set_vocabulary_id(None)
# 设置是否需要word_info,yes or no, 默认no
asr_request.set_need_word_info('no')
# step3 发送请求,返回结果,返回结果为json格式
result = asr_client.get_short_response(asr_request)
print(json.dumps(result, indent=2, ensure_ascii=False))
if __name__ == '__main__':
try:
sasr_example()
except ClientException as e:
print(e)
except ServerException as e:
print(e)
8 呈现效果
9 体验插件课程
https://classroom.devcloud.huaweicloud.cn/MOOCCourseStudy/join/ef4ebc3dbaa246ff995f75022cac8cb9
识别下方二维码立即体验
- 点赞
- 收藏
- 关注作者
评论(0)