語音識別(Automatic Speech Recognition,ASR)可以將音視頻中包含的人類聲音轉換為文本。適用于會議記錄、客戶服務、媒體制作、市場研究及多樣化的實時交互場景,能顯著提升工作效率、服務質量與人機交互體驗。
語音識別也稱為語音轉寫、語音轉錄、語音轉文字等。
實時語音識別
實時語音識別可以將音頻流實時轉換為文本,實現“邊說邊出文字”的效果。它適用于對麥克風語音進行實時識別,以及對本地音視頻文件進行實時轉錄。
應用場景
會議:為會議、演講、培訓、庭審等提供實時記錄。
直播:為直播帶貨、賽事直播等提供實時字幕。
客服:實時記錄通話內容,協助提升服務品質。
游戲:讓玩家無需停下手頭操作即可語音輸入或閱讀聊天內容。
社交聊天:使用社交App或輸入法時,語音自動轉文本。
人機交互:轉換語音對話為文字,優化人機交互體驗。
支持的模型
模型名稱 | 支持的語言 | 支持的采樣率 | 適合場景 | 單價 | 免費額度 |
paraformer-realtime-v2 | 中文普通話、中文方言(粵語、吳語、閩南語、東北話、甘肅話、貴州話、河南話、湖北話、湖南話、寧夏話、山西話、陜西話、山東話、四川話、天津話、江西話、云南話、上海話)、英語、日語、韓語 支持多個語種自由切換 | 任意 | 視頻直播、會議等 | 0.00024元/秒 | 36,000秒(10小時) 每月1日0點自動發放 有效期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()
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等多種格式。推薦pcm和wav。
由于音視頻文件格式及其變種眾多,因此不能保證所有格式均能夠被正確識別。請通過測試驗證您所提供的文件能夠獲得正常的語音識別結果。
采樣率:支持音視頻采樣率為16000 Hz及以上,電話語音采樣率為8000 Hz及以上。
音頻采樣率是指錄音設備在一秒鐘內對聲音信號的采樣次數,更高的采樣率可以提供更豐富的信號信息,有助于提高語音識別系統的準確率,尤其是在處理復雜背景噪聲、快速語速或者不同口音的語音時。然而,實際效果還取決于算法的設計和優化。有時,過高的采樣率可能引入更多噪聲或無關信息,反而對識別結果產生負面影響,特別是在沒有相應優化的算法中。因此,請按照音視頻的采樣率選擇適用的模型。如果語音數據采樣率是8000Hz,請勿將采樣率轉換為16000Hz,選用支持8000Hz采樣率的模型即可。
錄音文件識別
錄音文件識別(也稱為錄音文件轉寫)是指對音視頻文件進行語音識別,將語音轉換為文本。支持單個文件識別和批量文件識別,適用于處理不需要即時返回結果的場景。
應用場景
會議、課堂錄音記錄:將錄音文件轉成文字,方便后期快速進行信息檢索、分析和整理重點內容。
客服電話分析:自動記錄并分析客戶電話,快速理解客戶需求,自動分類服務請求,甚至識別客戶情緒,從而提升服務質量與效率。
字幕生成:幫助媒體制作與后期編輯人員識別音視頻材料并生成對應的字幕,加速后期制作的流程。
市場研究與數據分析:將市場調研中收集到的消費者訪談、焦點小組討論等錄音數據,通過識別模型進行分析,提取消費者意見、偏好等信息,為企業決策提供支持。
支持的模型
模型名稱 | 支持的語言 | 支持的采樣率 | 適用的格式 | 單價 | 免費額度 |
paraformer-v2 | 中文普通話、中文方言(粵語、吳語、閩南語、東北話、甘肅話、貴州話、河南話、湖北話、湖南話、寧夏話、山西話、陜西話、山東話、四川話、天津話、江西話、云南話、上海話)、英語、日語、韓語 | 任意 | 視頻直播、電話客服等 | 0.00008元/秒 | 36,000秒(10小時) 每月1日0點自動發放 有效期1個月 |
paraformer-8k-v2 | 中文普通話 | 8kHz | 電話語音 | ||
paraformer-v1 | 中文普通話、英語 | 任意 | 音頻或視頻 | ||
paraformer-8k-v1 | 中文普通話 | 8kHz | 電話語音 | ||
paraformer-mtl-v1 | 中文普通話、中文方言(粵語、吳語、閩南語、東北話、甘肅話、貴州話、河南話、湖北話、湖南話、寧夏話、山西話、陜西話、山東話、四川話、天津話)、英語、日語、韓語、西班牙語、印尼語、法語、德語、意大利語、馬來語 | 16kHz及以上 | 音頻或視頻 |
模型名稱 | 支持的語言 | 適用的格式 | 單價 | 免費額度 |
sensevoice-v1 | 超過50種語言(中、英、日、韓、粵等) | 音頻或視頻 | 0.0007 元/秒 | 36,000秒(10小時) 每月1日0點自動發放 有效期1個月 |
模型選型建議
語種支持:
對于中文(普通話和方言)、粵語、英語、日語、韓語、西班牙語、印尼語、法語、德語、意大利語、馬來語,建議優先選擇Paraformer以獲得更優效果。同時,建議優先選擇paraformer-v2模型。paraformer-v2支持指定語種,包括中文(含普通話和多種方言)、粵語、英語、日語、韓語。指定語種后,系統能夠集中算法資源和語言模型于該特定語種,避免了在多種可能的語種中進行猜測和切換,從而減少了誤識別的概率。
對于其他語言(俄語、泰語等),請選擇SenseVoice,具體請參見附錄:支持語言列表。
情感和事件識別:如果需要情感識別能力(包括高興
<HAPPY>
、傷心<SAD>
、生氣<ANGRY>
和中性<NEUTRAL>
)和4種常見音頻事件識別(包括背景音樂<BGM>
、說話聲<Speech>
、掌聲<Applause>
和笑聲<Laughter>
),請選擇SenseVoice語音識別模型。熱詞定制:如果您的業務領域中,有部分專有名詞和行業術語識別效果不夠好,您可以定制熱詞,將這些詞添加到詞表從而改善識別結果。您可以使用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)
{
"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)
{
"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. 可能影響識別準確率的因素
聲音質量:設備、環境等可能影響語音的清晰度,從而影響識別準確率。高質量的音頻輸入是提高識別準確性的前提。
說話人特征:不同人的聲音特質(如音調、語速、口音、方言)差異很大,這些個體差異會對語音識別系統構成挑戰,尤其是對于未充分訓練過的特定口音或方言。
語言和詞匯:語音識別模型通常針對特定的語言進行訓練。當處理多語言混合、專業術語、俚語或網絡用語時,識別難度會增加。您可以通過熱詞功能,改變識別結果,具體操作請參見Paraformer語音識別熱詞定制與管理。
上下文理解:缺乏對對話上下文的理解可能會導致誤解,尤其是在含義模糊或依賴于上下文的情境中。
2. 支持哪些編程語言
Paraformer實時語音識別:
Java、Python:通過DashScope SDK方式調用,詳見實時語音識別API詳情。
其他編程語言:通過WebSocket方式調用,詳見通過WebSocket連接訪問實時語音識別服務。
Paraformer錄音文件識別:
Java、Python:通過DashScope SDK方式調用,詳見Paraformer錄音文件識別API詳情。
其他編程語言:通過HTTP方式調用,詳見通過HTTP調用接口實現異步轉寫音視頻文件。
SenseVoice錄音文件識別:
Java、Python:通過DashScope SDK方式調用,詳見SenseVoice錄音文件識別API詳情。
其他編程語言:通過HTTP方式調用,詳見通過HTTP調用接口實現異步轉寫音視頻。
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 |