接口说明

最近更新时间:2020-11-16 16:23:12

接口描述

本接口服务对实时音频流进行识别,同步返回识别结果,达到“边说边输出文字”的效果。

  • 支持中文普通话、英语、粤语、韩语、日语和上海话方言的识别
  • 支持金融领域模型
  • 支持 VAD(语音活动检测)功能
  • 支持识别结果同步返回或尾包返回

接口说明请观看视频:

接口要求

使用实时语音识别 SDK 时,需按照以下要求。

内容 说明
支持语言 中文普通话、英语、粤语、韩语、日语、上海话方言
支持行业 通用、金融
音频属性 采样率:16000Hz或8000Hz、采样精度:16bits、声道:单声道,查看音频属性请参见 常见问题
音频格式 wav、pcm、opus、speex、silk、mp3
数据长度 音频流中每个数据包的音频分片建议为200ms,8k采样率对应的音频分片大小为3200字节,16k采样率对应的音频分片大小为6400字节
请求地址 http://asr.cloud.tencent.com/asr/v1/<appid>?{请求参数}
免费额度 每月5小时
请求频率限制 50次/秒

使用步骤

  1. 首先获取您的 AppID、SecretID 和 SecretKey。在使用该接口前,需要在 语音识别控制台 开通服务,并进入 API 密钥管理页面 新建密钥,生成 AppID、SecretID 和 SecretKey ,用于 SDK 调用时生成签名,签名将用来进行接口鉴权。
  2. 查看您的音频属性和格式,应满足接口支持的属性和格式,否则会请求失败。
  3. 通过 SDK 提交实时语音识别的请求。
  4. 如果返回的 code = 0,表示请求成功,实时语音识别系统会将识别结果实时返回给客户端;如果返回的 code 不为0,请参见 错误码 详情。
  5. 如果识别效果有问题,请参考 识别效果问题排查文档 进行排查。

实时语音识别请求

请求参数

请求参数主要由请求 URL请求头部组成。

请求 URL 示例

http://asr.cloud.tencent.com/asr/v1/<125000001>?
projectid=0&
secretid=<secretid>&
sub_service_type=1&
engine_model_type=16k_0&
result_text_format=0&
res_type=1&
voice_format=1&
needvad=1&
seq=0&
end=0&
source=0&
voice_id=text&
timestamp=1473752207&
expired=1473752300&
timeout=20&
nonce=0&

请求 URL 参数说明

参数名称 必选 类型 描述
AppId Int 用户在腾讯云注册账号的 AppId,可以进入 API 密钥管理页面 获取。
projectid Int 腾讯云项目 ID,语音识别目前不区分项目,填 0 即可。
secretid String 用户在腾讯云注册账号 AppId 对应的 SecretId,可以进入 API 密钥管理页面 获取。
sub_service_type Int 子服务类型。1:实时流式识别。
engine_model_type String 引擎模型类型。
电话场景:
• 8k_en:电话 8k 英语;
• 8k_zh:电话 8k 中文普通话通用;
• 8k_zh_finance:电话 8k 金融领域模型;
非电话场景:
• 16k_zh:16k 中文普通话通用;
• 16k_en:16k 英语;
• 16k_ca:16k 粤语;
• 16k_ko:16k 韩语;
• 16k_ja:16k 日语;
• 16k_wuu-SH:16k上海话方言;
• 16k_zh-TW:16k 中文普通话繁体。
hotword_id String 热词 id。用于调用对应的热词表,如果在调用语音识别服务时,不进行单独的热词 id 设置,自动生效默认热词;如果进行了单独的热词 id 设置,那么将生效单独设置的热词 id。
result_text_format Int 识别结果文本编码方式。0:UTF-8。
res_type Int 结果返回方式。 0:同步返回;1:尾包返回。
voice_format Int 语音编码方式,可选,默认值为 4。1:wav(pcm);4:speex(sp);6:silk;8:mp3;10:opus。
needvad Int 0:关闭 vad,1:开启 vad。
如果音频流总时长超过60秒,用户需开启 vad。
vad_silence_time Int 语音断句检测阈值,静音时长超过该阈值会被认为断句(多用在智能客服场景,需配合 needvad = 1 使用),取值范围:16k引擎为390-2000、8k引擎为360-2000,单位 ms,目前仅支持 8k_zh、8k_zh_finance、16k_zh 引擎模型。
seq Int 语音分片的序号,序号从 0 开始,每次请求递增1, 两个seq之间间隔不能超过6秒。
end Int 是否为最后一片,最后一片语音片为 1,其余为 0。
source Int 设置为 0 即可。
voice_id String 16 位 String 串作为每个音频的唯一标识,用户自己生成。
timestamp Int 当前 UNIX 时间戳,可记录发起 API 请求的时间。如果与当前时间相差过大,会引起签名过期错误。可以取值为当前请求的系统时间戳即可。
expired Int 签名的有效期,是一个符合 UNIX Epoch 时间戳规范的数值,单位为秒;Expired 必须大于 Timestamp 且 Expired - Timestamp 小于90天。
nonce Int 随机正整数。用户需自行生成,最长10位。
filter_dirty Integer 是否过滤脏词(目前支持中文普通话引擎)。默认为0。0:不过滤脏词;1:过滤脏词;2:将脏词替换为 * 。
filter_modal Integer 是否过语气词(目前支持中文普通话引擎)。默认为0。0:不过滤语气词;1:部分过滤;2:严格过滤 。
filter_punc Integer 是否过滤标点符号(目前支持中文普通话引擎)。0:不过滤,1:过滤句末标点,2:过滤所有标点。默认为0。
convert_num_mode Int 是否进行阿拉伯数字智能转换。0:全部转为中文数字;1:根据场景智能转换为阿拉伯数字。

请求头部示例

{
"Content-Type":"application/octet-stream",
"Authorization":"UyKZ+Q4xMbdu3gxOmPD7tgnAm1A="
}

请求头部参数说明

参数名称 必选 类型 描述
Host String 语音识别服务域名,固定为 asr.cloud.tencent.com
Authorization String 用户的有效签名,用于鉴权
Content-Type String application/octet-stream
Content-Length Int 请求长度,此处对应语音数据字节数,单位:字节

实时语音识别结果返回

同步返回示例
第一个分片:

{"code":0,"message":"success","voice_id":"8qiS3yeVnwHHbQ9F","seq":0,"text":"","result_number":1,"result_list":[{"slice_type":0,"index":1,"start_time":0,"end_time":256,"voice_text_str":""}],"final":0}

中间某个分片:

{"code":0,"message":"success","voice_id":"8qiS3yeVnwHHbQ9F","seq":2,"text":"吃饭了。","result_number":1,"result_list":[{"slice_type":0,"index":1,"start_time":512,"end_time":768,"voice_text_str":"吃饭了。"}],"final":0}

最后一个分片:

{"code":0,"message":"success","voice_id":"K3lRwC6tWkKjvnCL","seq":6,"text":"吃饭了吗。","result_number":1,"result_list":[{"slice_type":0,"index":1,"start_time":3072,"end_time":3093,"voice_text_str":"吃饭了吗。"}],"final":1}

返回参数说明

参数名称 描述
code 0:正常;不为0:发生错误
message 0:success;不为0:其他
voice_id 表示这通音频的标记,同一个音频流标记一样
seq 语音分片的信号
如果请求参数 needvad 为0的话,表示不需要后台做 vad,这里的 seq 就是发送过来的 seq 的序号。
如果请求参数 needvad 为1的话,表示需要后台做 vad,vad 会重新分片,送入识别的 seq 会和发送过来的 seq 不一样。
text 语音分片的识别结果
如果请求参数 needvad 为0的话,表示不需要后台做 vad, text 为完整识别结果。
如果请求参数 needvad 为1的话,表示需要后台做 vad,text 为空,需要从 result_list 字段中获取分片识别结果。
result_number 表示后面的 result_list 里面有几段结果,如果是0表示没有结果,遇到中间是静音。
如果是1表示 result_list 有一个结果, 在发给服务器分片很大的情况下可能会出现多个结果,正常情况下都是1个结果。
result_list slice_type:返回分片类型标记, 0表示一小段话开始,1表示在小段话的进行中,2表示小段话的结束
index:表示第几段话
start_time:这个分片在整个音频流中的开始时间
end_time:这个分片在整个音频流中的结束时间
voice_text_str:识别结果
final 0:表示还在整个音频流的中间部分
1:表示是整个音频流的最后一个包。
应用主要是在电信场景中,客户端发送完了之后,要知道是否返回的是最后一个包。
word_size 表示后面的 word_list 的长度,即有多少个词。
word_list 词时间戳列表:
word 表示这个词的内容,
start_time 表示该词在整个音频中的起始时间,
end_time 表示该词在整个音频中的结束时间,
stable_flag 表示词的稳态结果,0:该词在后续识别中可能发生变化,1:表示该词在后续识别过程中不会变化。

错误码

数值 说明
100 获取语音分片信息失败
101 语音分片过大
102 参数不合法,具体详情参考 message
103 访问数据库失败
104 AppID 未注册
105 模板不存在
106 模板停用
107 鉴权失败
108 拼接签名串失败
109 l5获取 IP、port 失败
110 后台识别服务器故障,请从 seq = 0重传
111 后台识别模块回包格式错误
112 语音分片为空
113 后台服务器识别超时
114 引擎编号不合法
115 时长计算时音频类型不合法
116 无可使用的免费额度
117 禁止访问
118 请求限流
119 账户欠费停止服务,请及时充值
120 获取 rpcClient 错误
121 后台识别服务器错误,请从seq = 0重传
122 后台识别服务器收到的包格式错误
123 后台识别服务器音频解压失败,请从seq = 0重传
124 后台识别服务器识别失败,请从seq = 0重传
125 后台识别服务器识别失败,请重新尝试
126 后台识别服务器音频分片等待超时,请从seq = 0重传
127 后台识别服务器音频分片重复
目录