本文介紹如何使用阿里云智能語音服務提供的Python SDK,包括SDK的安裝方法及SDK代碼示例。
前提條件
SDK說明
錄音文件識別的Python示例使用了阿里云Python SDK的CommonRequest提交錄音文件識別請求和查詢識別結果,采用RPC風格的POP API調用方式。
關于使用阿里云Python SDK,請參見使用Python SDK。
關于Python SDK CommonRequest的使用方法,請參見使用CommonRequest進行調用。
SDK安裝
運行錄音文件識別Python示例,只需安裝阿里云Python SDK的核心庫。
阿里云Python SDK支持python版本如下,并提供pip和GitHub兩種安裝方式。
Python 2.6及以上
Python 2.7及以上
Python 3及以上
使用pip安裝(推薦):
執行如下命令,通過pip安裝Python SDK,版本為2.13.3:
pip install aliyun-python-sdk-core==2.13.3
調用步驟
創建并初始化AcsClient實例。
創建錄音文件識別請求,設置請求參數。
提交錄音文件識別請求,處理服務端返回的響應,獲取任務ID。
創建識別結果查詢請求,設置查詢參數為任務ID。
輪詢識別結果。
示例代碼
下載nls-sample-16k.wav。示例中使用的錄音文件為PCM編碼格式16000Hz采樣率,管控臺設置的模型為通用模型;如果使用其他錄音文件,請填入對應的編碼格式和采樣率,并在管控臺設置對應的模型,關于模型設置參見管理項目。
調用接口前,需配置環境變量,通過環境變量讀取訪問憑證。智能語音交互的AccessKey ID、AccessKey Secret和AppKey的環境變量名:ALIYUN_AK_ID、ALIYUN_AK_SECRET、NLS_APP_KEY。
# -*- coding: utf8 -*-
import json
import time
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
def fileTrans(akId, akSecret, appKey, fileLink) :
# 地域ID,固定值。
REGION_ID = "cn-shanghai"
PRODUCT = "nls-filetrans"
DOMAIN = "filetrans.cn-shanghai.aliyuncs.com"
API_VERSION = "2018-08-17"
POST_REQUEST_ACTION = "SubmitTask"
GET_REQUEST_ACTION = "GetTaskResult"
# 請求參數
KEY_APP_KEY = "appkey"
KEY_FILE_LINK = "file_link"
KEY_VERSION = "version"
KEY_ENABLE_WORDS = "enable_words"
# 是否開啟智能分軌
KEY_AUTO_SPLIT = "auto_split"
# 響應參數
KEY_TASK = "Task"
KEY_TASK_ID = "TaskId"
KEY_STATUS_TEXT = "StatusText"
KEY_RESULT = "Result"
# 狀態值
STATUS_SUCCESS = "SUCCESS"
STATUS_RUNNING = "RUNNING"
STATUS_QUEUEING = "QUEUEING"
# 創建AcsClient實例
client = AcsClient(akId, akSecret, REGION_ID)
# 提交錄音文件識別請求
postRequest = CommonRequest()
postRequest.set_domain(DOMAIN)
postRequest.set_version(API_VERSION)
postRequest.set_product(PRODUCT)
postRequest.set_action_name(POST_REQUEST_ACTION)
postRequest.set_method('POST')
# 新接入請使用4.0版本,已接入(默認2.0)如需維持現狀,請注釋掉該參數設置。
# 設置是否輸出詞信息,默認為false,開啟時需要設置version為4.0。
task = {KEY_APP_KEY : appKey, KEY_FILE_LINK : fileLink, KEY_VERSION : "4.0", KEY_ENABLE_WORDS : False}
# 開啟智能分軌,如果開啟智能分軌,task中設置KEY_AUTO_SPLIT為True。
# task = {KEY_APP_KEY : appKey, KEY_FILE_LINK : fileLink, KEY_VERSION : "4.0", KEY_ENABLE_WORDS : False, KEY_AUTO_SPLIT : True}
task = json.dumps(task)
print(task)
postRequest.add_body_params(KEY_TASK, task)
taskId = ""
try :
postResponse = client.do_action_with_exception(postRequest)
postResponse = json.loads(postResponse)
print (postResponse)
statusText = postResponse[KEY_STATUS_TEXT]
if statusText == STATUS_SUCCESS :
print ("錄音文件識別請求成功響應!")
taskId = postResponse[KEY_TASK_ID]
else :
print ("錄音文件識別請求失敗!")
return
except ServerException as e:
print (e)
except ClientException as e:
print (e)
# 創建CommonRequest,設置任務ID。
getRequest = CommonRequest()
getRequest.set_domain(DOMAIN)
getRequest.set_version(API_VERSION)
getRequest.set_product(PRODUCT)
getRequest.set_action_name(GET_REQUEST_ACTION)
getRequest.set_method('GET')
getRequest.add_query_param(KEY_TASK_ID, taskId)
# 提交錄音文件識別結果查詢請求
# 以輪詢的方式進行識別結果的查詢,直到服務端返回的狀態描述符為"SUCCESS"、"SUCCESS_WITH_NO_VALID_FRAGMENT",
# 或者為錯誤描述,則結束輪詢。
statusText = ""
while True :
try :
getResponse = client.do_action_with_exception(getRequest)
getResponse = json.loads(getResponse)
print (getResponse)
statusText = getResponse[KEY_STATUS_TEXT]
if statusText == STATUS_RUNNING or statusText == STATUS_QUEUEING :
# 繼續輪詢
time.sleep(10)
else :
# 退出輪詢
break
except ServerException as e:
print (e)
except ClientException as e:
print (e)
if statusText == STATUS_SUCCESS :
print ("錄音文件識別成功!")
else :
print ("錄音文件識別失敗!")
return
accessKeyId = os.getenv('ALIYUN_AK_ID')
accessKeySecret = os.getenv('ALIYUN_AK_SECRET')
appKey = os.getenv('NLS_APP_KEY')
fileLink = "https://gw.alipayobjects.com/os/bmw-prod/0574ee2e-f494-45a5-820f-63aee583045a.wav"
# 執行錄音文件識別
fileTrans(accessKeyId, accessKeySecret, appKey, fileLink)
文檔內容是否對您有幫助?