语音交互产品通过WebSocket协议对外提供实时语音流语音转写功能

简介: 阿里云智能语音交互产品通过WebSocket协议提供实时语音转写功能,支持长语音。音频流以Binary Frame上传,指令和事件为Text Frame。支持单声道、16 bit采样位数的PCM、WAV等格式,采样率8000Hz/16000Hz。可设置返回中间结果、添加标点、中文数字转阿拉伯数字,并支持多语言识别。服务端通过临时Token鉴权,提供外网和上海ECS内网访问URL。交互流程包括StartTranscription、StopTranscription指令及多种事件反馈。

功能介绍
阿里云智能语音交互产品通过WebSocket协议对外提供实时语音流语音转写功能,支持长语音。其中指令、事件皆为WebSocket协议Text类型的DataFrame,音频流需要以Binary Frame的形式上传至服务端,调用时序需要符合协议要求的交互流程。发送语音数据使用Websocket的二进制帧BinaryFrame,具体可参见Data Frames。

支持的输入格式:单声道(mono)、16 bit采样位数,包括PCM、PCM编码的WAV、OGG封装的OPUS、OGG封装的SPEEX、AMR、MP3、AAC。

支持的音频采样率:8000Hz/16000Hz。

支持设置返回结果:是否返回中间识别结果,在后处理中添加标点,将中文数字转为阿拉伯数字输出。

支持设置多语言识别:在控制台编辑项目中进行模型选择,详情请参见管理项目。

鉴权
服务端通过临时Token进行鉴权,请求时需要在URL中携带Token参数,Token获取方式请参见获取Token概述。获取Token之后通过如下方式访问语音服务端。

访问类型

说明

URL

外网访问

所有服务器均可使用外网访问URL。

wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1?token=

上海ECS内网访问

使用阿里云上海ECS(即ECS地域为华东2(上海)),可使用内网访问URL。ECS的经典网络不能访问AnyTunnel,即不能在内网访问语音服务;如果希望使用AnyTunnel,需要创建专有网络在其内部访问。

说明
使用内网访问方式,将不产生ECS实例的公网流量费用。

关于ECS的网络类型请参见网络类型。

ws://nls-gateway-cn-shanghai-internal.aliyuncs.com:80/ws/v1?token=

交互流程
指令及音频流需要严格按照下图所示顺序发送,否则会导致和服务端交互失败。

image
指令
请求指令用于控制语音识别任务的起止,标识任务边界,以JSON格式的Text Frame方式发送服务端请求,需要在Header中设置请求的基础信息。指令由Header和Payload两部分组成,其中Header部分为统一格式,不同指令的Payload部分格式各不相同。

1、Header格式说明
Header格式如下:

参数

类型

是否必选

说明

appkey

String

管控台创建的项目Appkey。

message_id

String

当次消息请求ID,随机生成32位唯一ID。

task_id

String

整个实时语音识别的会话ID,整个请求中需要保持一致,32位唯一ID。

namespace

String

访问的产品名称,固定为“SpeechTranscriber”。

name

String

指令名称,包含StartTranscription和StopTranscription指令。具体请参见StartTranscription指令和StopTranscription指令。

2、StartTranscription指令
Payload对象参数说明:

参数

类型

是否必选

说明

format

String

音频格式,包括PCM、WAV、OPUS、SPEEX、AMR、MP3、AAC。

sample_rate

Integer

音频采样率,默认是16000Hz,根据音频采样率在管控台对应项目中配置支持该采样率及场景的模型。

enable_intermediate_result

Boolean

是否返回中间识别结果,默认是false。

enable_punctuation_prediction

Boolean

是否在后处理中添加标点,默认是false。

enable_inverse_text_normalization

Boolean

ITN(逆文本inverse text normalization)中文数字转换阿拉伯数字。设置为True时,中文数字将转为阿拉伯数字输出,默认值:False。

customization_id

String

自学习模型ID。

vocabulary_id

String

定制泛热词ID。

max_sentence_silence

Integer

语音断句检测阈值,静音时长超过该阈值会被认为断句,参数范围200ms~2000ms,默认值800ms。

enable_words

Boolean

是否开启返回词信息,默认是false。

disfluency

Boolean

过滤语气词,即声音顺滑,默认值false(关闭),开启时需要设置version为4.0。

speech_noise_threshold

Float

噪音参数阈值,参数范围:[-1,1]。取值说明如下:

取值越趋于-1,噪音被判定为语音的概率越大。

取值越趋于+1,语音被判定为噪音的概率越大。

重要
该参数属高级参数,调整需慎重并重点测试。

enable_semantic_sentence_detection

Boolean

是否开启语义断句,默认是false。

示例代码如下:

{
"header": {
"message_id": "05450bf69c53413f8d88aed1ee60",
"task_id": "640bc797bb684bd6960185651307
",
"namespace": "SpeechTranscriber",
"name": "StartTranscription",
"appkey": "17d4c634**"
},
"payload": {
"format": "opus",
"sample_rate": 16000,
"enable_intermediate_result": true,
"enable_punctuation_prediction": true,
"enable_inverse_text_normalization": true
}
}
3、StopTranscription指令
StopTranscription指令要求服务端停止语音转写,Payload为空。示例代码如下:

{
"header": {
"message_id": "05450bf69c53413f8d88aed1ee60",
"task_id": "640bc797bb684bd6960185651307
",
"namespace": "SpeechTranscriber",
"name": "StopTranscription",
"appkey": "17d4c634**"
}
}
事件
事件指的是服务端返回给客户端的处理进度事件,代表不同的处理阶段,客户端可获取不同处理阶段的事件实现不同的业务逻辑。以JSON格式返回,事件由Header和Payload两部分组成,其中Header部分为统一格式,不同事件的Payload部分格式可能不同。

1、TranscriptionStarted事件
TranscriptionStarted事件表示服务端已经准备好了进行识别,客户端可以发送音频数据了。

参数

类型

说明

session_id

String

客户端请求时传入session_id的话则原样返回,否则由服务端自动生成32位唯一ID。

示例格式如下:

{
"header": {
"message_id": "05450bf69c53413f8d88aed1ee60",
"task_id": "640bc797bb684bd6960185651307
",
"namespace": "SpeechTranscriber",
"name": "TranscriptionStarted",
"status": 20000000,
"status_message": "GATEWAY|SUCCESS|Success."
},
"payload": {
"session_id": "1231231dfdf**"
}
}
2、SentenceBegin事件
SentenceBegin事件表示服务端检测到了一句话的开始。

参数

类型

说明

index

Integer

句子编号,从1开始递增。

time

Integer

句子开始时间相对整个音频流的开始时间,单位是毫秒。

示例格式如下:

{
"header": {
"message_id": "05450bf69c53413f8d88aed1ee60",
"task_id": "640bc797bb684bd6960185651307
",
"namespace": "SpeechTranscriber",
"name": "SentenceBegin",
"status": 20000000,
"status_message": "GATEWAY|SUCCESS|Success."
},
"payload": {
"index": 1,
"time": 320
}
}
3、TranscriptionResultChanged事件
TranscriptionResultChanged事件表示识别结果发生了变化。

参数

类型

说明

index

Integer

句子编号,从1开始递增。

time

Integer

当前已处理的音频时长,单位是毫秒。

result

String

当前的识别结果。

words

Word

词信息。

status

Integer

状态码。

Word 结构:

参数

类型

说明

text

String

文本。

startTime

Integer

词开始时间。

endTime

Integer

词结束时间。

示例格式如下:

{
"header":{
"message_id":"05450bf69c53413f8d88aed1ee60",
"task_id":"640bc797bb684bd6960185651307
",
"namespace":"SpeechTranscriber",
"name":"TranscriptionResultChanged",
"status":20000000,
"status_message":"GATEWAY|SUCCESS|Success."
},
"payload":{
"index":1,
"time":1800,
"result":"今年双十一",
"words":[
{
"text":"今年",
"startTime":1,
"endTime":2
},
{
"text":"双十一",
"startTime":2,
"endTime":3
}
]
}
}
4、SentenceEnd事件
SentenceEnd事件表示服务端检测到了一句话的结束。

参数

类型

说明

index

Integer

句子编号,从1开始递增。

time

Integer

当前已处理的音频时长,单位是毫秒。

begin_time

Integer

这句话对应的SentenceBegin事件的时间,单位是毫秒。

result

String

当前的识别结果。

confidence

Double

结果置信度,取值范围[0.0,1.0],值越大表示置信度越高。

words

Word

词信息。

status

Integer

状态码,默认值 20000000。

stash_result

StashResult

暂存结果,开启语意断句后会返回下一句未断句中间结果。

StashResult结构:

参数

类型

说明

sentenceId

Integer

句子编号,从1开始递增。

beginTime

Integer

句子开始时间。

text

String

转写内容。

currentTime

Integer

当前处理时间。

示例格式如下:

{
"header": {
"message_id": "05450bf69c53413f8d88aed1ee60",
"task_id": "640bc797bb684bd6960185651307
",
"namespace": "SpeechTranscriber",
"name": "SentenceEnd",
"status": 20000000,
"status_message": "GATEWAY|SUCCESS|Success."
},
"payload": {
"index": 1,
"time": 3260,
"begin_time": 1800,
"result": "今年双十一我要买电视"
}
}
5、TranscriptionCompleted事件
TranscriptionCompleted事件表示服务端已停止了语音转写。

只有发送了StopTranscription指令,才能接收到该事件。
原文地址:https://laavenite.92demo.com
https://kruller.92demo.com
https://lactyl.92demo.com
https://lactonaphthol.92demo.com
https://inida.92demo.com
https://kullgren.92demo.com
https://labyrinthic.92demo.com
https://labiostipes.92demo.com
https://koum.92demo.com
https://kromesky.92demo.com
https://knotter.92demo.com
https://Kremlin.92demo.com
https://kryog.92demo.com
https://hosphor.92demo.com
https://kupfer.92demo.com
https://lactucism.92demo.com
https://kopecks.92demo.com
https://Kybernetika.92demo.com
https://lactoglobulin.92demo.com
https://krablite.92demo.com
https://Kuplex.92demo.com
https://koenenite.92demo.com
https://errand.92demo.com
https://lactophenol.92demo.com
https://knotb.92demo.com
https://koine.92demo.com
https://olite.92demo.com
https://lactometer.92demo.com
https://kopsidine.92demo.com
https://ladderlike.92demo.com
https://xanthin.92demo.com
https://labrador.92demo.com
https://knowle.92demo.com
https://labour.92demo.com
https://lactophenene.92demo.com
https://thionite.92demo.com
https://labiology.92demo.com
https://Kremlinology.92demo.com
https://label.92demo.com
https://krone.92demo.com
https://kymoscope.92demo.com
https://konst.92demo.com
https://lactobacillus.92demo.com
https://lactyl.92demo.com
https://Kroo.92demo.com
https://laboursome.92demo.com
https://kampf.92demo.com
https://kurchatovite.92demo.com
https://kobellite.92demo.com
https://knotwork.92demo.com
https://ulales.92demo.com
https://koroseal.92demo.com
https://kotomycin.92demo.com
https://knurls.92demo.com
https://kupramite.92demo.com
https://kurskite.92demo.com
https://Kusn.92demo.com

示例格式如下:

{
"header": {
"message_id": "05450bf69c53413f8d88aed1ee60",
"task_id": "640bc797bb684bd6960185651307
",
"namespace": "SpeechTranscriber",
"name": "TranscriptionCompleted",
"status": 20000000,
"status_message": "GATEWAY|SUCCESS|Success."
}
}

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
目录
打赏
0
16
15
0
32
分享
相关文章
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
27 1
WebSocket调试工具深度对比:Postman与Apipost功能实测解析
本文深入对比了Postman与Apipost两款WebSocket调试工具。作为实时通讯系统工程师,作者在开发智能客服系统时遇到了传统工具调试复杂、文档管理不便的问题。通过引入Apipost的智能连接池、消息分组管理和自动化文档生成等功能,实现了多环境自动切换、消息分类和接口文档自动生成,极大提升了调试效率和团队协作效果。最终,使用Apipost使接口调试时间减少40%,文档维护成本降低70%,跨团队沟通效率提升50%。
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
178 1
WebSocket调试工具深度对比:Postman与Apipost功能实测解析
如果你在寻找既能搞定WebSocket调试,又能完美管理文档的工具,不妨试试Apipos!
57 1
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
393 7
Jmeter实现WebSocket协议的接口测试方法
C# 一分钟浅谈:WebSocket 协议应用
【10月更文挑战第6天】在过去的一年中,我参与了一个基于 WebSocket 的实时通信系统项目,该项目不仅提升了工作效率,还改善了用户体验。本文将分享在 C# 中应用 WebSocket 协议的经验和心得,包括基础概念、C# 实现示例、常见问题及解决方案等内容,希望能为广大开发者提供参考。
433 0
为什么ChatGPT采用SSE协议而不是WebSocket?
在探讨大型语言模型ChatGPT的技术实现时,一个引人注目的细节是其选择使用SSE(Server-Sent Events)协议而非WebSocket来实现数据的实时推送。这一选择背后,蕴含着对技术特性、应用场景及资源效率的深思熟虑。本文将深入探讨ChatGPT为何偏爱SSE,以及这一决策背后的技术逻辑。
689 3
未来语音交互新纪元:FunAudioLLM技术揭秘与深度评测
人类自古以来便致力于研究自身并尝试模仿,早在2000多年前的《列子·汤问》中,便记载了巧匠们创造出能言善舞的类人机器人的传说。
12791 116
医疗行业的语音识别技术解析:AI多模态能力平台的应用与架构
AI多模态能力平台通过语音识别技术,实现实时转录医患对话,自动生成结构化数据,提高医疗效率。平台具备强大的环境降噪、语音分离及自然语言处理能力,支持与医院系统无缝集成,广泛应用于门诊记录、多学科会诊和急诊场景,显著提升工作效率和数据准确性。
智能语音交互技术:构建未来人机沟通新桥梁####
【10月更文挑战第28天】 本文深入探讨了智能语音交互技术的发展历程、当前主要技术框架、核心算法原理及其在多个领域的应用实例,旨在为读者提供一个关于该技术全面而深入的理解。通过分析其面临的挑战与未来发展趋势,本文还展望了智能语音交互技术如何继续推动人机交互方式的革新,以及它在未来社会中的潜在影响。 ####
477 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等