本文介绍Gummy实时语音识别和翻译Python SDK的参数和接口细节。
用户指南:关于模型介绍和选型建议请参见实时语音识别和实时语音翻译。
在线体验:模型体验
前提条件
已开通服务并获得API-KEY:获取API Key。建议您配置API Key到环境变量,从而避免在代码里显示配置API Key,降低泄漏风险。
已安装最新版DashScope SDK:安装SDK。
模型列表
模型名 | 模型简介 |
gummy-realtime-v1 | Gummy实时语音识别、翻译模型。默认进行标点符号预测和逆文本正则化(INT,Inverse Text Normalization)。支持定制热词。 模型使用VAD(Voice Activity Detection)断句。 |
快速开始
TranslationRecognizerRealtime类提供了语音识别/翻译的关键接口,支持以下几种调用方式:
流式调用:可直接对音频流进行识别或翻译,并实时输出结果。音频流可以来自外部设备(如麦克风)或从本地文件读取。适合需要即时反馈的场景。
同步调用:针对本地文件进行识别或翻译,并一次性返回完整的处理结果。适合处理录制好的音频。
流式调用
通过实现回调接口,实时流式输出识别结果。
启动流式语音识别/翻译
实例化TranslationRecognizerRealtime类绑定请求参数和回调接口(TranslationRecognizerCallback),调用
start
方法启动流式语音识别/翻译。流式传输
循环调用TranslationRecognizerRealtime类的
send_audio_frame
方法,将从本地文件或设备(如麦克风)读取的二进制音频流分段发送至服务端。在发送音频数据的过程中,服务端会通过回调接口(TranslationRecognizerCallback)的
on_event
方法,将识别结果实时返回给客户端。建议每次发送的音频时长约为100毫秒,数据大小保持在1KB至16KB之间。
结束处理
调用TranslationRecognizerRealtime类的
stop
方法结束语音识别/翻译。该方法会阻塞当前线程,直到回调接口(TranslationRecognizerCallback)的
on_complete
或者on_error
回调触发后才会释放线程阻塞。
同步调用
通过传入本地文件路径,以同步阻塞方式获取识别或翻译结果。
实例化TranslationRecognizerRealtime类绑定请求参数,调用call
进行识别/翻译并最终获取同步调用结果(TranslationRecognizerResultPack)。
请求参数
语音识别需要设置模型、采样率、音频格式等参数,这些参数通过TranslationRecognizerRealtime类的构造方法(_init_)进行设置。
参数 | 类型 | 默认值 | 是否必须 | 说明 |
model | str | - | 是 | 指定实时语音识别的模型。如需了解当前支持的模型,请参见模型列表。 |
sample_rate | int | - | 是 | 设置待识别音频采样率(单位Hz)。支持16000Hz及以上采样率。 |
format | str | - | 是 | 设置待识别音频格式。 支持的音频格式:pcm、wav、mp3、opus、speex、aac、amr。 重要 opus/speex:必须使用Ogg封装; wav:必须为PCM编码; amr:仅支持AMR-NB类型。 |
vocabulary_id | str | - | 否 | 设置热词ID,若未设置则不生效。 在本次语音识别中,将应用与该热词ID对应的热词信息。具体使用方法请参见定制热词。 |
source_language | str | auto | 否 | 设置源语言(待识别/翻译语言)代码。如果无法提前确定语种,可不设置,默认为 目前支持的语言代码:
|
transcription_enabled | bool | True | 否 | 设置是否启用识别功能。 模型支持单独开启识别或翻译功能,也可同时启用两种功能,但至少需要开启其中一种能力。 |
translation_enabled | bool | False | 否 | 设置是否启用翻译功能。要正常输出翻译结果,需配置 模型支持单独开启识别或翻译功能,也可同时启用两种功能,但至少需要开启其中一种能力。 |
translation_target_languages | list[str] | - | 否 | 设置翻译目标语言代码。目标语言的代码与 目前支持的翻译包括: 中->英,中->日,中->韩, 英->中,英->日,英->韩, (日、韩、粤、德、法、俄、意、西)->(中、英)。 重要 目前暂不支持同时翻译为多种语言,请仅设置一个目标语言以完成翻译。 |
max_end_silence | int | 800 | 否 | 设置VAD(Voice Activity Detection,语音活动检测)断句的静音时长阈值(单位为ms)。 当一段语音后的静音时长超过该阈值时,系统会判定该句子已结束。 参数范围为200ms至6000ms,默认值为800ms。 |
关键接口
TranslationRecognizerRealtime
类
TranslationRecognizerRealtime
通过“from dashscope.audio.asr import *
”方式引入,提供语音识别/翻译的关键接口。
成员方法 | 方法签名 | 说明 |
start |
| 启动流式语音识别/翻译。
适合需要即时反馈的场景。 详细的调用流程和参考示例请参见流式调用。 |
send_audio_frame |
| 推送音频,每次推送的音频流不宜过大或过小,建议每包音频时长为100ms左右,大小在1KB~16KB之间。 识别/翻译结果通过回调接口(TranslationRecognizerCallback)的
适合需要即时反馈的场景。 详细的调用流程和参考示例请参见流式调用。 |
stop |
| 结束流式语音识别/翻译。 该方法会阻塞当前线程,直至回调接口(TranslationRecognizerCallback)的
适合需要即时反馈的场景。 详细的调用流程和参考示例请参见流式调用。 |
call |
| 基于本地文件的同步调用,该方法最终返回同步调用结果(TranslationRecognizerResultPack)。要求待识别文件具有可读权限。 适合处理录制好的音频。 详细的调用流程和参考示例请参见同步调用。 |
回调接口(TranslationRecognizerCallback
)
TranslationRecognizerCallback
通过“from dashscope.audio.asr import *
”方式引入。
使用流式调用模式时,服务端会通过回调的方式,将关键流程信息和数据返回给客户端。您需要实现回调方法,处理服务端返回的信息或者数据。
方法 | 参数 | 返回值 | 描述 |
| 无 | 无 | 当和服务端建立连接完成后,该方法立刻被回调。 |
|
| 无 | 当服务有回复时会被回调。 |
| 无 | 无 | 当所有数据全部返回后进行回调。 |
|
| 无 | 发生异常时该方法被回调。 |
| 无 | 无 | 当服务已经关闭连接后进行回调。 |
响应结果
识别结果(TranscriptionResult
)
TranscriptionResult
封装了识别结果,包含时间戳、文本信息以及文本是否构成完整句子等信息。
由于语言间的词汇差异,识别和翻译的中间结果可能不会同时返回,因此某些情况下结果可能仅包含识别或翻译的部分。识别与翻译的进度会在is_sentence_end
为True
时同步完成。
成员变量 | 类型 | 说明 |
sentence_id | Int | 句子ID。 |
begin_time | Long | 句子开始时间,单位为ms。 |
end_time | Long | 句子结束时间,单位为ms。 |
text | String | 识别文本。 |
words | List<Word> | 字时间戳信息。
|
is_sentence_end | Bool | 当前文本是否构成完整的句子。
|
翻译结果(TranslationResult
)
TranslationResult
封装了翻译结果,包含请求参数translation_target_languages
对应的所有语种的翻译结果。
由于语言间的词汇差异,识别和翻译的中间结果可能不会同时返回,因此某些情况下结果可能仅包含识别或翻译的部分。识别与翻译的进度会在is_sentence_end
为True
时同步完成。
成员方法 | 方法签名 | 说明 |
get_language_list |
| 返回翻译结果中的所有语种列表。 |
get_translation |
| 输入语种,返回该语种的翻译结果。 方法参数 |
成员变量 | 类型 | 说明 |
is_sentence_end | Bool | 当前文本是否构成完整的句子。
|
某语种对应的翻译结果(Translation
)
Translation
代表翻译结果中一种语言的结果,包含时间戳、文本信息以及文本是否构成完整句子等信息。
成员变量 | 类型 | 说明 |
sentence_id | Int | 句子ID。 |
language | String | 翻译语种。 |
begin_time | Long | 句子开始时间,单位为ms。 |
end_time | Long | 句子结束时间,单位为ms。 |
text | String | 识别文本。 |
words | List<Word> | 字时间戳信息。
|
is_sentence_end | Bool | 当前文本是否构成完整的句子。
|
字时间戳信息(Word
)
参数 | 类型 | 说明 |
beginTime | long | 字开始时间,单位为ms。 |
endTime | long | 字结束时间,单位为ms。 |
text | String | 字。 |
同步调用结果(TranslationRecognizerResultPack
)
在同步调用中,返回结果会将流式结果中所有成句(is_sentence_end
为true)的结果打包到列表中返回。
参数 | 类型 | 说明 |
request_id | String | requestId 为本次任务的请求ID。 |
transcription_result_list | List[TranscriptionResult] | |
translation_result_list | List[TranslationResult] | |
usage_list | List[] | 计费信息。 |
error_message | String | 如果没有错误则为None,否则为错误信息。 |
错误码
如遇报错问题,请参见错误信息进行排查。
若问题仍未解决,请加入开发者群反馈遇到的问题,并提供Request ID,以便进一步排查问题。
更多示例
更多示例,请参见GitHub。
常见问题
故障排查
如遇代码报错问题,请根据错误信息进行排查。
Q:为什么没有输出翻译结果?
请求参数配置要正确。
需将参数
translation_enabled
设置为True
。需通过参数
translation_target_languages
指定翻译目标语言。注意,该参数类型为列表而非字符串。
获取翻译结果(TranslationResult)时,方法
get_translation
的入参要和翻译目标语言(即参数translation_target_languages
的值)相匹配。比如
translation_target_languages
为["en"]
,却get_translation("zh")
就无法获取翻译结果。
更多问题
请参见GitHub QA。