本文介紹Paraformer錄音檔案識別Python SDK的參數和介面細節。
本文檔僅適用於“中國內地(北京)”地區。如需使用模型,需使用“中國內地(北京)”地區的API Key。
使用者指南:關於模型介紹和選型建議請參見錄音檔案識別-Fun-ASR/Paraformer/SenseVoice。
前提條件
已開通服務並擷取API Key。請配置API Key到環境變數(準備下線,併入配置 API Key),而非寫入程式碼在代碼中,防範因代碼泄露導致的安全風險。
說明當您需要為第三方應用或使用者提供臨時存取權限,或者希望嚴格控制敏感性資料訪問、刪除等高風險操作時,建議使用臨時鑒權Token。
與長期有效 API Key 相比,臨時鑒權 Token 具備時效性短(60秒)、安全性高的特點,適用於臨時調用情境,能有效降低API Key泄露的風險。
使用方式:在代碼中,將原本用於鑒權的 API Key 替換為擷取到的臨時鑒權 Token 即可。
模型列表
paraformer-v2 | paraformer-8k-v2 | |
適用情境 | 直播、會議等情境的多語種識別 | 電話客服、語音信箱等情境的中文識別 |
採樣率 | 任意 | 8kHz |
語種 | 中文(包含中文普通話和各種方言)、英文、日語、韓語、德語、法語、俄語 支援的中文方言:上海話、吳語、閩南語、東北話、甘肅話、貴州話、河南話、湖北話、湖南話、江西話、寧夏話、山西話、陝西話、山東話、四川話、天津話、雲南話、粵語 | 中文 |
標點符號預測 | ✅ 預設支援,無需配置 | ✅ 預設支援,無需配置 |
逆文本正則化(ITN) | ✅ 預設支援,無需配置 | ✅ 預設支援,無需配置 |
指定待識別語種 | ✅ 通過 | ❌ |
約束
服務不支援本地音視頻檔案直傳(也不支援base64格式音頻),輸入源需為可通過公網訪問的檔案URL(支援HTTP/HTTPS協議,樣本:https://your-domain.com/file.mp3)。
使用SDK時,若錄音檔案儲存體在阿里雲OSS,不支援使用以 oss://為首碼的臨時 URL。
使用RESTful API時,若錄音檔案儲存體在阿里雲OSS,支援使用以 oss://為首碼的臨時 URL:
臨時 URL 有效期間48小時,到期後無法使用,請勿用於生產環境。
檔案上傳憑證介面限流為 100 QPS 且不支援擴容,請勿用於生產環境、高並發及壓測情境。
生產環境建議使用阿里雲OSS 等穩定儲存,確保檔案長期可用並規避限流問題。
URL通過file_urls參數指定,單次請求最多支援100個URL。
音頻格式
aac、amr、avi、flac、flv、m4a、mkv、mov、mp3、mp4、mpeg、ogg、opus、wav、webm、wma、wmv重要由於音視頻格式及其變種眾多,技術上無法窮盡測試,API不能保證所有格式均能夠被正確識別。請通過測實驗證您所提供的檔案能夠獲得正常的語音辨識結果。
音頻採樣率
採樣率因模型而異:
paraformer-v2 支援任意採樣率
paraformer-8k-v2 僅支援8kHz採樣率
音頻檔案大小和時間長度
音頻檔案不超過2GB;時間長度在12小時以內。
如果希望處理的檔案超過了上述限制,可嘗試對檔案進行預先處理以降低檔案尺寸。有關檔案預先處理的最佳實務可以查閱預先處理視頻檔案以提高檔案轉寫效率(針對錄音檔案識別情境)。
批處理音頻數目
單次請求最多支援100個檔案URL。
可識別語言
因模型而異:
paraformer-v2:
中文,包含中文普通話和各種方言:上海話、吳語、閩南語、東北話、甘肅話、貴州話、河南話、湖北話、湖南話、江西話、寧夏話、山西話、陝西話、山東話、四川話、天津話、雲南話、粵語
英文
日語
韓語
paraformer-8k-v2 僅支援中文
快速開始
核心類(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 | - | 是 | 指定用於音視頻檔案轉寫的Paraformer模型名。參見模型列表。 |
file_urls | list[str] | - | 是 | 音視頻檔案轉寫的URL列表,支援HTTP / HTTPS協議,單次請求最多支援100個URL。 若錄音檔案儲存體在阿里雲OSS,使用SDK方式不支援使用以 oss://為首碼的臨時 URL。 |
channel_id | list[int] | [0] | 否 | 指定在多音軌音頻檔案中需要識別的音軌索引,索引從 0 開始。例如,[0] 表示識別第一個音軌,[0, 1] 表示同時識別第一和第二個音軌。如果省略此參數,則預設處理第一個音軌。 重要 指定的每一個音軌都將獨立計費。例如,為單個檔案請求 [0, 1] 會產生兩筆獨立的費用。 |
disfluency_removal_enabled | bool | False | 否 | 過濾語氣詞,預設關閉。 |
timestamp_alignment_enabled | bool | False | 否 | 是否啟用時間戳記校準功能,預設關閉。 |
special_word_filter | str | - | 否 | 指定在語音辨識過程中需要處理的敏感詞,並支援對不同敏感詞設定不同的處理方式。 若未傳入該參數,系統將啟用系統內建的敏感詞過濾邏輯,識別結果中與阿里雲百鍊敏感詞表匹配的詞語將被替換為等長的 若傳入該參數,則可實現以下敏感詞處理策略:
該參數的值應為一個 JSON 字串,其結構如下所示: JSON欄位說明:
|
language_hints | list[str] | ["zh", "en"] | 否 | 指定待識別語音的語言代碼。 該參數僅適用於paraformer-v2模型。 支援的語言代碼:
|
diarization_enabled | bool | False | 否 | 自動說話人分離,預設關閉。 僅適用於單聲道音頻,多頻道音訊不支援說話人分離。 啟用該功能後,識別結果中將顯示 有關 |
speaker_count | int | - | 否 | 說話人數量參考值。取值範圍為2至100的整數(包含2和100)。 開啟說話人分離功能後( 預設自動判斷說話人數量,如果配置此項,只能輔助演算法盡量輸出指定人數,無法保證一定會輸出此人數。 |
響應結果
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檔案中,您可以通過 |
識別結果說明
識別結果儲存為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 | 預測出的詞之後的標點符號(如有)。 |
關鍵介面
核心類(Transcription)
Transcription可以通過“from dashscope.audio.asr import Transcription”方式引入。
成員方法 | 方法簽名 | 說明 |
async_call | | 非同步提交語音辨識任務。 該方法返回TranscriptionResponse。 |
wait | | 阻塞當前線程直到非同步任務結束(任務狀態為 該方法返回TranscriptionResponse。 |
fetch | | 非同步查詢當前任務執行結果。 該方法返回TranscriptionResponse。 |
錯誤碼
如遇報錯問題,請參見錯誤資訊進行排查。
若問題仍未解決,請加入開發人員群反饋遇到的問題,並提供Request ID,以便進一步排查問題。
當任務包含多個子任務時,只要存在任一子任務成功,整個任務狀態將標記為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
}
}更多樣本
更多樣本,請參見GitHub。
常見問題
功能特性
Q:是否支援Base64編碼方式的音頻?
不支援Base64編碼方式的音頻。僅支援可通過公網訪問的 URL 所指向的音訊識別,不支援識別二進位流,也不支援直接識別本地檔案。
Q:如何將音頻檔案以公網可訪問的URL形式提供?
通常遵循以下幾個步驟(這裡為您提供一種思路,具體情況因不同儲存產品而異,推薦將音頻上傳至阿里雲OSS):
使用SDK時,若錄音檔案儲存體在阿里雲OSS,不支援使用以 oss://為首碼的臨時 URL。
使用RESTful API時,若錄音檔案儲存體在阿里雲OSS,支援使用以 oss://為首碼的臨時 URL:
臨時 URL 有效期間48小時,到期後無法使用,請勿用於生產環境。
檔案上傳憑證介面限流為 100 QPS 且不支援擴容,請勿用於生產環境、高並發及壓測情境。
生產環境建議使用阿里雲OSS 等穩定儲存,確保檔案長期可用並規避限流問題。
Q:多久能擷取識別結果?
任務提交後將進入排隊(PENDING)狀態,排隊時間取決於隊列長度和檔案時間長度,無法明確給出,通常在數分鐘內,請耐心等待。並且音頻時間長度越長,所需時間越久。
故障排查
如遇代碼報錯問題,請根據錯誤碼中的資訊進行排查。
Q:識別結果和語音播放不同步怎麼辦?
將請求參數timestamp_alignment_enabled設為true將啟用時間戳記校準功能,能夠讓識別結果和語音播放同步。
Q:一直輪詢不到結果?
可能是限流原因,請耐心等待。若需擴容,請加入開發人員群進行申請。
Q:無法識別語音(無識別結果)是什麼原因?
請檢查音頻是否符合要求(格式、採樣率)。
若是使用了
paraformer-v2模型,檢查language_hints的設定是否正確。
更多問題
請參見GitHub QA。