本文介绍SenseVoice录音文件识别Python API的使用。
前提条件
已开通服务并获取API Key。请配置API Key到环境变量,而非硬编码在代码中,防范因代码泄露导致的安全风险。
模型列表
模型名 | 模型简介 |
sensevoice-v1 | 语音识别大模型,支持50多种语言的识别,具备情感分析和音频事件检测功能,并默认提供标点符号预测及逆文本正则化(ITN)能力。 |
约束
服务不支持本地音/视频文件直传,输入源需为可通过公网访问的文件URL(支持HTTP/HTTPS协议,示例:https://your-domain.com/file.mp3
)。URL通过file_urls
参数指定,单次请求最多支持100个URL。
音频格式
aac
、amr
、avi
、flac
、flv
、m4a
、mkv
、mov
、mp3
、mp4
、mpeg
、ogg
、opus
、wav
、webm
、wma
、wmv
重要由于音/视频格式及其变种众多,技术上无法穷尽测试,API不能保证所有格式均能够被正确识别。请通过测试验证您所提供的文件能够获得正常的语音识别结果。
音频文件大小和时长
音频文件不超过2GB;无时长限制。
如果希望处理的文件超过了上述限制,可尝试对文件进行预处理以降低文件尺寸。有关文件预处理的最佳实践可以查阅预处理视频文件以提高文件转写效率。
批处理音频数目
单次请求最多支持100个文件URL。
可识别语言
详情请参见语言列表。
重要SenseVoice每次只支持识别一种语言,请勿在
language_hints
参数中指定多个语言代码。
调用模式
核心类(Transcription)提供了异步提交任务、同步等待任务结束和异步查询任务执行结果的接口。可通过如下两种调用模式进行录音文件识别:
异步提交任务+同步等待任务结束:提交任务后,阻塞当前线程直到任务结束并获取识别结果。
异步提交任务+异步查询任务执行结果:提交任务后,在需要的时候通过调用查询任务接口获取任务的执行结果。
异步提交任务+同步等待任务结束
调用核心类(Transcription)的
async_call
方法并设置请求参数。说明语音识别服务对通过API提交的任务采取尽力服务原则进行处理。任务提交后将进入排队(
PENDING
)状态,排队时间取决于队列长度和文件时长,无法明确给出,通常在数分钟内。任务开始处理后,语音识别将以数百倍加速完成。每一个任务完成后,识别结果和URL下载链接有效期为24小时,超时后无法获取任务状态或通过原有URL下载结果。
调用核心类(Transcription)的
wait
方法同步等待任务结束。任务的状态包括
PENDING
、RUNNING
、SUCCEEDED
和FAILED
。当任务处于PENDING
或RUNNING
状态时,wait
方法将被阻塞。当任务处于SUCCEEDED
或FAILED
状态时,wait
方法不再阻塞并返回任务的执行结果。wait
方法返回TranscriptionResponse。
异步提交任务+异步查询任务执行结果
调用核心类(Transcription)的
async_call
方法并设置请求参数。说明语音识别服务对通过API提交的任务采取尽力服务原则进行处理。任务提交后将进入排队(
PENDING
)状态,排队时间取决于队列长度和文件时长,无法明确给出,通常在数分钟内。任务开始处理后,语音识别将以数百倍加速完成。每一个任务完成后,识别结果和URL下载链接有效期为24小时,超时后无法获取任务状态或通过原有URL下载结果。
循环调用核心类(Transcription)的
fetch
方法同步等待任务结束。当任务状态为
SUCCEEDED
或FAILED
时,停止轮询并处理结果。fetch
方法返回TranscriptionResponse。
请求参数
请求参数通过核心类(Transcription)的async_call
方法进行设置。
参数 | 类型 | 默认值 | 是否必须 | 说明 |
model | str | - | 是 | 指定模型名。固定为 |
file_urls | list[str] | - | 是 | 待识别音/视频文件的URL列表,支持HTTP / HTTPS协议,单次请求最多支持100个URL。 |
channel_id | list[int] | [0] | 否 | 指定在多音轨文件中需要进行语音识别的音轨索引,以List的形式给出,例如 |
disfluency_removal_enabled | bool | False | 否 | 过滤语气词,默认关闭。 |
language_hints | list[str] | ["auto"] | 否 | 指定识别语音中语言代码。SenseVoice只支持配置一个语种。默认使用“auto”自动检测语种。支持的语言代码请参见语言列表。 |
响应结果
TranscriptionResponse
TranscriptionResponse
封装了任务的基本信息(task_id
和task_status
)和执行结果(output
属性对应的内容,参见TranscriptionOutput)。
需要关注的参数如下:
参数 | 说明 |
status_code | HTTP请求状态码。 |
code |
|
message |
|
task_id | 任务ID。 |
task_status | 任务状态。 有 当任务包含多个子任务时,只要存在任一子任务成功,整个任务状态将标记为 |
results | 子任务识别结果。 |
subtask_status | 子任务状态。 有 |
file_url | 被识别音频的URL。 |
transcription_url | 音频识别结果对应的URL。 识别结果保存为JSON文件,您可以通过 |
TranscriptionOutput
TranscriptionOutput
对应TranscriptionResponse的output
属性,代表当前任务执行结果。
需要关注的参数如下:
参数 | 说明 |
code | 代表错误码。可以结合 |
message | 代表错误信息。可以结合 |
task_id | 任务ID。 |
task_status | 任务状态。 有 当任务包含多个子任务时,只要存在任一子任务成功,整个任务状态将标记为 |
results | 子任务识别结果。 |
subtask_status | 子任务状态。 有 |
file_url | 被识别音频的URL。 |
transcription_url | 音频识别结果对应的URL。 识别结果保存为JSON文件,您可以通过 |
识别结果说明
识别结果保存为JSON文件。
需要关注的参数如下:
参数 | 类型 | 说明 |
audio_format | string | 源文件中音频的格式。 |
channels | array[integer] | 源文件中音频的音轨索引信息,对单轨音频返回[0],对双轨音频返回[0, 1],以此类推。 |
original_sampling_rate | integer | 源文件中音频的采样率(Hz)。 |
original_duration_in_milliseconds | integer | 源文件中的原始音频时长(ms)。 |
channel_id | integer | 识别结果的音轨索引,以0为起始。 |
content_duration_in_milliseconds | integer | 音轨中被判定为语音内容的时长(ms)。 重要 SenseVoice服务根据音频中AI识别出的有效语音时长计费,非语音段落(如静默、背景音)不计费。由于技术限制,系统判定的语音时段可能与实际存在细微差异,计费结果以服务端数据为准。 |
transcript | string | 段落级别的语音识别结果。 |
sentences | array | 句子级别的语音识别结果。 |
begin_time | integer | 开始时间戳(ms)。 |
end_time | integer | 结束时间戳(ms)。 |
text | string | 语音识别结果。 说明
|
关键接口
核心类(Transcription
)
Transcription
可以通过“from dashscope.audio.asr import Transcription
”方式引入。
成员方法 | 方法签名 | 说明 |
async_call |
| 异步提交语音识别任务。 |
wait |
| 阻塞当前线程直到异步任务结束(任务状态为 该方法返回TranscriptionResponse。 |
fetch |
| 异步查询当前任务执行结果。 该方法返回TranscriptionResponse。 |
错误码
错误代码 Code | 错误信息Message(具体信息内容可能跟随场景有所变化) | 含义说明 |
InvalidFile.DecodeFailed | The audio file cannot be decoded. | 无法解码文件。请检查文件编码是否正确,并确认文件为正确的音频格式。 |
更多百炼平台相关错误码请参见错误信息。
更多示例
更多示例,请参见GitHub。
常见问题
请参见GitHub QA。
语言列表
Sensevoice支持如下50多种语言,其中top10为重点支持语言。可通过查询下表获取语言代码并配置language_hints
参数以获得更佳的效果,默认支持中文和英文。
语言 | 语言代码 | |
重点语言 | 中文(Chinese) | zh |
英文(English) | en | |
粤语(Cantonese) | yue | |
日语(Japanese) | ja | |
韩语(Korean) | ko | |
俄语(Russian) | ru | |
法语(French) | fr | |
意大利语(Italian) | it | |
德语(German) | de | |
西班牙语(Spanish) | es | |
更多语言 | 加泰罗尼亚语(Catalan) | ca |
印度尼西亚语(Indonesian) | id | |
泰语(Thai) | th | |
荷兰语(Dutch) | nl | |
葡萄牙语(Portuguese) | pt | |
捷克语(Czech) | cs | |
波兰语(Polish) | pl | |
希腊语(Greek) | el | |
马来语(Malay) | ms | |
塔加洛语(Tagalog) | tl | |
保加利亚语(Bulgarian) | bg | |
克罗地亚语(Croatian) | hr | |
丹麦语(Danish) | da | |
土耳其语(Turkish) | tr | |
越南语(Vietnamese) | vi | |
希伯来语(Hebrew ) | he | |
匈牙利语(Hungarian) | hu | |
乌克兰语(Ukrainian) | uk | |
爪哇语(Javanese) | jw | |
乌兹别克语(Uzbek) | uz | |
挪威(Norwegian) | no | |
罗马尼亚(Romanian) | ro | |
瑞典语(Swedish) | sv | |
波斯语(Persian) | fa | |
泰米尔语(Tamil) | ta | |
阿塞拜疆语(Azerbaijani) | az | |
孟加拉语(Bengali) | bn | |
缅甸语(Myanmar) | my | |
高棉语(Khmer ) | km | |
印地语(Hindi) | hi | |
卡纳达语(Kannada ) | kn | |
老挝语(Lao) | lo | |
马拉雅拉姆语(Malayalam) | ml | |
马拉地语(Marathi) | mr | |
蒙古语(Mongolian) | mn | |
尼泊尔语(Nepali) | ne | |
旁遮普语(Punjabi ) | pa | |
僧伽罗语(Sinhala) | si | |
斯瓦希里语(Swahili) | sw | |
泰卢固语(Telugu) | te | |
乌尔都语(Urdu) | ur | |
豪萨语(Hausa) | ha |