实时语音识别

最近更新时间:2019-04-28 17:21:43

功能简介

腾讯实时语音识别为开发者提供语音转文字服务的最佳体验,可实现流式传输文本结果,即边说话边出字。

输入音频格式

  • 采样率:8k/16k,详情请参见 音频格式相关介绍
  • 音频格式:pcm、wav、sp、silk。
  • 编码:16bit 位深的单声道。

接口说明

  • 使用本接口服务之前需要在 语音识别 介绍页单击【立即使用】;
  • 接口形式是 HTTP RESTful 形式;
  • 使用腾讯云账号的 APPID 以及 SecretId、SecretKey 进行鉴权;
  • 实时同步语音消息转文本接口同步返回识别结果。

Restful API

流式语音识别的 RESTfulAPI 请求结构如下:

参数名称 必选 类型 描述
Version String HTTPS 协议版本
URL String HTTPS 请求地址
HttpsHeaders 数据集合 HTTPS 请求头部
HttpsMethod String HTTPS 请求方法,语音识别请求方法为 POST
HttpsBody String HTTPS 请求正文,即语音数据大小不超过 200k

其中,URL 的结构为:

https://aai.qcloud.com/asr/v1/appid? 
projectid=xxx& 
template_name=xxx&
sub_service_type=x& 
engine_model_type=x& 
result_text_format=x& 
res_type=x& 
voice_id=xxxxxx&
seq=x&
end=x&
timeout=xxxxx&
source=x&
secretid=xxx& 
timestamp=xxx& 
expired=xxx& 
nonce=xxx&
voice_format=x

URL 中各字段含义如下:

字段 必选 类型 描述
appid Uint 腾讯云应用 ID 值,放在 URL path 中传入。
projectid Uint 腾讯云项目 ID,不填为默认项目,即 0,总长度不超过 1024 字节。
template_name String 模板名称,模板是众多参数的组合。
template_name 和组合“sub_service_type、engine_model_type、result_text_format、res_type”两者必填其一,如果都提供了,则以 template_name 为准。
sub_service_type Uint 子服务类型。1:实时流式识别。
engine_model_type String 引擎类型引擎模型类型。8k_0:8k 通用,16k_0:16k 通用,16k_en:16k英文。
result_text_format Uint 识别结果文本编码方式。0:UTF-8;1:GB2312;2:GBK;3:BIG5
res_type Uint 结果返回方式。 1:同步返回;0:尾包返回。
voice_format Uint 语音编码方式,可选,默认值为 4。1:wav(pcm);4:speex(sp);6:silk;8:mp3(仅16k_0模型支持)。
secretid String 官网 SecretId
timestamp Uint 当前时间戳,是一个符合 UNIXEpoch 时间戳规范的数值,单位为秒。
expired Uint 签名的有效期,是一个符合 UNIXEpoch 时间戳规范的数值,单位为秒。expired 必须大于 timestamp 且 expired-timestamp 小于 90 天。
nonce Uint 随机正整数。用户需自行生成,最长 10 位。
seq Int 语音分片的序号从 0 开始。
end Int 是否为最后一片,最后一片语音片为 1,其余为 0。
source Int 设置为 0。
voice_id String 16 位 String 串作为每个音频的唯一标识,用户自己生成。
timeout Int 设置超时时间单位为毫秒。

HTTPS Headers 的结构如下:

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

请求示例

curl --data "@/mnt/d/1.silk_down" -H "Authorization: 
n2oo5eWeIWfJhNWJAQbnSv9FNFU=" -X POST "httpaai.qcloud.com/asr/v1/1251000004?end=1
&engine_model_type=8k_0&expired=1526970617&nonce=8992&projectid=1013976&res_type=0
&result_text_format=0&secretid=AKIDlfdHxN0ntSVt4KPH0xXWnGl21UUFNoO5&seq=1&source=0
&sub_service_type=1&template_name=asr_1_test0002&timeout=10×tamp=1526884217&
voice_format=4&voice_id=1234567890abclqs"

这里以 =1251000004, =oaYWFO70LGDmcpfwo8uF1IInayysGtgZ 为例拼接签名原文,则拼接的签名原文为:

POSTaai.qcloud.com/asr/v1/1251000004?
end=1&engine_model_type=8k_0&expired=1526970617&nonce=8992&projectid=1013976
&res_type=0&result_text_format=0&secretid=AKIDlfdHxN0ntSVt4KPH0xXWnGl21UUFNoO5
&seq=1&source=0&sub_service_type=1&template_name=asr_1_test0002&timeout=10
×tamp=1526884217&voice_format=4&voice_id=1234567890abclqs

对原文进行加密处理:
Base64Encode(HmacSha1(签名原文,SecretKey))

最终得到签名串为:
mZCkV2Atye6t7rKV3LqVDJEO0Nk=

请求 headers 为:

{
    "Authorization": "n2oo5eWeIWfJhNWJAQbnSv9FNFU=",
    "Content - Length": "strlen($data)"
}

返回结构

返回结果

流式语音识别的 RESTfulAPI 请求返回结果如下表所示:

参数名称 类型 说明
code Int 服务器错误码,0 为成功。
message String 服务器返回的信息。
voice_id Int 语音 ID。
seq Int 语音分片的序列号。
text String 语音转换的结果。

返回示例

第一个分片:

{
"code":0,
"message":"成功",
"voice_id":"1234567890abcdef",
"seq":0,
"text":""
}

中间的某个分片:

{
"code":0,
"message":"成功",
"voice_id":"1234567890abcdef",
"seq":23,
"text":"你是。"
}

最后一个分片:

{
"code":0,
"message":"成功",
"voice_id":"1234567890abcdef",
"seq":28,
"text":"你是男的女的。"
}

返回码

数值 说明
0 成功
100 获取语音分片信息失败
101 语音分片过大
102 参数不合法
103 访问数据库失败
104 appid 未注册
105 模板不存在
106 模板停用
107 鉴权失败
108 拼接签名串失败
109 l5 获取 IP、port 失败
110 后台识别服务器故障,请从 seq=0 重传
111 后台识别模块回包格式错误
112 语音分片为空

PHP 代码示例

参见 实时语音识别 PHP SDK