语音交互产品通过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."
}
}

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
4月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
128 1
|
5月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
311 7
Jmeter实现WebSocket协议的接口测试方法
|
4月前
|
消息中间件 网络协议 安全
C# 一分钟浅谈:WebSocket 协议应用
【10月更文挑战第6天】在过去的一年中,我参与了一个基于 WebSocket 的实时通信系统项目,该项目不仅提升了工作效率,还改善了用户体验。本文将分享在 C# 中应用 WebSocket 协议的经验和心得,包括基础概念、C# 实现示例、常见问题及解决方案等内容,希望能为广大开发者提供参考。
264 0
|
5月前
|
机器学习/深度学习 自然语言处理 网络协议
为什么ChatGPT采用SSE协议而不是WebSocket?
在探讨大型语言模型ChatGPT的技术实现时,一个引人注目的细节是其选择使用SSE(Server-Sent Events)协议而非WebSocket来实现数据的实时推送。这一选择背后,蕴含着对技术特性、应用场景及资源效率的深思熟虑。本文将深入探讨ChatGPT为何偏爱SSE,以及这一决策背后的技术逻辑。
473 3
|
6月前
|
Linux C++ Docker
【Azure 应用服务】App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)
【Azure 应用服务】App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)
|
7月前
|
前端开发 JavaScript API
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
【7月更文挑战第17天】现代Web开发趋势中,前后端分离配合WebSocket满足实时通信需求。Django Channels扩展了Django,支持WebSocket连接和异步功能。通过安装Channels、配置设置、定义路由和消费者,能在Django中实现WebSocket交互。前端使用WebSocket API连接后端,实现双向数据流,如在线聊天功能。集成Channels提升Web应用的实时性和用户体验,适应实时交互场景的需求。**
270 6
|
6月前
|
JavaScript 前端开发 网络协议
WebSocket在Java Spring Boot+Vue框架中实现消息推送功能
在现代Web应用中,实时消息提醒是一项非常重要的功能,能够极大地提升用户体验。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为实现实时消息提醒提供了高效且低延迟的解决方案。本文将详细介绍如何在Java Spring Boot后端和Vue前端框架中利用WebSocket实现消息提醒功能。
293 0
|
7月前
|
语音技术 开发者 Python
语音识别,python运行H ~W~,要使用英符,执行Python的流程是输入Python,回车,解释器的两大功能,翻译代码,提交计算机运算,多行代码运行,写一个py文件,pycharm安
语音识别,python运行H ~W~,要使用英符,执行Python的流程是输入Python,回车,解释器的两大功能,翻译代码,提交计算机运算,多行代码运行,写一个py文件,pycharm安
|
7月前
|
前端开发 网络协议 JavaScript
在Spring Boot中实现基于WebSocket的实时通信
在Spring Boot中实现基于WebSocket的实时通信
|
4月前
|
开发框架 前端开发 网络协议
Spring Boot结合Netty和WebSocket,实现后台向前端实时推送信息
【10月更文挑战第18天】 在现代互联网应用中,实时通信变得越来越重要。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为客户端和服务器之间的实时数据传输提供了一种高效的解决方案。Netty作为一个高性能、事件驱动的NIO框架,它基于Java NIO实现了异步和事件驱动的网络应用程序。Spring Boot是一个基于Spring框架的微服务开发框架,它提供了许多开箱即用的功能和简化配置的机制。本文将详细介绍如何使用Spring Boot集成Netty和WebSocket,实现后台向前端推送信息的功能。
1039 1

热门文章

最新文章