语音识别

语音识别(Automatic Speech Recognition,ASR)可以将音视频中包含的人类声音转换为文本。适用于会议记录、客户服务、媒体制作、市场研究及多样化的实时交互场景,能显著提升工作效率、服务质量与人机交互体验。

语音识别也称为语音转写、语音转录、语音转文字等。

实时语音识别

实时语音识别可以将音频流实时转换为文本,实现“边说边出文字”的效果它适用于对麦克风语音进行实时识别,以及对本地音视频文件进行实时转录。

应用场景

  • 会议:为会议、演讲、培训、庭审等提供实时记录。

  • 直播:为直播带货、赛事直播等提供实时字幕。

  • 客服:实时记录通话内容,协助提升服务品质。

  • 游戏:让玩家无需停下手头操作即可语音输入或阅读聊天内容。

  • 社交聊天:使用社交App或输入法时,语音自动转文本。

  • 人机交互:转换语音对话为文字,优化人机交互体验。

支持的模型

模型名称

支持的语言

支持的采样率

适合场景

单价

免费额度

paraformer-realtime-v2

中文普通话、中文方言(粤语、吴语、闽南语、东北话、甘肃话、贵州话、河南话、湖北话、湖南话、宁夏话、山西话、陕西话、山东话、四川话、天津话、江西话、云南话、上海话)、英语、日语、韩语

支持多个语种自由切换

任意

视频直播、会议等

0.00024元/秒

36,000秒(10小时)

每月10点自动发放

有效期1个月

paraformer-realtime-v1

中文

16kHz

paraformer-realtime-8k-v2

8kHz

电话客服等

paraformer-realtime-8k-v1

快速开始

您可以先进行在线体验:请在语音识别页面选择“Paraformer实时语音识别-v2”模型,单击立即体验

下面是调用API的示例代码。

您需要已获取API Key配置API Key到环境变量。如果通过SDK调用,还需要安装DashScope SDK

  • 从麦克风采集实时音频,并将获取的音频流实时发送至语音识别模型。

    运行代码示例,当控制台显示RecognitionCallback open. 时,用户使用麦克风开始说话。在RecognitionCallback sentence:中实时显示识别结果文本,达到“边说边出文字”的效果。

    import pyaudio
    import dashscope
    from dashscope.audio.asr import (Recognition, RecognitionCallback,
                                     RecognitionResult)
    
    dashscope.api_key = 'YOUR-DASHSCOPE-API-KEY'  # 如果您没有配置环境变量,请用您已获取的API-KEY替换YOUR-DASHSCOPE-API-KEY
    
    mic = None
    stream = None
    
    
    class Callback(RecognitionCallback):
        def on_open(self) -> None:
            global mic
            global stream
            print('RecognitionCallback open.')
            mic = pyaudio.PyAudio()
            stream = mic.open(format=pyaudio.paInt16,
                              channels=1,
                              rate=16000,
                              input=True)
    
        def on_close(self) -> None:
            global mic
            global stream
            print('RecognitionCallback close.')
            stream.stop_stream()
            stream.close()
            mic.terminate()
            stream = None
            mic = None
    
        def on_event(self, result: RecognitionResult) -> None:
            print('RecognitionCallback sentence: ', result.get_sentence())
    
    
    callback = Callback()
    recognition = Recognition(model='paraformer-realtime-v2',
                              format='pcm',
                              sample_rate=16000,
                              callback=callback)
    recognition.start()
    
    while True:
        if stream:
            data = stream.read(3200, exception_on_overflow=False)
            recognition.send_audio_frame(data)
        else:
            break
    
    recognition.stop()
    
  • 针对本地音视频文件,调用实时语音识别API即时输出识别结果。

    import requests
    from http import HTTPStatus
    
    import dashscope
    from dashscope.audio.asr import Recognition
    
    dashscope.api_key = 'YOUR-DASHSCOPE-API-KEY'  # 如果您没有配置环境变量,请用您已获取的API-KEY替换YOUR-DASHSCOPE-API-KEY
    
    r = requests.get(
        'https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav'
    )
    with open('asr_example.wav', 'wb') as f:
        f.write(r.content)
    
    recognition = Recognition(model='paraformer-realtime-v2',
                              format='wav',
                              sample_rate=16000,
                              callback=None)
    result = recognition.call('asr_example.wav')
    if result.status_code == HTTPStatus.OK:
        with open('asr_result.txt', 'w+') as f:
            for sentence in result.get_sentence():
                f.write(str(sentence) + '\n')
        print('Recognition done!')
    else:
        print('Error: ', result.message)
    

    完整的识别结果会以JSON格式保存在.txt文件中。完整结果包含转换后的文本以及文本在音视频文件中的起始、结束时间(以毫秒为单位)。

    {'begin_time': 280, 'end_time': 3810, 'text': 'Hello world, 这里是阿里巴巴语音实验室。', 'words': [{'begin_time': 280, 'end_time': 633, 'text': 'Hello ', 'punctuation': ''}, {'begin_time': 633, 'end_time': 986, 'text': 'world', 'punctuation': ', '}, {'begin_time': 986, 'end_time': 1456, 'text': '这里', 'punctuation': ''}, {'begin_time': 1456, 'end_time': 1926, 'text': '是阿', 'punctuation': ''}, {'begin_time': 1926, 'end_time': 2396, 'text': '里巴', 'punctuation': ''}, {'begin_time': 2396, 'end_time': 2866, 'text': '巴语', 'punctuation': ''}, {'begin_time': 2866, 'end_time': 3336, 'text': '音实', 'punctuation': ''}, {'begin_time': 3336, 'end_time': 3810, 'text': '验室', 'punctuation': '。'}]}

以上为 Python SDK 样例,更多编程语言支持和接入方式请参见实时语音识别API详情

输入文件限制

对本地音视频文件进行识别时:

  • 输入文件的方式:上传本地文件。

  • 文件数量:单次调用最多输入1个文件。

  • 文件大小:无限制。

  • 文件格式:支持pcm、wav、opus、speex、aac、amr等多种格式。推荐pcmwav。

    由于音视频文件格式及其变种众多,因此不能保证所有格式均能够被正确识别。请通过测试验证您所提供的文件能够获得正常的语音识别结果。
  • 采样率:支持音视频采样率为16000 Hz及以上,电话语音采样率为8000 Hz及以上。

    音频采样率是指录音设备在一秒钟内对声音信号的采样次数,更高的采样率可以提供更丰富的信号信息,有助于提高语音识别系统的准确率,尤其是在处理复杂背景噪声、快速语速或者不同口音的语音时。然而,实际效果还取决于算法的设计和优化。有时,过高的采样率可能引入更多噪声或无关信息,反而对识别结果产生负面影响,特别是在没有相应优化的算法中。因此,请按照音视频的采样率选择适用的模型。如果语音数据采样率是8000Hz,请勿将采样率转换为16000Hz,选用支持8000Hz采样率的模型即可。

录音文件识别

录音文件识别(也称为录音文件转写)是指对音视频文件进行语音识别,将语音转换为文本。支持单个文件识别和批量文件识别,适用于处理不需要即时返回结果的场景。

应用场景

  • 会议、课堂录音记录:将录音文件转成文字,方便后期快速进行信息检索、分析和整理重点内容。

  • 客服电话分析:自动记录并分析客户电话,快速理解客户需求,自动分类服务请求,甚至识别客户情绪,从而提升服务质量与效率。

  • 字幕生成:帮助媒体制作与后期编辑人员识别音视频材料并生成对应的字幕,加速后期制作的流程。

  • 市场研究与数据分析:将市场调研中收集到的消费者访谈、焦点小组讨论等录音数据,通过识别模型进行分析,提取消费者意见、偏好等信息,为企业决策提供支持。

支持的模型

模型名称

支持的语言

支持的采样率

适用的格式

单价

免费额度

paraformer-v2

中文普通话、中文方言(粤语、吴语、闽南语、东北话、甘肃话、贵州话、河南话、湖北话、湖南话、宁夏话、山西话、陕西话、山东话、四川话、天津话、江西话、云南话、上海话)、英语、日语、韩语

任意

视频直播、电话客服等

0.00008元/秒

36,000秒(10小时)

每月10点自动发放

有效期1个月

paraformer-8k-v2

中文普通话

8kHz

电话语音

paraformer-v1

中文普通话、英语

任意

音频或视频

paraformer-8k-v1

中文普通话

8kHz

电话语音

paraformer-mtl-v1

中文普通话、中文方言(粤语、吴语、闽南语、东北话、甘肃话、贵州话、河南话、湖北话、湖南话、宁夏话、山西话、陕西话、山东话、四川话、天津话)、英语、日语、韩语、西班牙语、印尼语、法语、德语、意大利语、马来语

16kHz及以上

音频或视频

模型名称

支持的语言

适用的格式

单价

免费额度

sensevoice-v1

超过50种语言(中、英、日、韩、粤等)

附录:支持语言列表

音频或视频

0.0007 元/秒

36,000秒(10小时)

每月10点自动发放

有效期1个月

模型选型建议

  1. 语种支持

    • 对于中文(普通话和方言)、粤语、英语、日语、韩语、西班牙语、印尼语、法语、德语、意大利语、马来语,建议优先选择Paraformer以获得更优效果。同时,建议优先选择paraformer-v2模型。paraformer-v2支持指定语种,包括中文(含普通话和多种方言)、粤语、英语、日语、韩语。指定语种后,系统能够集中算法资源和语言模型于该特定语种,避免了在多种可能的语种中进行猜测和切换,从而减少了误识别的概率。

    • 对于其他语言(俄语、泰语等),请选择SenseVoice,具体请参见附录:支持语言列表

  2. 情感和事件识别:如果需要情感识别能力(包括高兴<HAPPY>、伤心<SAD>、生气<ANGRY>和中性<NEUTRAL>)和4种常见音频事件识别(包括背景音乐<BGM>、说话声<Speech>、掌声<Applause>和笑声<Laughter>),请选择SenseVoice语音识别模型。

  3. 热词定制:如果您的业务领域中,有部分专有名词和行业术语识别效果不够好,您可以定制热词,将这些词添加到词表从而改善识别结果。您可以使用paraformer-v1、paraformer-8k-v1、paraformer-mtl-v1语音识别模型。关于热词的更多信息,请参见Paraformer语音识别热词定制与管理

快速开始

您可以先进行在线体验:请在语音模型页面选择“Paraformer语音识别-v2”模型,单击立即体验

下面是调用API的示例代码。

您需要已获取API Key配置API Key到环境变量。如果通过SDK调用,还需要安装DashScope SDK

由于音视频文件的尺寸通常较大,文件传输和语音识别处理均需要时间,文件转写API通过异步调用方式来提交任务。开发者需要通过查询接口,在文件转写完成后获得语音识别结果。

Paraformer

import json
from urllib import request
from http import HTTPStatus

import dashscope

dashscope.api_key = 'YOUR-DASHSCOPE-API-KEY'  # 如果您没有配置环境变量,请用您已获取的API-KEY替换YOUR-DASHSCOPE-API-KEY

task_response = dashscope.audio.asr.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'])

transcription_response = dashscope.audio.asr.Transcription.wait(
    task=task_response.output.task_id)

if transcription_response.status_code == HTTPStatus.OK:
    for transcription in transcription_response.output['results']:
        url = transcription['transcription_url']
        result = json.loads(request.urlopen(url).read().decode('utf8'))
        print(json.dumps(result, indent=4, ensure_ascii=False))
    print('transcription done!')
else:
    print('Error: ', transcription_response.output.message)

完整的识别结果会以JSON格式打印在控制台。完整结果包含转换后的文本以及文本在音视频文件中的起始、结束时间(以毫秒为单位)。

{
    "file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_male2.wav",
    "properties": {
        "audio_format": "pcm_s16le",
        "channels": [
            0
        ],
        "original_sampling_rate": 16000,
        "original_duration_in_milliseconds": 4726
    },
    "transcripts": [
        {
            "channel_id": 0,
            "content_duration_in_milliseconds": 4720,
            "text": "Hello world, 这里是阿里巴巴语音实验室。",
            "sentences": [
                {
                    "begin_time": 0,
                    "end_time": 4720,
                    "text": "Hello world, 这里是阿里巴巴语音实验室。",
                    "words": [
                        {
                            "begin_time": 0,
                            "end_time": 472,
                            "text": "Hello ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 472,
                            "end_time": 944,
                            "text": "world",
                            "punctuation": ", "
                        },
                        {
                            "begin_time": 944,
                            "end_time": 1573,
                            "text": "这里",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 1573,
                            "end_time": 2202,
                            "text": "是阿",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 2202,
                            "end_time": 2831,
                            "text": "里巴",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 2831,
                            "end_time": 3460,
                            "text": "巴语",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 3460,
                            "end_time": 4089,
                            "text": "音实",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 4089,
                            "end_time": 4720,
                            "text": "验室",
                            "punctuation": "。"
                        }
                    ]
                }
            ]
        }
    ]
}
{
    "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": 3820,
            "text": "Hello world, 这里是阿里巴巴语音实验室。",
            "sentences": [
                {
                    "begin_time": 0,
                    "end_time": 3820,
                    "text": "Hello world, 这里是阿里巴巴语音实验室。",
                    "words": [
                        {
                            "begin_time": 0,
                            "end_time": 382,
                            "text": "Hello ",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 382,
                            "end_time": 764,
                            "text": "world",
                            "punctuation": ", "
                        },
                        {
                            "begin_time": 764,
                            "end_time": 1273,
                            "text": "这里",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 1273,
                            "end_time": 1782,
                            "text": "是阿",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 1782,
                            "end_time": 2291,
                            "text": "里巴",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 2291,
                            "end_time": 2800,
                            "text": "巴语",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 2800,
                            "end_time": 3309,
                            "text": "音实",
                            "punctuation": ""
                        },
                        {
                            "begin_time": 3309,
                            "end_time": 3820,
                            "text": "验室",
                            "punctuation": "。"
                        }
                    ]
                }
            ]
        }
    ]
}
transcription done!

以上为 Python SDK 样例,更多编程语言支持和接入方式请参见Paraformer录音文件识别API详情

SenseVoice

import json
from urllib import request
from http import HTTPStatus

import dashscope

dashscope.api_key = 'YOUR-DASHSCOPE-API-KEY'  # 如果您没有配置环境变量,请用您已获取的API-KEY替换YOUR-DASHSCOPE-API-KEY

task_response = dashscope.audio.asr.Transcription.async_call(
    model='sensevoice-v1',
    file_urls=[
        'https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/sensevoice/rich_text_example_1.wav'],
    language_hints=['en'],)

transcription_response = dashscope.audio.asr.Transcription.wait(
    task=task_response.output.task_id)

if transcription_response.status_code == HTTPStatus.OK:
    for transcription in transcription_response.output['results']:
        url = transcription['transcription_url']
        result = json.loads(request.urlopen(url).read().decode('utf8'))
        print(json.dumps(result, indent=4, ensure_ascii=False))
    print('transcription done!')
else:
    print('Error: ', transcription_response.output.message)

完整的识别结果会以JSON格式打印在控制台。完整结果包含转换后的文本以及文本在音视频文件中的起始、结束时间(以毫秒为单位)。本示例中,还检测到了说话声事件(<|Speech|><|/Speech|>分别代表说话声事件的起始与结束),情绪(<|ANGRY|>)。

{
    "file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/sensevoice/rich_text_example_1.wav",
    "properties": {
        "audio_format": "pcm_s16le",
        "channels": [
            0
        ],
        "original_sampling_rate": 16000,
        "original_duration_in_milliseconds": 17645
    },
    "transcripts": [
        {
            "channel_id": 0,
            "content_duration_in_milliseconds": 12710,
            "text": "<|Speech|> Senior staff, Principal Doris Jackson, Wakefield faculty, and of course, my fellow classmates. <|/Speech|> <|ANGRY|><|Speech|> I am honored to have been chosen to speak before my classmates, as well as the students across America today. <|/Speech|>",
            "sentences": [
                {
                    "begin_time": 0,
                    "end_time": 7060,
                    "text": "<|Speech|> Senior staff, Principal Doris Jackson, Wakefield faculty, and of course, my fellow classmates. <|/Speech|> <|ANGRY|>"
                },
                {
                    "begin_time": 11980,
                    "end_time": 17630,
                    "text": "<|Speech|> I am honored to have been chosen to speak before my classmates, as well as the students across America today. <|/Speech|>"
                }
            ]
        }
    ]
}
transcription done!

以上为 Python SDK 样例,更多编程语言支持和接入方式请参见SenseVoice录音文件识别API详情

输入文件限制

  • 输入文件的方式:通过HTTP / HTTPS协议的URL指定。

  • 文件数量:单次调用最多输入100个文件URL,待所有URL转写完成后,您可以一次性获取全部转写结果。

  • 文件大小:每个URL中的文件不超过2 GB。如果超出限制,可尝试对文件进行预处理以降低文件尺寸。具体操作,请参见最佳实践

  • 文件格式:aac、amr、avi、flac、flv、m4a、mkv、mov、mp3、mp4、mpeg、ogg、opus、wav、webm、wma、wmv。

    由于音视频文件格式及其变种众多,因此不能保证所有格式均能够被正确识别。请通过测试验证您所提供的文件能够获得正常的语音识别结果。
  • 采样率:sensevoice-v1、paraformer-v2、paraformer-v1模型对采样率无限制,其他模型支持音视频采样率为16000 Hz及以上,电话语音采样率为8000 Hz及以上。

    音频采样率是指录音设备在一秒钟内对声音信号的采样次数,更高的采样率可以提供更丰富的信号信息,有助于提高语音识别系统的准确率,尤其是在处理复杂背景噪声、快速语速或者不同口音的语音时。然而,实际效果还取决于算法的设计和优化。有时,过高的采样率可能引入更多噪声或无关信息,反而对识别结果产生负面影响,特别是在没有相应优化的算法中。因此,请按照音视频的采样率选择适用的模型。如果语音数据采样率是8000Hz,请勿将采样率转换为16000Hz,选用支持8000Hz采样率的模型即可。

常见问题

1. 可能影响识别准确率的因素

  1. 声音质量:设备、环境等可能影响语音的清晰度,从而影响识别准确率。高质量的音频输入是提高识别准确性的前提。

  2. 说话人特征:不同人的声音特质(如音调、语速、口音、方言)差异很大,这些个体差异会对语音识别系统构成挑战,尤其是对于未充分训练过的特定口音或方言。

  3. 语言和词汇:语音识别模型通常针对特定的语言进行训练。当处理多语言混合、专业术语、俚语或网络用语时,识别难度会增加。您可以通过热词功能,改变识别结果,具体操作请参见Paraformer语音识别热词定制与管理

  4. 上下文理解:缺乏对对话上下文的理解可能会导致误解,尤其是在含义模糊或依赖于上下文的情境中。

2. 支持哪些编程语言

Paraformer实时语音识别

Paraformer录音文件识别

SenseVoice录音文件识别

3. 语音输入的方式

Paraformer实时语音识别:本地文件、音频流。详见输入文件限制

Paraformer录音文件识别、SenseVoice录音文件识别:不支持本地文件,只支持公网可访问的录音文件URL。详见输入文件限制

4. 输入文件大小限制

Paraformer实时语音识别:大小不限。详见输入文件限制

Paraformer录音文件识别、SenseVoice录音文件识别:单次识别最多能指定100个文件URL,每个URL对应的录音文件大小应小于等于2GB。详见输入文件限制

5. 是否支持流式输入输出

Paraformer实时语音识别:是。

Paraformer录音文件识别、SenseVoice录音文件识别:否。

6. 限流

Paraformer语音识别

模型名称

任务查询接口RPS限制

paraformer-realtime-v2

20

paraformer-realtime-v1

paraformer-realtime-8k-v1

模型名称

提交作业接口RPS限制

任务查询接口RPS限制

paraformer-v2

10

20

paraformer-v1

paraformer-8k-v1

paraformer-mtl-v1

SenseVoice语音识别

模型名称

任务查询接口RPS限制

sensevoice-v1

10