达人是什么意思| 饺子包什么馅好吃| 尿道刺痛吃什么药| slogan什么意思| 女性吃辅酶q10有什么好处| 急性扁桃体炎什么原因导致的| 鳑鲏吃什么| 原发性和继发性是什么意思| 结婚九年是什么婚| 眼睛发黄是什么原因| 什么的小花| 吃什么变碱性体质最快| 什么年树木| 搞基是什么意思| 手机root后有什么好处和坏处| 喝茶失眠是什么原因| 艺高人胆大什么意思| 梦见蜂蜜是什么意思| 叶黄素是什么| 吃什么吐什么喝水都吐怎么办| 牙龈发炎是什么原因引起的| 宫颈息肉吃什么药能消| 区人大代表是什么级别| 户口迁移需要什么手续| 担担面是什么面| 乙肝五项一五阳性什么意思| 忉利天是什么意思| 月经期喝什么水最好| 梅子什么时候成熟| 咕咚是什么| 心脏右束支传导阻滞是什么意思| 脚踝后面的筋疼因为什么| 婴儿肥是什么意思| 为什么我的眼中常含泪水| 胃疼挂什么科室| 生菜为什么会苦| 为什么现在不吃糖丸了| 肋骨外翻有什么危害| grn什么颜色| 7月1号是什么节日| 下肢静脉血栓吃什么药| 蜂蜜和柠檬一起喝有什么作用| 诺贝尔奖为什么没有数学奖| 心梗吃什么药效果好| 十二指肠溃疡是什么原因引起的| 尿多是什么原因引起的| 铁皮石斛有什么作用| 释迦果吃了有什么好处| 哈工大全称是什么| 总胆固醇是什么| 凌志和雷克萨斯有什么区别| 双肺条索是什么意思| 钙是什么| 366红包代表什么意思| 减脂晚上吃什么好| 手脱皮是缺什么维生素| 突然间头晕是什么原因| 空调什么度数最省电| 肉质瘤是什么东西| 哺乳期乳腺炎吃什么药| 脸大适合什么发型| 飘雪是什么茶| 生理期为什么会肚子疼| 两榜进士是什么意思| 毅力是什么意思| 猪横利是什么| 心机boy什么意思| pdrn是什么| 平舌音是什么意思| 主见是什么意思| 碱和小苏打有什么区别| 飞蚊症是什么原因| 什么 姿势 最深| 一月十八是什么星座| 隐翅虫长什么样| 梦见黑狗是什么意思| 喉咙疼吃什么消炎药| 尚公主是什么意思| 喝太多水对身体有什么影响| 有甲状腺结节不能吃什么| rop是什么意思| 降钙素原检测是什么| 正比是什么意思| 什么是前庭功能| ige是什么意思| 旦是什么意思| 四个木是什么字| 左下腹是什么部位| glenfiddich是什么酒| 口有什么字| 为什么同房过后会出血| dic是什么病的简称| 1999年五行属什么| 女人梦见龙是什么征兆| 二月开什么花| 婢女是什么意思| 屎黄色是什么颜色| 县人大主任是什么级别| 淋巴滤泡增生是什么意思严重吗| 右眼跳是什么意思| 眼睛痒是怎么回事用什么药| 胰腺炎是什么| 戈美其鞋子是什么档次| 隔离是什么意思| 到此为止是什么意思| peek是什么材质| 飞机托运不能带什么| 百脚虫的出现意味什么| 48年属什么| 恨铁不成钢什么意思| 双侧输尿管不扩张是什么意思| 白带有点黄是什么原因| 立春是什么生肖| 讲师是什么级别| 常吃木耳有什么好处和坏处| 玉米蛇吃什么| 全身出虚汗多是什么原因造成的| 麦麸是什么意思| 胎儿打嗝是什么原因| 龟龄集适合什么人吃| 什么酒好喝| 糙米饭是什么米| 胃反酸水吃什么药| 宫颈糜烂用什么药好| mva是什么单位| 肋骨下面是什么部位| 怀孕时间从什么时候开始算| 窥视是什么意思| 糖醋鱼用什么鱼做好吃| 什么情况需要割包皮| 关节痛吃什么药| 荨麻疹忌口忌什么食物| 心悸是什么原因引起的| 为什么叫夺命大乌苏| 吃什么不便秘| 男模什么意思| 异麦芽酮糖醇是什么| 什么头蛇尾| 甲苯是什么东西| 饱和脂肪酸是什么| 阴道炎是什么引起的| 朱门是什么意思| 包皮炎是什么症状| lot是什么意思| 脚趾骨折是什么感觉| 产成品是什么意思| 尤物是什么意思| 砍单是什么意思| 处暑吃什么传统食物| 天蝎座和什么座最配| 点头之交是什么意思| balco是什么牌子手表| choice是什么意思| 甲功七项挂什么科| 脚癣是什么原因引起的| 孕酮低吃什么| 妈妈吃什么帮宝宝排气| 老年人心慌是什么原因| 红斑狼疮的症状是什么| 分数是什么| 茶减一笔是什么字| 血浆是什么| 补中益气丸适合什么人吃| 鱼加思读什么| 总胆固醇偏高是什么意思| 肩袖损伤吃什么药效果最好| 为什么明星不激光祛斑| 肠胃炎有什么症状| 85年属于什么生肖| 去医院查怀孕挂什么科| 10月6日是什么星座| 子宫内膜病变有什么症状| 低压低有什么危害| ssr是什么意思| 喝荷叶茶有什么好处和坏处| 快递属于什么行业| 为什么发际线高| 林丹用的什么球拍| 色字头上一把刀什么意思| 情节是什么| 公假是什么意思| 槊是什么意思| 打黄体酮针有什么副作用| 股骨头坏死是什么原因引起的| 猫来家门口有什么预兆| 氟骨症是什么病| 前列腺钙化斑是什么意思| 事不过三是什么意思| 痔疮初期症状是什么| 疱疹性咽峡炎用什么药| 胆囊炎看什么科室| 天公作美是什么生肖| 六甲什么意思| 什么食物含锌| 为什么尿会很黄| 什么是纳氏囊肿| 眼睛模糊吃什么好| 姓许的女孩取什么名字好听| 什么是海啸| 尿中有泡沫是什么原因| 胃糜烂是什么症状| 一什么秋千| 十二指肠溃疡是什么原因引起的| 不什么其烦| 什么宽带网速快又便宜| 老天爷叫什么名字| 压力山大什么意思| 规律宫缩是什么感觉| 竟然是什么意思| 额头上长斑是什么原因造成的| 总胆固醇是什么| 印度人为什么用手抓饭吃| rr是什么牌子| 11月26是什么星座| 护发素什么牌子好| 爱出汗的人是什么原因| 嘴巴长溃疡是什么原因| 喉咙发炎不能吃什么食物| py是什么意思| 胃疼可以吃什么食物| 赤者念什么| 裸婚什么意思| 百废待兴是什么意思| 826是什么星座| 牛黄是什么东西| 梦见桥塌了有什么预兆| 下巴脱臼是什么感觉| a型血的人容易得什么病| 屮艸芔茻什么意思| 导演是干什么的| 散光有什么症状| 两个月没有来月经了是什么原因| 脸过敏发红痒擦什么药| 肉身成圣是什么意思| t是什么意思| 什么食物含硒量最高| 辣皮子是什么| 休克的本质是什么| daddy什么意思| 鲱鱼在中国叫什么鱼| 瘦了是什么原因| 胸闷是什么原因| 什么地流着| 怀孕会出现什么状况| 大于90度的角是什么角| 什么牌子的空调好用又省电| 肺肾两虚吃什么中成药| 什么是疣体| 纪委是干什么的| 什么情况下需要打破伤风| 结石长什么样子图片| 头孢呋辛钠主治什么病| 缺镁吃什么食物补充最快| 调停是什么意思| 半夜吃什么不会胖| 火红火红的什么| 小便分叉是什么原因男| 红得什么| 姜虫咬人有什么症状| py什么意思| 疱疹长什么样| 梦见自己在飞是什么征兆| 什么血型招蚊子| 滇是什么意思| 百度
资讯 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

“吃动平衡”营养学社区开讲 小小食品安全观察

接口描述

实时语音识别接口采用websocket协议的连接方式,边上传音频边获取识别结果。可以将音频流实时识别为文字,也可以上传音频文件进行识别;返回结果包含每句话的开始和结束时间,适用于长句语音输入、音视频字幕、直播质检、会议记录等场景。

WebSocket简介

WebSocket 是基于TCP的全双工协议,即建立连接后通讯双方都可以不断发送数据。

WebSocket 协议由rfc6455定义, 下面介绍常见WebSocket 库的调用流程及参数

一般需要各编程语言的WebSocket库来实现接入。WebSocket库需支持rfc6455描述的协议, 即支持Sec-WebSocket-Version: 13

主要流程

  1. 连接
  2. 连接成功后发送数据
    2.1 发送开始参数帧
    2.2 实时发送音频数据帧
    2.3 库接收识别结果
    2.4 发送结束帧
  3. 关闭连接 1.png 名词解释:
  • 连接: 这里指TCP连接及握手(Opening Handshake) , 一般WebSocket库已经封装,用户不必关心
  • 发送数据帧:Sending Data Frame, 类似包的概念,指一次发送的内容 。从客户端到服务端。

    • 文本帧:Opcode 0x1 (Text), 实时语音识别api发送的第一个开始参数帧和最后一个结束帧,文本的格式是json
    • 二进制帧:Opcode0x2 (Binary), 实时语音识别api 发送的中间的音频数据帧
  • 接收数据帧: Receiving Data Frame, 类似包的概念,指一次发送的内容 。从服务端到客户端。

    • 文本帧:Opcode 0x1 (Text), 识别结果或者报错,文本的格式是json
    • 二进制帧:实时语音识别api 不会收到
  • 关闭连接:Closing Handshake。 百度服务端识别结束后会自行关闭连接,部分WebSocket库需要得知这个事件后手动关闭客户端连接。

通常WebSocket库用需要用户自己定义下面的3个回调函数实现自己的业务逻辑。

连接成功后的回调函数:
{
	#通常需要开启一个新线程,以避免阻塞无法接收数据
	2.1 发送开始参数帧
	2.2 实时发送音频数据帧
	2.4 发送结束帧
}

接收数据的回调函数
{
	2.3 库接收识别结果,自行解析json获得识别结果
}

服务端关闭连接的回调函数
{
	3. 关闭客户端连接, 部分库可以自动关闭客户端连接。
}

在线调试&示例代码

Demo 目前提供如下demo及演示功能,点击进入下载页面

编程语言 操作系统及版本 使用文件流演示接口基本识别功能 耗时计算 模拟实时音频流 断网补发数据
Java 任意,支持Java 8或以上
Android Android Api Level 15 或以上
Python 任意,支持Python3
C++ Linux ,支持C++ 11 以上

请求说明

连接

连接地址(WebSocket URI):wss://vop.baidu.com/realtime_asr?sn=XXXX-XXXX-XXXX-XXX 参数 sn由用户自定义用于排查日志,建议使用随机字符串如UUID生成。 sn的格式为英文数字及“-” ,长度128个字符内,即[a-zA-Z0-9-]{1, 128}

如果连接成功,一般WebSocket库会发起回调。

发送开始参数帧

注意帧的类型(Opcode)是Text, 使用json序列化

示例:

{
        "type": "START",
        "data": {
            "appid": 105xxx17,
            "appkey": "UA4oPSxxxxkGOuFbb6",
            "dev_pid": 15372,  # 识别模型,比如普通话还是英语,是否要加标点等
            "lm_id": xxxx,  # 自训练平台才有这个参数
            "cuid": "cuid-1",  # 随便填不影响使用。机器的mac或者其它唯一id,页面上计算UV用。
            “user”: "xxx",  # 使用中文多方言模型(pid:15376)时此参数必填,参数值任意。
            # 下面是固定参数
            "format": "pcm",
            "sample": 16000
            
        }
    }

具体参数说明

参数名称 类型 是否必填 说明
type String 必填,固定值 START,开始帧的类型
data Array 必填 具体见下表

data参数说明

参数名称 类型 是否必填 说明
appid int 必填 控制台网页上应用的鉴权信息 AppID
appkey string 必填 控制台网页上应用的鉴权信息 API Key
dev_pid int 必填 识别模型,推荐15372,见下一个表格
lm_id int 可选 填入自训练平台训练上线的模型id,需要和训练的基础模型dev-pid对齐。参考平台模型调用部分的提示。
cuid string 必填 统计UV使用,发起请求设备的唯一id,如服务器的mac地址。随意填写不影响识别结果。长度128个字符内,即[a-zA-Z0-9-_]{1, 128}
user string 可选 使用中文多方言模型(pid:15376)时此参数必填,参数值任意。
format string 必填,固定值 pcm , 固定格式
sample int 必填,固定值 16000, 固定采样率

开放平台模型(无在线语义功能)

PID 模型 是否有标点及后处理 推荐场景
1537 中文普通话 弱标点(逗号,句号) 手机近场输入
15372 中文普通话 加强标点(逗号、句号、问号、感叹号) 手机近场输入
15376 中文多方言 弱标点(逗号,句号) 手机近场输入
1737 英语 无标点 手机近场输入
17372 英语 加强标点(逗号、句号、问号) 手机近场输入

使用中文多方言模型(pid:15376)时,需要在参数中加入"user":"XXX"(参数任意)

目前中文多方言模型(pid:15376)可同时支持中文、粤语、四川话和东北话

语音自训练平台模型训练

实时语音识别接口支持在语音自训练平台上训练中文普通话模型 image.png

训练后的模型注意必须填写上线模型的模型参数,可在自训练平台的模型调用模块进行查看。

示例 获取专属模型参数pid:1537或15372 modelid:1235, 则调用websocket API时必须填写参数 dev_pid=1537或15372(PID功能见下表);同时lm_id 设置为1235。

PID 模型 是否有标点 备注
1537 中文普通话 无标点
15372 中文普通话 加强标点(逗号、句号、问号、感叹号)

发送音频数据帧

这里需要注意,服务端5s没有收到音频数据会断开并报错,发送间隔控制在5s以内

注意帧的类型(Opcode)是Binary

内容是二进制的音频内容。 除最后一个音频数据帧, 每个帧的音频数据长度为20-200ms。 建议最佳160ms一个帧,有限制的也建议80ms。

160ms = 160 (16000 2 /1000) = 5120 bytes

计算方式:
16000采样率: 1s音频 16000采样点
16bits: 一个采样点 16bits = 2 bytes
1s : = 1000ms
即 160ms *  16000  * 2bytes / 1000ms = 5120bytes

实时语音识别api 建议实时发送音频,即每个160ms的帧之后,下一个音频数据帧需要间隔160ms。即:文件,此处需要sleep(160ms) 如果传输过程中网络异常, 需要补断网时的识别结果,发送的音频数据帧之间可以没有间隔。具体见下文“断网补发数据”一节

发送结束帧

注意帧的类型(Opcode)是Text, 使用json序列化

示例:

{
	"type":"FINISH"
}

具体参数说明

参数名称 类型 是否必填 说明
type String 必填,固定值 , 结束帧的类型

发送取消帧

取消与结束不同,结束表示音频正常结束,取消表示不再需要识别结果,服务端会迅速关闭连接 示例:

{
	"type":"CANCEL"
}

具体参数说明

参数名称 类型 是否必填 说明
type String 必填,固定值 CANCEL 立即取消本次识别

发送心跳帧

注意帧的类型(Opcode)是Text, 使用json序列化 正常情况下不需要发这个帧,仅在网络异常的时候,需要补传使用,具体见“断网补发数据”

示例:

{
	"type":"HEARTBEAT"
}

具体参数说明

参数名称 类型 是否必填 说明
type String 必填,固定值 HEARTBEAT, 心跳帧的类型

返回说明

接收数据帧

注意需要接收的帧类型(Opcode)是Text, 本接口不会返回Binary类型的帧。 text的内容, 使用json序列化

临时及最终识别结果

一段音频由多句话组成,实时识别api会依次返回每句话的临时识别结果和最终识别结果

一句话的临时识别结果示例:

{
	"err_no":0,
	"err_msg":"OK",
	"type": "MID_TEXT",
	"result": "北京天气怎",
	"log_id": 45677785,
	"sn": "399427ce-e999-11e9-94c8-fa163e4e6064_ws_2"
	
}

一句话的最终识别结果:

{
   	"err_no":0,
	"err_msg":"OK",
	"type":"FIN_TEXT",
	"result":"北京天气怎么样",
	"start_time":53220,
	"end_time":73340,
	"err_no":0,
	"err_msg":"OK",	"log_id":45677785,
	"sn":"399427ce-e999-11e9-94c8-fa163e4e6064_ws_2"
}

心跳帧(收到后,请忽略)

示例:

{
	"type":"HEARTBEAT"
}

与发送的心跳帧不同,这个是接收服务端下发的,5s一次,收到后可以忽略。

服务端报错 如-3005错误码,是针对的是一个句子的,其它句子依旧可以识别,请求是否结束以服务端是否关闭连接为准。 具体错误码含义见文末“错误码“一节

{
	"err_msg": "asr authentication failed",
	"err_no": -3004,
	"log_id": 106549729,
	"result": "",
	"sn": "0d25b5e1-ffa6-11e9-8968-f496349f3917",
	"type": "FIN_TEXT"
}

一句话的开始时间及结束时间:识别过程中,百度服务端在每句话的最终识别结果中带有这句话的开始和结束时间。最终识别结果是指"type":"FIN_TEXT",即一句话的最后识别结果,包括这句话的报错结果。

通常一个音频会得到如下的时间信息:

 # s1 e1 指第一句话的开始和结束时间start_time,end_time
[静音][s1:e1][静音][s2:e2]....[静音][s10:e10][静音]
一句话不能超过60s,否则会被强制切割

参数说明

参数名称 名称 类型 说明
err_no 错误码 int 0 表示正确, 其它错误码见文末
err_msg 错误信息 string err_no!=0时,具体的报错解释。
type 结果类型 string 见下面3行示临时识别结果
~ ~ MID_TEXT 一句话以及临时识别结果
~ ~ FIN_TEXT 一句话的最终识别结果或者报错, 是否报错由err_no判断
~ ~ HEARTBEAT 仅断网补发音频数据需要,见下文“断网补发数据”一节
result 识别结果 string 音频的识别结果
start_time 一句话的开始时间 int,毫秒 一句话的开始时间,临时识别结果MID_TEXT 无此字段
end_time 一句话的结束时间 int,毫秒 一句话的结束时间,临时识别结果MID_TEXT 无此字段
logid 日志id long 日志id,用这个id可以百度服务端定位请求,排查问题
sn 请求sn string 用这个sn可以百度服务端定位请求,排查问题。ws URI里的参数及识别句子的组合

断网补发数据

请先看“发送音频数据帧” 和 “接收数据帧” 这2节。

断网补发数据的目的是将一个语音流,在网络不佳的情况下,通过自己的代码逻辑拼接,使得多次请求的结果看上去像一次。

简单来说就是哪里断开,从哪里开始重新发一次请求,“哪里”=最后一次接收的“end_time”。服务端对每个请求独立,需要自行拼接补发数据的请求时间。

如果一个音频的10个句子时间如下:

 # s1 e1 指第一句话的开始和结束时间start_time,end_time
[静音][s1:e1][静音][s2:e2]...[s7:e7]...[静音][s10:e10][静音]

如果发送过程中,比如在第七句e7之后,网络抖动或者遇见其它错误。但是为了不影响最终的用户体验,期望连续的10个句子的识别结果。

此时,可以发起一个新的请求,从e7开始发数据,在,语音数据帧之间不需要sleep。

如果超过5s没有发送音频数据给服务端,服务端会下发报错并结束连接,建议至少2s 发送一次。

完整流程如下

  1. 开始一次请求,正常发送音频数据,并缓存音频数据,
  2. 接收到数据帧, 保存end_time
  3. 如果此时断网,读取最后一次的end_time如7000ms
  4. 开始一次新请求, 从缓存的音频数据中找到7000ms(224000bytes)以后的数据,发送给服务端。每个帧160ms的音频数据,补数据时,每个帧之间不需要间隔sleep。
  5. 一直追上实时音频数据,开始实时发送
  6. 新请求的start_time和end_time可以加上7000ms,然后展示给用户
  7. 如果补发数据过大,新请求过快结束,在新请求结束时,需要补type=HEARTBEAT心跳帧,建议2-3s发一次,避免5s服务端读超时。
  8. 如果再次断网流程依旧
上一篇
语音识别极速版API
下一篇
音频文件转写API
1985年牛五行属什么 八爪鱼是什么意思 炖汤用什么锅比较好 肚子胀不排便什么原因 梦见女鬼是什么意思
犯月是什么意思 多巴胺是什么 证件照一般是什么底色 胆囊切除后对身体有什么影响 清款是什么意思
青鹏软膏主要治疗什么 山东济南有什么好玩的地方 吃什么水果补肾 afi是胎儿的什么意思 乐果是什么农药
吃什么补阴虚最好 唐筛检查什么 为什么油耳朵就有狐臭 早搏是什么症状 坠积效应是什么意思
血红蛋白低吃什么补最快hkuteam.com 澳门是什么时候被葡萄牙占领的hcv8jop8ns4r.cn 吃什么药可以延长射精hcv8jop3ns3r.cn 斑秃吃什么药效果好hcv8jop9ns9r.cn 猪与什么属相相冲weuuu.com
乙肝两对半245阳性是什么意思weuuu.com 检查甲亢挂什么科hcv9jop4ns4r.cn 路政属于什么单位liaochangning.com 小儿流清鼻涕吃什么药效果好hcv8jop8ns1r.cn 生长因子是什么hcv8jop6ns6r.cn
离线缓存是什么意思bfb118.com 东风破是什么意思hcv9jop0ns5r.cn 咳嗽能吃什么食物hcv8jop6ns8r.cn 心电图伪差是什么意思hcv9jop1ns4r.cn 林黛玉和贾宝玉是什么关系hcv8jop6ns6r.cn
月桂酸是什么wuhaiwuya.com 拉屎拉出血是什么原因bjhyzcsm.com 耻骨高是什么原因hcv8jop2ns8r.cn 着床出血什么时候出现hcv8jop5ns9r.cn 脚后跟干裂用什么药膏hcv9jop4ns5r.cn
百度