本文介绍Paraformer录音文件识别Java API的使用。
前提条件
已开通服务并获取API Key。请配置API Key到环境变量,而非硬编码在代码中,防范因代码泄露导致的安全风险。
模型列表
模型名 | 模型简介 |
模型名 | 模型简介 |
paraformer-v2 | 推荐使用。Paraformer最新多语种语音识别模型。
|
paraformer-8k-v2 | 推荐使用。Paraformer最新中文语音识别模型,模型结构升级,具有更好的识别效果。
|
paraformer-v1 | Paraformer中英文语音识别模型。
|
paraformer-8k-v1 | Paraformer中文语音识别模型。
|
paraformer-mtl-v1 | Paraformer多语言语音识别模型。
|
约束
服务不支持本地音视频文件直传,输入源需为可通过公网访问的文件URL(支持HTTP/HTTPS协议,示例:https://your-domain.com/file.mp3
)。URL通过fileUrls
参数指定,单次请求最多支持100个URL。
音频格式
aac
、amr
、avi
、flac
、flv
、m4a
、mkv
、mov
、mp3
、mp4
、mpeg
、ogg
、opus
、wav
、webm
、wma
、wmv
由于音视频格式及其变种众多,技术上无法穷尽测试,API不能保证所有格式均能够被正确识别。请通过测试验证您所提供的文件能够获得正常的语音识别结果。
音频采样率
采样率因模型而异:
paraformer-v2 支持任意采样率
paraformer-v1 支持任意采样率
paraformer-8k-v2 仅支持8kHz采样率
paraformer-8k-v1 仅支持8kHz采样率
paraformer-mtl-v1 支持16kHz及以上采样率
音频文件大小和时长
音频文件不超过2GB;时长在12小时以内。
如果希望处理的文件超过了上述限制,可尝试对文件进行预处理以降低文件尺寸。有关文件预处理的最佳实践可以查阅预处理视频文件以提高文件转写效率。
批处理音频数目
单次请求最多支持100个文件URL。
可识别语言
因模型而异:
paraformer-v2:
中文,包含中文普通话和各种方言:上海话、吴语、闽南语、东北话、甘肃话、贵州话、河南话、湖北话、湖南话、江西话、宁夏话、山西话、陕西话、山东话、四川话、天津话、云南话、粤语
英文
日语
韩语
paraformer-8k-v2 仅支持中文
paraformer-v1 仅支持中英文
paraformer-8k-v1 仅支持中文
paraformer-mtl-v1:中文普通话、中文方言(粤语、吴语、闽南语、东北话、甘肃话、贵州话、河南话、湖北话、湖南话、宁夏话、山西话、陕西话、山东话、四川话、天津话)、英语、日语、韩语、西班牙语、印尼语、法语、德语、意大利语、马来语。
快速开始
核心类(Transcription)提供了异步提交任务、同步等待任务结束和异步查询任务执行结果的接口。可通过如下两种调用方式进行录音文件识别:
异步提交任务+同步等待任务结束:提交任务后,阻塞当前线程直到任务结束并获取识别结果。
异步提交任务+异步查询任务执行结果:提交任务后,在需要的时候通过调用查询任务接口获取任务的执行结果。
异步提交任务+同步等待任务结束
配置请求参数。
调用核心类(Transcription)的
asyncCall
方法异步提交任务。文件转写服务对通过API提交的任务采取尽力服务原则进行处理。任务提交后将进入排队(
PENDING
)状态,排队时间取决于队列长度和文件时长,无法明确给出,通常在数分钟内。任务开始处理后,语音识别将以数百倍加速完成。每一个任务完成后,识别结果和URL下载链接有效期为24小时,超时后无法查询任务或通过先前查询结果中的URL下载结果。
调用核心类(Transcription)的
wait
方法同步等待任务结束。任务的状态包括
PENDING
、RUNNING
、SUCCEEDED
和FAILED
。当任务处于PENDING
或RUNNING
状态时,wait
接口将被阻塞。当任务处于SUCCEEDED
或FAILED
状态时,wait
接口不再阻塞并返回任务的执行结果。wait
返回任务执行结果(TranscriptionResult)。
异步提交任务+异步查询任务执行结果
配置请求参数。
调用核心类(Transcription)的
asyncCall
方法异步提交任务。文件转写服务对通过API提交的任务采取尽力服务原则进行处理。任务提交后将进入排队(
PENDING
)状态,排队时间取决于队列长度和文件时长,无法明确给出,通常在数分钟内。任务开始处理后,语音识别将以数百倍加速完成。每一个任务完成后,识别结果和URL下载链接有效期为24小时,超时后无法查询任务或通过先前查询结果中的URL下载结果。
循环调用核心类(Transcription)的
fetch
方法直到获取最终的任务结果。当任务状态为
SUCCEEDED
或FAILED
时,停止轮询并处理结果。fetch
返回任务执行结果(TranscriptionResult)。
请求参数
请求参数通过TranscriptionParam
的链式方法进行配置。
参数 | 类型 | 默认值 | 是否必须 | 说明 |
参数 | 类型 | 默认值 | 是否必须 | 说明 |
model | String | - | 是 | 指定用于音视频文件转写的Paraformer模型名。参见模型列表。 |
fileUrls | List<String> | - | 是 | 音视频文件转写的URL列表,支持HTTP / HTTPS协议,单次请求最多支持100个URL。 |
vocabularyId | String | - | 否 | 最新热词ID,支持最新v2系列模型并配置语种信息,此次语音识别中生效此热词ID对应的热词信息。默认不启用。使用方法请参考定制热词。 |
phraseId | String | - | 否 | 热词ID,此次语音识别中生效此热词ID对应的热词信息。默认不启用。 注: |
channelId | List<Integer> | [0] | 否 | 指定在多音轨文件中需要进行语音识别的音轨索引,以List的形式给出,例如 |
disfluencyRemovalEnabled | Boolean | false | 否 | 过滤语气词,默认关闭。 |
timestampAlignmentEnabled | Boolean | false | 否 | 是否启用时间戳校准功能,默认关闭。 |
specialWordFilter | String | - | 否 | 敏感词过滤功能,支持开启或关闭,支持自定义敏感词。该参数可实现: 不处理(默认,即展示原文)、过滤、替换为*。 开启但未配置敏感词,则会过滤默认词表:敏感词表。 |
language_hints | String[] | ["zh", "en"] | 否 | 指定待识别语音的语言代码。 该参数仅适用于paraformer-v2模型。 支持的语言代码:
通过parameter设置 通过parameters设置
|
diarizationEnabled | Boolean | false | 否 | 自动说话人分离,默认关闭。 仅适用于单声道音频,多声道音频不支持说话人分离。 启用该功能后,识别结果中将显示 有关 |
speakerCount | Integer | - | 否 | 说话人数量参考值。取值范围为2至100的整数(包含2和100)。 开启说话人分离功能后( 默认自动判断说话人数量,如果配置此项,只能辅助算法尽量输出指定人数,无法保证一定会输出此人数。 |
apiKey | String | - | 否 | 用户API Key。如已将API Key配置到环境变量,则无须在代码中设置。否则一定要在代码中进行设置。 |
响应结果
任务执行结果(TranscriptionResult
)
TranscriptionResult
封装了当前任务执行结果。
接口/方法 | 参数 | 返回值 | 描述 |
接口/方法 | 参数 | 返回值 | 描述 |
| 无 | requestId | 获取requestId。 |
| 无 | taskId | 获取taskId。 |
| 无 |
| 获取任务状态。
当任务包含多个子任务时,只要存在任一子任务成功,整个任务状态将标记为 |
| 无 | 获取子任务执行结果(TranscriptionTaskResult)。 每个任务对一个或多个音频文件进行识别,不同音频文件在不同的子任务中处理,因此每个任务对应一到多个子任务。 | |
| 无 | 任务执行结果,为JSON格式的数据 | 获取任务执行结果。 该结果是一个JSON格式的数据,如果您想通过 |
子任务执行结果(TranscriptionTaskResult
)
TranscriptionTaskResult
封装了子任务执行结果。子任务对单个音频文件进行识别。
接口/方法 | 参数 | 返回值 | 描述 |
接口/方法 | 参数 | 返回值 | 描述 |
| 无 | 被识别的音频文件的链接 | 获取被识别音频文件的链接。 |
| 无 | 识别结果对应的链接 | 获取识别结果对应的链接。该链接有效期为24小时,超时后无法查询任务或通过先前查询结果中的URL下载结果。 识别结果保存为JSON文件,您可以通过上述链接下载该文件或直接通过HTTP请求读取该文件中的内容。 JSON数据中各字段含义请参见识别结果说明。 |
| 无 |
| 获取子任务状态。
|
| 无 | 任务执行过程中关键信息,可能为空 | 获取任务执行过程中的关键信息。 当任务失败时,可查看该内容分析原因。 |
识别结果说明
识别结果保存为JSON文件。
需要关注的参数如下:
参数 | 类型 | 说明 |
参数 | 类型 | 说明 |
audio_format | string | 源文件中音频的格式。 |
channels | array[integer] | 源文件中音频的音轨索引信息,对单轨音频返回[0],对双轨音频返回[0, 1],以此类推。 |
original_sampling_rate | integer | 源文件中音频的采样率(Hz)。 |
original_duration | integer | 源文件中的原始音频时长(ms)。 |
channel_id | integer | 转写结果的音轨索引,以0为起始。 |
content_duration | integer | 音轨中被判定为语音内容的时长(ms)。 Paraformer语音识别模型服务仅对音轨中被判定为语音内容的时长进行语音转写,并据此进行计量计费,非语音内容不计量、不计费。通常情况下语音内容时长会短于原始音频时长。由于对是否存在语音内容的判定是由AI模型给出的,可能与实际情况存在一定误差。 |
transcript | string | 段落级别的语音转写结果。 |
sentences | array | 句子级别的语音转写结果。 |
words | array | 词级别的语音转写结果。 |
begin_time | integer | 开始时间戳(ms)。 |
end_time | integer | 结束时间戳(ms)。 |
text | string | 语音转写结果。 |
speaker_id | integer | 当前说话人的索引,以0为起始,用于区分不同的说话人。 仅在启用说话人分离功能时,该字段才会显示于识别结果中。 |
punctuation | string | 预测出的词之后的标点符号(如有)。 |
关键接口
任务查询参数配置类(TranscriptionQueryParam
)
TranscriptionQueryParam
在等待任务完成(调用Transcription
的wait
方法)或查询任务执行结果(调用Transcription
的fetch
方法)时用到。
通过静态方法FromTranscriptionParam
创建TranscriptionQueryParam
实例。
接口/方法 | 参数 | 返回值 | 描述 |
接口/方法 | 参数 | 返回值 | 描述 |
|
|
| 创建 |
核心类(Transcription
)
Transcription
可以通过“import com.alibaba.dashscope.audio.asr.transcription.*;
”方式引入。它的关键接口如下:
接口/方法 | 参数 | 返回值 | 描述 |
接口/方法 | 参数 | 返回值 | 描述 |
|
| 异步提交语音识别任务。 | |
|
| 阻塞当前线程直到异步任务结束(任务状态为 | |
|
| 异步查询当前任务执行结果。 |
错误码
当任务包含多个子任务时,只要存在任一子任务成功,整个任务状态将标记为SUCCEEDED
,需通过subtask_status
字段判断具体子任务结果。
错误返回示例:
{
"task_id": "7bac899c-06ec-4a79-8875-xxxxxxxxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2024-12-16 16:30:59.170",
"scheduled_time": "2024-12-16 16:30:59.204",
"end_time": "2024-12-16 16:31:02.375",
"results": [
{
"file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/sensevoice/long_audio_demo_cn.mp3",
"transcription_url": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/prod/paraformer-v2/20241216/xxxx",
"subtask_status": "SUCCEEDED"
},
{
"file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/sensevoice/rich_text_exaple_1.wav",
"code": "InvalidFile.DownloadFailed",
"message": "The audio file cannot be downloaded.",
"subtask_status": "FAILED"
}
],
"task_metrics": {
"TOTAL": 2,
"SUCCEEDED": 1,
"FAILED": 1
}
}
语音相关错误码:
错误码(code) | 原因 | 解决方案 |
错误码(code) | 原因 | 解决方案 |
SUCCESS_WITH_NO_VALID_FRAGMENT | 识别结果查询接口调用成功,但是VAD模块未检测到有效语音。 | 此种情况下可检查: 录音文件是否包含有效语音,如果都是无效语音,例如纯静音。上述情况下没有识别结果是正常现象。 |
ASR_RESPONSE_HAVE_NO_WORDS | 识别结果查询接口调用成功,但是最终识别结果为空。 | 此种情况下可检查: 录音文件是否包含有效语音,或有效语音是否都是语气词且开启了顺滑参数 |
FILE_DOWNLOAD_FAILED | 文件下载失败。 | 检查录音文件路径是否正确,以及是否可以通过外网访问和下载。 |
FILE_CHECK_FAILED | 文件格式错误。 | 检查录音文件是否是单轨/双轨的WAV格式或MP3格式。 |
FILE_TOO_LARGE | 文件过大。 | 检查录音文件大小是否超过2GB,超过则需您对录音文件分段。 |
FILE_NORMALIZE_FAILED | 文件归一化失败。 | 检查录音文件是否有损坏,是否可以正常播放。 |
FILE_PARSE_FAILED | 文件解析失败。 | 检查录音文件是否有损坏,是否可以正常播放。 |
MKV_PARSE_FAILED | MKV解析失败。 | 检查录音文件是否损坏,是否可以正常播放。 |
FILE_TRANS_TASK_EXPIRED | 录音文件识别任务过期。 | TaskId不存在,或者已过期。 |
REQUEST_INVALID_FILE_URL_VALUE | 请求file_link参数非法。 | 确认file_url参数格式是否正确。 |
CONTENT_LENGTH_CHECK_FAILED | content-length 检查失败。 | 检查下载文件时,HTTP response中的content-length与文件实际大小是否一致。 |
FILE_404_NOT_FOUND | 需要下载的文件不存在。 | 检查需要下载的文件是否存在。 |
FILE_403_FORBIDDEN | 没有权限下载需要的文件。 | 检查是否有权限下载录音文件。 |
FILE_SERVER_ERROR | 请求的文件所在的服务不可用。 | 检查请求的文件所在的服务是否可用。 |
AUDIO_DURATION_TOO_LONG | 请求的文件时长超过12小时。 | 建议将音频进行切分,分多次提交识别任务。 |
DECODER_ERROR | 检测音频文件信息失败。 | 确认文件下载链接中文件为支持的音频格式。 |
INTERNAL_ERROR | 受机器负载、网络等因素导致的异常,通常为偶发出现。 | 一般重试调用即可恢复,如无法恢复,请联系技术支持人员。 |
更多百炼平台相关错误码请参考错误信息。
更多示例
更多示例,请参见GitHub。
常见问题
请参见GitHub QA。
- 本页导读 (1)
- 前提条件
- 模型列表
- 约束
- 快速开始
- 异步提交任务+同步等待任务结束
- 异步提交任务+异步查询任务执行结果
- 请求参数
- 响应结果
- 任务执行结果(TranscriptionResult)
- 子任务执行结果(TranscriptionTaskResult)
- 识别结果说明
- 关键接口
- 任务查询参数配置类(TranscriptionQueryParam)
- 核心类(Transcription)
- 错误码
- 更多示例
- 常见问题