ummy一句话识别翻译ebocket大模型服务平台百炼odeltudio

本文介绍如何通过WebSocket连接访问Gummy一句话识别、翻译服务。

DashScope SDK目前仅支持Java和Python。若想使用其他编程语言开发Gummy实时语音识别、翻译应用程序,可以通过WebSocket连接与服务进行通信。

WebSocket是一种支持全双工通信的网络协议。客户端和服务器通过一次握手建立持久连接,双方可以互相主动推送数据,因此在实时性和效率方面具有显著优势。

对于常用编程语言,有许多现成的WebSocket库和示例可供参考,例如:

Go:gorilla/websocket

PHP:Ratchet

建议您先了解WebSocket的基本原理和技术细节,再参照本文进行开发。

音频时长不能超过一分钟,否则将报错断连。

模型名

模型简介

单价

gummy-chat-v1

0.00015元/秒

语音识别与翻译功能分别计费,费用按各自调用量独立计算。两项服务的单价一致。

建立连接:客户端与服务端建立WebSocket连接。

开启任务:

客户端发送run-task指令以开启任务。

客户端收到服务端返回的task-started事件,标志着任务已成功开启,可以进行后续步骤。

发送音频流:

客户端开始发送音频流,并同时接收服务端持续返回的result-generated事件,该事件包含语音识别结果。

通知服务端结束任务:

客户端发送finish-task指令通知服务端结束任务,并继续接收服务端返回的result-generated事件。

任务结束:

客户端收到服务端返回的task-finished事件,标志着任务结束。

关闭连接:客户端关闭WebSocket连接。

在编写WebSocket客户端代码时,为了同时发送和接收消息,通常采用异步编程。您可以按照以下步骤来编写程序:

建立WebSocket连接:首先,初始化并建立与服务器的WebSocket连接。

异步监听服务器消息:启动一个单独的线程(具体实现方式因编程语言而异)来监听服务器返回的消息,根据消息内容进行相应的操作。

发送消息:在不同于监听服务器消息的线程中(例如主线程,具体实现方式因编程语言而异),向服务器发送消息。

关闭连接:在程序结束前,确保关闭WebSocket连接以释放资源。

当然,编程思路不止这一种,您或许有更好的想法。本文主要介绍通过WebSocket连接访问服务时的鉴权细节及客户端与服务端之间的消息交互。由于篇幅有限,其他思路将不再赘述。

接下来将按照上述思路,为您详细说明。

调用WebSocket库函数(具体实现方式因编程语言或库函数而异),将请求头和URL传入以建立WebSocket连接。

请求头中需添加如下鉴权信息:

WebSocket URL固定如下:

如上所述,您可以启动一个线程(具体实现因编程语言而异)来监听服务器返回的消息。WebSocket库通常会提供回调函数(观察者模式)来处理这些消息。您可以在回调函数中根据不同的消息类型实现相应的功能。

服务端返回给客户端的消息叫做事件,事件代表不同的处理阶段,为JSON格式,由header和payload这两部分组成:

header:包含基础信息,格式较为统一。

除task-failed外,所有事件的header格式统一。

header示例:

header参数:

参数

类型

说明

header

object

请求头

string

事件类型

task-started

result-generated

task-finished

task-failed

详细说明参见下文。

string

客户端生成的task_id

payload:包含基础信息外的其他信息。不同事件的payload格式可能不同。

共有如下四种事件:

当监听到服务端返回的task-started事件时,标志着任务已成功开启。只有在接收到该事件后,才能向服务器发送待识别音频或finish-task指令;否则,任务将执行失败。

task-started事件的payload没有内容。

示例:

客户端发送待识别音频和finish-task指令的同时,服务端持续返回result-generated事件,该事件包含语音识别的结果。

可以通过result-generated事件中的sentence_end是否为True来判断该结果是中间结果还是最终结果。

示例:

当sentence_end=false时,为中间结果,在中间结果中,不保证识别和翻译进度同步,需要等待一句话结束(sentence_end=true)时同步。

payload参数说明:

参数

类型

说明

output

object

参数

类型

说明

sentence_id

integer

句子ID。

begin_time

integer

句子开始时间,单位为ms。

end_time

integer

句子结束时间,单位为ms。

text

string

识别文本。

words

array[Word]

字时间戳信息。

sentence_end

boolean

当前文本是否构成完整的句子。

true:当前文本构成完整句子,识别结果为最终结果。

false:当前文本未构成完整句子,识别结果可能会更新。

参数

类型

说明

sentence_id

integer

句子ID。

lang

string

翻译语种。

begin_time

integer

句子开始时间,单位为ms。

end_time

integer

句子结束时间,单位为ms。

text

string

识别文本。

words

array[Word]

字时间戳信息。

sentence_end

boolean

当前文本是否构成完整的句子。

true:当前文本构成完整句子,翻译结果为最终结果。

false:当前文本未构成完整句子,翻译结果可能会更新。

transcription或translations中的words为字时间戳信息,其中每一个word格式如下:

参数

类型

说明

begin_time

integer

字开始时间,单位为ms。

end_time

integer

字结束时间,单位为ms。

text

string

字。

当监听到服务端返回的task-finished事件时,说明任务已结束。此时可以关闭WebSocket连接并结束程序。

示例:

如果接收到task-failed事件,表示任务失败。此时需要关闭WebSocket连接并处理错误。通过分析报错信息,如果是由于编程问题导致的任务失败,您可以调整代码进行修正。

示例:

header参数说明:

参数

类型

说明

string

报错类型描述。

string

具体报错原因。

在与监听服务器消息不同的线程中(比如主线程,具体实现因编程语言而异),向服务器发送消息。

客户端发送给服务端的消息有两种:

音频流(须为单声道音频)。

指令:以Text Frame方式发送的JSON格式的数据,用于控制任务的起止和标识任务边界。

指令由header和payload这两部分组成:

header:包含基础信息,格式统一。

header示例:

header参数:

参数

类型

是否必选

说明

header

object

请求头

string

指令类型,可以选填

"run-task"

"finish-task"

用法参见下文。

string

当次任务ID,随机生成的32位唯一ID。

为32位通用唯一识别码(UUID),由32个随机生成的字母和数字组成。可以带横线(如 "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx")或不带横线(如 "2bf83b9abaeb4fda8d9axxxxxxxxxxxx")。大多数编程语言都内置了生成UUID的API,例如Python:

string

固定字符串:"duplex"

payload:包含基础信息外的其他信息。不同指令的payload格式可能不同。

向服务器发送消息需要遵循如下时序,否则会导致任务失败:首先发送run-task指令,待监听到服务器返回的task-started事件后,再发送待识别的音频流。在音频流发送结束后,发送finish-task指令。

该指令用于开启语音识别、翻译任务。task_id在后续发送finish-task指令时也需要使用,必须保持一致。

示例:

payload参数说明:

参数

类型

是否必选

说明

string

固定字符串:"audio"。

string

固定字符串:"asr"。

string

固定字符串:"recognition"。

string

object

固定格式:{}。

参数

类型

默认值

是否必须

说明

sample_rate

integer

设置待识别音频采样率(单位Hz)。只支持16000Hz。

format

string

设置待识别音频格式。

支持的音频格式:pcm、wav、mp3、opus、speex、aac、amr。

opus/speex:必须使用Ogg封装;

wav:必须为PCM编码;

amr:仅支持AMR-NB类型。

vocabulary_id

string

设置热词ID,若未设置则不生效。

source_language

string

auto

设置源(待识别/翻译语言)语言代码。如果无法提前确定语种,可不设置,默认为auto。

支持语音识别的语言代码:

zh:中文

en:英文

ja:日语

ko:韩语

yue:粤语

de:德语

fr:法语

ru:俄语

es:西班牙语

it:意大利语

pt:葡萄牙语

id:印尼语

ar:阿拉伯语

th:泰语

支持翻译的语言代码:

zh:中文

en:英文

ja:日语

ko:韩语

yue:粤语

de:德语

fr:法语

ru:俄语

es:西班牙语

it:意大利语

pt:葡萄牙语

id:印尼语

ar:阿拉伯语

th:泰语

hi:印地语

da:丹麦语

ur:乌尔都语

tr:土耳其语

nl:荷兰语

ms:马来语

vi:越南语

transcription_enabled

boolean

true

设置是否启用识别功能。

模型支持单独开启识别或翻译功能,也可同时启用两种功能,但至少需要开启其中一种能力。

语音识别与翻译功能分别计费,费用按各自调用量独立计算。两项服务的单价一致。

translation_enabled

boolean

false

设置是否启用翻译功能。要正常输出翻译结果,需配置translation_target_languages参数。

模型支持单独开启识别或翻译功能,也可同时启用两种功能,但至少需要开启其中一种能力。

translation_target_languages

array[string]

设置翻译目标语言代码。目标语言的代码与source_language参数一致。

目前支持的翻译包括:

中文(zh) → 英文(en)/日语(ja)/韩语(ko)/法语(fr)/德语(de)/西班牙语(es)/俄语(ru)/意大利语(it)

英文(en) → 中文(zh)/日语(ja)/韩语(ko)/葡萄牙语(pt)/法语(fr)/德语(de)/俄语(ru)/越南语(vi)/西班牙语(es)/荷兰语(nl)/丹麦语(da)/阿拉伯语(ar)/意大利语(it)/印地语(hi)/粤语(yue)/土耳其语(tr)/马来语(ms)/乌尔都语(ur)/印尼语(id)

日语(ja) → 泰语(th)/英文(en)/中文(zh)/越南语(vi)/法语(fr)/意大利语(it)/德语(de)/西班牙语(es)

韩语(ko) → 泰语(th)/英文(en)/中文(zh)/越南语(vi)/法语(fr)/西班牙语(es)/俄语(ru)/德语(de)

法语(fr) → 泰语(th)/英文(en)/日语(ja)/中文(zh)/越南语(vi)/德语(de)/意大利语(it)/西班牙语(es)/俄语(ru)/葡萄牙语(pt)

德语(de) → 泰语(th)/英文(en)/日语(ja)/中文(zh)/法语(fr)/越南语(vi)/俄语(ru)/西班牙语(es)/意大利语(it)/葡萄牙语(pt)

西班牙语(es) → 泰语(th)/英文(en)/日语(ja)/中文(zh)/法语(fr)/越南语(vi)/意大利语(it)/德语(de)/俄语(ru)/葡萄牙语(pt)

俄语(ru) → 泰语(th)/英文(en)/日语(ja)/中文(zh)/法语(fr)/越南语(vi)/德语(de)/西班牙语(es)/意大利语(it)/粤语(yue)/葡萄牙语(pt)

意大利语(it) → 泰语(th)/英文(en)/日语(ja)/中文(zh)/法语(fr)/越南语(vi)/西班牙语(es)/俄语(ru)/德语(de)

葡萄牙语(pt) → 英文(en)

印尼语(id) → 英文(en)

阿拉伯语(ar) → 英文(en)

泰语(th) → 日语(ja)/越南语(vi)/法语(fr)

印地语(hi) → 英文(en)

丹麦语(da) → 英文(en)

乌尔都语(ur) → 英文(en)

土耳其语(tr) → 英文(en)

荷兰语(nl) → 英文(en)

马来语(ms) → 英文(en)

越南语(vi) → 日语(ja)/法语(fr)

粤语(yue) → 中文(zh)/英文(en)

目前暂不支持同时翻译为多种语言,请仅设置一个目标语言以完成翻译。

max_end_silence

integer

700

设置最大结束静音时长,单位为毫秒(ms),取值范围为200ms至6000ms。

若语音结束后静音时长超过该预设值,系统将判定当前语句已结束。

客户端需在收到task-started事件后,再发送待识别的音频流。

可以发送实时音频流(比如从话筒中实时获取到的)或者录音文件音频流,音频应是单声道。

音频通过WebSocket的二进制通道上传。建议每次发送100ms的音频,并间隔100ms。

该指令用于结束语音识别任务。音频发送完毕后,客户端可以发送此指令以结束任务。

示例:

payload参数说明:

参数

类型

是否必选

说明

object

固定格式:{}。

在程序正常结束、运行中出现异常或接收到task-finished、task-failed事件时,关闭WebSocket连接。通常通过调用工具库中的close函数来实现。

WebSocket服务支持连接复用以提升资源的利用效率,避免建立连接开销。

当服务收到 run-task 指令后,将启动一个新的任务,并在任务完成时下发 task-finished 指令以结束该任务。结束任务后webSocket连接可以被复用,发送run-task指令开启下一个任务。

在复用连接中的不同任务需要使用不同 task_id。

如果在任务执行过程中发生失败,服务将依然下发 task-failed 指令,并关闭该连接。此时这个连接无法继续复用。

如果在任务结束后60秒没有新的任务,连接会超时自动断开。

语音服务选择 WebSocket 而非 HTTP/HTTPS/RESTful,根本在于其依赖全双工通信能力——WebSocket 允许服务端与客户端主动双向传输数据(如实时推送语音合成/识别进度),而基于 HTTP 的 RESTful 仅支持客户端发起的单向请求-响应模式,无法满足实时交互需求。

需将参数translation_enabled设置为true。

需通过参数translation_target_languages指定翻译目标语言。注意,该参数类型为数组而非字符串。

关注阿里云公众号或下载阿里云APP,关注云资讯,随时随地运维管控云服务

THE END
0.用意大利语表达爱意的三句话,学起来!难度:初级,属于👉 100天意大利语强化营 👈 意大利语表达爱意的三句话 (语音在正文下方) (1)Ti amo. 我爱你 amo:动词原形:amare,表示‘爱’ (2)Ho una cotta per te. 我深深地迷恋你! cotta:名词,烧→热恋 (3)Le parole non possono jvzquC41o0ypj~3eqo5b1=9653>76=d876=9;
1.学英语句子的软件APP推荐学英语句子的软件下载【40多个语种】包含英语、日语、韩语、法语、意大利语、西班牙语等流行语言,还有夏威夷语、威尔士语等小众和濒危语言,甚至有《权力的游戏》中的龙语哦。 【游戏化学习】零基础入门,将生活场景分成单元学习,旅行、点菜、聊天、面试忘掉那些枯燥乏味的死记硬背吧,用游戏闯关的方法,有宝石、红心、王冠,有可可爱爱jvzquC41yy}/yjsfqwpjc7hqo1hbppicp1;67=6:1
2.法国作家福楼拜的经典名言语录(中国现代作家名言,著名作家名言)4a href='#现代文学作家经典语句,作家经典句 >现代文学作家经典语句,作家经典句/a> 9a href='#金句名言短句100条作者,作文金句名人名言' >金句名言短句100条作者,作文金句名人名言 她想学意大利语,买了一些字典、一本语法书和一堆白纸。她试图阅读严肃的书历史和哲学。查理晚上睡得jvzquC41yy}/3>;80et0o‚rl14:95?3jvor
3.黑龙江:2007年公务员考试《行测》真题A卷A.125 B.100 C.160 D.121 3.23,12,25,13,27,( ) A.14 B.16 C.211 D.29 对比较复杂的概念和观点的准确理解;对语句隐含信息的合理推断;根据上下文,恰当选用词语;准确地辨明句义汉语已成为继英语之后的第二大外语,“汉语热”直追“英语热”;在澳大利亚,汉语已经超过意大利语,成为jvzq<84yyy4zwutq0eun1wjyu16:2@449;>:27xjvor
4.生活西班牙100玩陈非西班牙人个个都是语言天才,除了本国几种地区语言(加泰罗尼亚语、瓦伦西亚语、巴斯克语、加利西亚语、奥克语、阿拉贡语和阿斯图里亚斯语),说法语、意大利语、葡萄牙语、英语、德语与俄语中的两到三种的比比皆是。他们现在也会一两句中文:你好、谢谢、不客气、小票不要。 jvzquC41yy}/pn|ggmrz0lto0et0c{ykenk0uqu252889=698
5.100句超地道的英语口语,收藏起来慢慢学(视频跟读)1. Julia's native language is Italian. 朱莉娅的母语是意大利语。 2. You'd better go to see your family doctor at once. 你最好马上去看家庭医生。 3. I didn't like it. 我不喜欢它。 4. You must observe the rules of the club. 你必须遵守俱乐部的规则。 jvzq<84yyy4489iqe0ipo8hqpvkov8771282:8721:;48?:6;a726@59:3>50|mvon
6.西班牙语怎么发音西班牙语疑问句不用助动词,全靠语调。比如"¿Cómo estás?"(你好吗?),"cómo"升调,"estás"降调,像中文的"你~好~吗?" 六、最容易闹笑话的5个发音误区(附正确示范) 1."¿Qué tal?"不是"柯达?" 正确:"ke tal"("qué"的"q"永远发"k","e"发"欸") jvzquC41o0wjpzg58;/exr1z{€{z8Xrcpotjhqcpi{bin46:6>267mvon
7.怎么快速学习意大利语设定小目标:“学会点餐”“学会问路”“看懂菜单”,每完成一个就奖励自己(比如吃一顿意大利餐,用刚学的句子和服务员对话)。我第一次在意大利餐厅用意大利语点单时,服务员笑着说“Bravo!”(真棒),那种成就感比背100个单词还爽。 其实学语言没有“捷径”,但有“高效的路”:抓准发音、语法、词汇的核心,用场景jvzquC41yy}/srszwg9777hqo1~z|ƒ}1Kvgmkjs164735<3jvor
8.意大利语托运怎么说3. 应急句:听不懂时,这3句能救急 “Mi scuso, non parlo bene l'italiano, posso usare l'inglese?”(抱歉,我意大利语不太好,能用英语吗?)(别不好意思,意大利人英语普遍还行,尤其服务业) “Puoi ripetere più lentamente?”(能说慢一点吗?)(地勤语速快到飞起,这句一定要敢说!) “GjvzquC41yy}/srszwg9777hqo1~z|ƒ}1Kvgmkjs172639A3jvor
9.自然语言处理入门第1章:语言语法和语义在西欧地区的一些语言中(比如英语、法语、意大利语),组成句子的最小单位是词汇。词汇与词汇之间,必须用空格分隔开来,单个的字符(也就是字母)往往没有很大的语义信息。而组成中文的最小元素是汉字,由汉字组成词汇,再通过词汇组成一个完整的句子。因此,在亚洲这些地方的语言(汉语、日语、韩语、泰语等)中,词汇与词汇jvzquC41dnuh0lxfp0tfv8|gkzooa>:232;758ftvkimg8igvcomu86678:68A5
10.泰语关于购物的对话四、避免踩坑!购物时必须会的“问题询问句” 1. 问材质(防止买到“泰版假货”) “这是纯棉的吗?”(นี่ผ้า棉衣100%ไหม卡?) “这个银饰是真银吗?”(อัญมณีเงิน这个银饰เป็นเงินแท้真银ไหม卡?) jvzquC41o0wjpzg58;/exr1z{€{z8Yjck524<9:0jznn
11.英语:怎么学?怎么教?自认为“语言天赋”一般,20岁到西班牙工作半年后仍然不会西班牙语,后来决心要让自己完全“浸泡”在西班牙语环境中,并在几个月后学会了西班牙语,这也是他学会的第一门外语,此后便一发而不可收。目前,已经能够流利说七种语言(英语、西班牙语、法语、德语、意大利语、葡萄牙语、世界语),还能够在对话中说中文普通话、jvzquC41yy}/fxzdcp4dqv4pqvk0:>7347:358