实时语音识别 - zmeet-ai/AI-Cloud GitHub Wiki

实时语音识别

接口描述

本接口服务采用 websocket 协议,对实时音频流进行识别,同步返回识别结果,达到“边说边出文字”的效果。
在使用该接口前,需要 开通语音识别服务,并进入 API 密钥管理页面 新建密钥,生成 AppID、AppSecret,用于 API 调用时生成签名,签名将用来进行接口鉴权。

接口要求

内容 说明
支持行业 法院,教育, 金融, 医疗, 科技, 运营商,政府, 电商,军事,企业,生活, 汽车
音频属性 采样率:16000Hz或8000Hz 采样精度:16bits 声道:单声道(mono)
音频格式 pcm、wav
请求协议 wss 协议
请求地址 wss://asr.cloud.abcpen.com/asr/v2/ws? {请求参数}
接口鉴权 签名鉴权机制,详见 签名生成
响应格式 统一采用 JSON 格式
数据发送 建议每40ms 发送40ms 时长(即1:1实时率)的数据包,对应 pcm 大小为:8k 采样率640字节,16k 采样率1280字节 音频发送速率过快超过1:1实时率或者音频数据包之间发送间隔超过6秒,可能导致引擎出错,后台将返回错误并主动断开连接
并发限制 默认单账号限制并发数为200路,如您有提高并发限制的需求,请 前往购买

接口调用流程

接口调用流程分为两个阶段:握手阶段和识别阶段。两阶段后台均返回 text message,内容为 json 序列化字符串。

握手阶段

握手阶段,客户端主动发起 websocket 连接请求,请求 URL 格式为:

wss://asr.cloud.abcpen.com/v1/asr/ws?{请求参数}

{请求参数}格式为

key1=value2&key2=value2...

输入参数

参数说明:

参数 类型 必须 说明 示例
lang string 实时语音转写语种,不传自动感知 语种类型:中文、中英混合识别:cn;英文:en
punc string 标点过滤控制,默认返回标点,punc=0会过滤结果中的标点 1
speaker_number string 发音人个数,可选值:0-10,0表示盲分 默认:2(适用通话时两个人对话的场景)
trans_mode int 开启翻译模块 , 1表示打开,0表示关闭 1
target_lang string 目标翻译语种:控制把源语言转换成什么类型的语言;语种类型 trans_mode为1条件下,target_lang有效。 默认为英文“en"。
pd string 垂直领域 设置示例:pd="edu" 参数pd为非必须设置,不设置参数默认为通用
audio_sample_rate string 音频采样率,有"8000", "16000",分别代表采样率是8K和16K,默认是“16000” “16000”
asr_type string 识别结果输出类型,0,输出逐字和逐句结果;1,逐句输出;2,逐字输出。如输入错误或不输出,默认为0 “0”

输出结果

字段 类型 说明
action string 结果标识,started:握手,result:结果,error:异常
code string 错误码
data Data 识别结果详情
desc string 描述
sid string 会话Id
asr string 识别结果文本 UTF8

其中识别结果 Data 结构体格式为:

字段 类型 说明
type string 1 一段话开始识别 识别中(会出现多次1返回) , 0 一句话识别结束 为静态结果。识别结果都是为 1-0 对应识别中 到识别结束的一段话
bg string 一段话开始的时间 单位 ms
ed string 一段话结束的时间 单位ms 再type=1的时候 此值结果为0 当type=1 的时候 ed为准确值
w string 识别的结果 编码为 UTF8
translate string 开启实时翻译的时候 会对应此值 查看翻译结构
ws array 当前一段话的词列表,查看ws结构
seg_id string 每次返回的序号,递增 从0开始

请求示例

握手阶段

请求连接

 wss://asr.cloud.abcpen.cn/v1/asr/ws?trans_mode=0&audio_sample_rate=16000

返回结果

{"action":"started","code":"0","data":{},"desc":"success","sid":"0","asr":"","translate":{}}

客户端发起连接请求后,后台建立连接进并进行签名校验,校验成功则返回 code 值为0的确认消息表示握手成功;如果校验失败,后台返回 code 为非0值的消息并断开连接

识别阶段

握手成功之后,进入识别阶段,客户端上传语音数据并接收识别结果消息。

上传数据

在识别过程中,客户端持续上传 binary message 到后台,内容为音频流二进制数据。建议每40ms 发送40ms 时长(即1:1实时率)的数据包,对应 pcm 大小为:8k 采样率640字节,16k 采样率1280字节。音频发送速率过快超过1:1实时率或者音频数据包之间发送间隔超过6秒,可能导致引擎出错,后台将返回错误并主动断开连接。

音频流上传完成之后,客户端需发送以下内容的 text message,通知后台结束识别。

 {"end" : true}

接收消息

一句话识别中 消息如下:

{"action":"result","code":"0","data":{"cn":{"st":{"bg":"109100","ed":"109660","type":"1","rt":[{"w":"床前","ws":[{"wb":"109100","we":"109260","cw":[{"w":"床","wp":1}]},{"wb":"109660","we":"109820","cw":[{"w":"前","wp":1}]}]}]}},"seg_id":13},"desc":"success","sid":"50982041-bbfe-41f9-a176-94333661f522","asr":"床前","translate":{}}

一句话识别完成 消息如下:

{"action":"result","code":"0","data":{"cn":{"st":{"bg":"109100","ed":"111340","type":"0","rt":[{"w":"床前明月光","ws":[{"wb":"109100","we":"109260","cw":[{"w":"床","wp":1}]},{"wb":"109660","we":"109820","cw":[{"w":"前","wp":1}]},{"wb":"110388","we":"110547","cw":[{"w":"明","wp":1}]},{"wb":"110836","we":"110996","cw":[{"w":"月","wp":1}]},{"wb":"111340","we":"111500","cw":[{"w":"光","wp":1}]}]}]}},"seg_id":15},"desc":"success","sid":"50982041-bbfe-41f9-a176-94333661f522","asr":"床前明月光","translate":{}}
开启翻译后效果如下

一句话识别中 识别中的时候 翻译不会执行需要等待一句话识别完成后才会返回翻译结果 消息如下:

{"action":"result","code":"0","data":{"cn":{"st":{"bg":"2923","ed":"3147","type":"1","rt":[{"w":"床前","ws":[{"wb":"2923","we":"3083","cw":[{"w":"床","wp":1}]},{"wb":"3147","we":"3307","cw":[{"w":"前","wp":1}]}]}]}},"seg_id":2},"desc":"success","sid":"6b13b081-730e-48bb-8261-bfd25b4e30de","asr":"床前","translate":{}}

翻译结果translate中包含语言信息 和 对应识别结果

{"action":"result","code":"0","data":{"cn":{"st":{"bg":"2923","ed":"3876","type":"0","rt":[{"w":"床前明月光","translate":{"english":"The moon before the bed."},"ws":[{"wb":"2923","we":"3083","cw":[{"w":"床","wp":1}]},{"wb":"3147","we":"3307","cw":[{"w":"前","wp":1}]},{"wb":"3372","we":"3532","cw":[{"w":"明","wp":1}]},{"wb":"3596","we":"3756","cw":[{"w":"月","wp":1}]},{"wb":"3876","we":"4036","cw":[{"w":"光","wp":1}]}]}]}},"seg_id":3},"desc":"success","sid":"6b13b081-730e-48bb-8261-bfd25b4e30de","asr":"床前明月光","translate":{"english":"The moon before the bed."}}

领域列表

名称 编码
法院 court
教育 edu
金融 finance
医疗 medical
科技 tech
运营商 isp
政府 gov
电商 ecom
军事 mil
企业 com
生活 life
汽车 car

语种类型

名称 编码
中国 cn
英语 en
德国 de
西班牙 es
俄语 ru
韩国 kr
法语 fr
日本 jp
葡萄牙 pt
土耳其 tr
加泰罗尼亚语 cat
荷兰 nl
阿拉伯语 ara
瑞典 swe
意大利 it
印度尼西亚 id
印度语 hi
芬兰语 fin
越南语 vie
希伯来语 heb
乌克兰 ukr
希腊 el
马来语 may
捷克 cs
罗马尼亚语 rom
丹麦语 dan
匈牙利 hu
挪威语 nno
泰国 th
乌尔都语 urd
克罗地亚语 hrv
保加利亚 bul
立陶宛 lit
拉丁语 lat
毛利 mao
马来语 may
威尔士 wel
斯洛伐克语 sk
泰卢固语 tel
波斯 per
拉脱维亚语 lav
孟加拉语 ben
塞尔维亚 srp
阿塞拜疆 aze
斯洛文尼亚 slo
卡纳达语 kan
爱沙尼亚 est
马其顿 mac
巴斯克语 baq
冰岛 ice
亚美尼亚 arm
尼泊尔语 nep
波斯尼亚 bos
阿尔巴尼亚 alb
斯瓦希里语 swa
加利西亚 glg
马拉地语 mar
旁遮普语 pan
索马里 som
南非 afr
奥克西坦 oci
格鲁吉亚 geo
白俄罗斯 bel
塔吉克语 tgk
阿姆哈拉语 amh
老挝 lao
缅甸 bur

错误码

错误码 描述 说明 处理方式
0 success 成功
-1 in progress 识别中 请继续重试
-2 audio encode error 音频编码错误 请编码成正确的格式,再提交请求
10105 illegal access 没有权限 检查apiKey,ip,ts等授权参数是否正确
10106 invalid parameter 无效参数 上传必要的参数, 检查参数格式以及编码
10107 illegal parameter 非法参数值 检查参数值是否超过范围或不符合要求
10110 no license 无授权许可 检查参数值是否超过范围或不符合要求
10700 engine error 引擎错误 提供接口返回值,向服务提供商反馈
10701 Audio encode error, only support pcm, aac, mpeg2, opus and flac 音频编码错误 支持pcm, aac, mpeg2, opus 和 flac这几种编码,请选择其中一种
10702 Audio sample error, only support 8000、16000、44100 and 48000 Hz 音频采样率错误 支持 8000、16000、44100 和 48000 Hz,请选择其中一种
10202 websocket connect error websocket连接错误 检查网络是否正常
10204 websocket write error 服务端websocket写错误 检查网络是否正常,向服务提供商反馈
10205 websocket read error 服务端websocket读错误 检查网络是否正常,向服务提供商反馈
16003 basic component error 基础组件异常 重试或向服务提供商反馈
10800 over max connect limit 超过授权的连接数 确认连接数是否超过授权的连接数