跳转到主要内容
非实时

Paraformer 录音文件识别 Python SDK

使用DashScope Python SDK调用Paraformer模型,对录音文件进行异步转写识别。

前提条件

获取API Key:请获取API Key,并配置API Key到环境变量,避免在代码中硬编码:
export DASHSCOPE_API_KEY="your-api-key"
如需在代码中临时授权,也可使用以下方式设置API Key,但请注意该方式存在泄露风险,不建议在生产环境使用:
import dashscope
dashscope.api_key = "your-api-key"
安装Python SDK:请安装最新版DashScope Python SDK,或运行:
pip install dashscope

模型列表

v2模型(推荐)

模型名称支持语言采样率标点预测逆文本规范化自定义热词
paraformer-v2中文(含多种方言)、英语、日语、韩语、德语、法语、俄语不限支持支持支持
paraformer-8k-v2中文8kHz支持支持支持

v1模型

模型名称支持语言采样率标点预测逆文本规范化自定义热词
paraformer-v1中文、英语不限支持支持不支持
paraformer-8k-v1中文8kHz支持支持不支持
paraformer-mtl-v1中文(含多种方言)、英语、日语、韩语、西班牙语、印尼语、法语、德语、意大利语、马来语16kHz及以上支持支持不支持

约束

  • 不支持本地文件上传,也不支持Base64编码格式。输入音频必须为公网可访问的HTTP/HTTPS URL,例如 https://your-domain.com/file.mp3
  • SDK不支持 oss:// 前缀的URL。RESTful API支持 oss:// 前缀URL,但下载链接有效期仅48小时,不建议在生产环境使用。
  • 每次请求最多支持100个URL。
  • 支持的音频格式:aac、amr、avi、flac、flv、m4a、mkv、mov、mp3、mp4、mpeg、ogg、opus、wav、webm、wma、wmv。
  • 采样率要求:
    • paraformer-v2:不限
    • paraformer-8k-v2、paraformer-8k-v1:仅支持8kHz
    • paraformer-mtl-v1:仅支持16kHz及以上
    • paraformer-v1:不限
  • 单个文件最大2GB,最长12小时。
  • 每次请求最多100个文件。

快速开始

异步提交任务并同步等待结果

使用 async_call() 提交转写任务,再用 wait() 同步等待任务完成:
from http import HTTPStatus
from dashscope.audio.asr import Transcription
import json

# 若没有将API Key配置到环境变量中,需将下面这行代码注释放开,并将apiKey替换为自己的API Key
# import dashscope
# dashscope.api_key = "apiKey"

task_response = Transcription.async_call(
  model='paraformer-v2',
  file_urls=[
    'https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav',
    'https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_male2.wav'
  ],
  language_hints=['zh', 'en']  # "language_hints"只支持paraformer-v2模型
)

transcribe_response = Transcription.wait(task=task_response.output.task_id)
if transcribe_response.status_code == HTTPStatus.OK:
  print(json.dumps(transcribe_response.output, indent=4, ensure_ascii=False))
  print('transcription done!')
任务提交后会进入PENDING(排队)状态,排队时长取决于当前队列长度和音频时长,通常在几分钟内完成。转写结果及下载链接有效期为24小时。

异步提交任务并轮询查询结果

使用 async_call() 提交任务,再用 fetch() 循环轮询任务状态:
from http import HTTPStatus
from dashscope.audio.asr import Transcription
import json

# 若没有将API Key配置到环境变量中,需将下面这行代码注释放开,并将apiKey替换为自己的API Key
# import dashscope
# dashscope.api_key = "apiKey"

transcribe_response = Transcription.async_call(
  model='paraformer-v2',
  file_urls=[
    'https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav',
    'https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_male2.wav'
  ],
  language_hints=['zh', 'en']  # "language_hints"只支持paraformer-v2模型
)

while True:
  if transcribe_response.output.task_status == 'SUCCEEDED' or transcribe_response.output.task_status == 'FAILED':
    break
  transcribe_response = Transcription.fetch(task=transcribe_response.output.task_id)

if transcribe_response.status_code == HTTPStatus.OK:
  print(json.dumps(transcribe_response.output, indent=4, ensure_ascii=False))
  print('transcription done!')
任务提交后会进入PENDING(排队)状态,排队时长取决于当前队列长度和音频时长,通常在几分钟内完成。转写结果及下载链接有效期为24小时。

请求参数

以下参数通过 async_call() 方法传入:
参数类型默认值是否必填说明
modelstr-必填Paraformer模型名称,参见模型列表
file_urlslist[str]-必填音视频文件的公网URL列表,最多100个
vocabulary_idstr-可选热词表ID(最新版),仅支持v2模型
phrase_idstr-可选热词表ID(v1版),不适用于v2及以上模型
channel_idlist[int][0]可选音轨索引列表(从0开始),每条音轨单独计费
disfluency_removal_enabledboolFalse可选是否过滤语气词(如"嗯"、"啊"等)
timestamp_alignment_enabledboolFalse可选是否开启时间戳对齐,解决识别结果与音频不同步的问题
special_word_filterstr-可选敏感词过滤配置(JSON 字符串),支持自定义替换规则
language_hintslist[str]["zh", "en"]可选语言提示列表(如 ['zh', 'en']),仅支持paraformer-v2模型
diarization_enabledboolFalse可选是否开启说话人分离
speaker_countint-可选说话人数量,与 diarization_enabled 配合使用

响应结果

TranscriptionOutput字段

字段类型说明
task_idstring任务ID
task_statusstring任务状态:PENDING、RUNNING、SUCCEEDED、FAILED
resultsarray各文件的转写结果列表
results[].file_urlstring对应的输入音频URL
results[].transcription_urlstring转写结果JSON文件的下载URL(有效期24小时)
results[].subtask_statusstring该文件的子任务状态:SUCCEEDED或FAILED
results[].codestring子任务失败时的错误码
results[].messagestring子任务失败时的错误描述
当一次请求包含多个文件时,只要有任意一个子任务成功,整体 task_status 即为SUCCEEDED。请通过 subtask_status 判断每个文件的识别结果。

识别结果说明

transcription_url 指向的JSON文件结构如下:
{
  "file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
  "properties": {
    "audio_format": "pcm_s16le",
    "channels": [0],
    "original_sampling_rate": 16000,
    "original_duration_in_milliseconds": 3834
  },
  "transcripts": [
    {
      "channel_id": 0,
      "content_duration_in_milliseconds": 3720,
      "text": "Hello world, 这里是阿里巴巴语音实验室。",
      "sentences": [
        {
          "begin_time": 100,
          "end_time": 3820,
          "text": "Hello world, 这里是阿里巴巴语音实验室。",
          "sentence_id": 1,
          "speaker_id": 0,
          "words": [
            {"begin_time": 100, "end_time": 596, "text": "Hello ", "punctuation": ""},
            {"begin_time": 596, "end_time": 844, "text": "world", "punctuation": ", "}
          ]
        }
      ]
    }
  ]
}
识别结果字段说明:
参数类型说明
audio_formatstring源音频格式
channelsarray[integer]音轨索引列表
original_sampling_rateinteger采样率(Hz)
original_duration_in_millisecondsinteger原始音频时长(毫秒)
channel_idinteger该转写结果对应的音轨索引
content_duration_in_millisecondsinteger被判定为语音内容的时长(毫秒),按此时长计费
textstring段落级别转写结果
sentencesarray句子级别转写结果列表
wordsarray词级别转写结果列表
begin_timeinteger开始时间戳(毫秒)
end_timeinteger结束时间戳(毫秒)
speaker_idinteger说话人索引(从0开始),仅在开启说话人分离时返回
punctuationstring词后标点符号

关键接口

核心类(Transcription)

  • 语音识别
    语音对话
    音乐生成
    图片翻译
    多模态向量
    工具包与框架
    文件

    删除文件

    DELETE
    /files/{file_id}
    Python
    import os
    from openai import OpenAI
    
    client = OpenAI(
      api_key=os.getenv("DASHSCOPE_API_KEY"),
      base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    )
    
    result = client.files.delete(
      "file-batch-xxx"
    )
    print(result.model_dump_json())
    {
      "object": "file",
      "deleted": true,
      "id": "file-batch-xxx"
    }

    鉴权

    string
    header
    必填

    千问云 API Key。详见获取 API Key

    路径参数

    string
    必填

    待删除文件的 ID。

    file-batch-xxx

    响应

    200-application/json
    enum<string>

    固定值 file

    file
    boolean

    文件是否已成功删除。

    string

    已删除文件的 ID。

    file-batch-xxx
    Paraformer 录音文件识别 Python SDK - 千问云