实时语音识别 - 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 | 超过授权的连接数 | 确认连接数是否超过授权的连接数 |