本文介紹如何使用阿里云智能語音服務提供的Node.js SDK,包括SDK的安裝方法及SDK代碼示例。
前提條件
示例說明
錄音文件識別示例使用Node.js SDK提交識別請求和查詢識別結果,采用的是RPC風格的POP API調用方式。
關于阿里云Node.js SDK請參見快速開始。
SDK安裝
說明
阿里云Node.js SDK適用于Node.js 4.x和Node.js 6.x 兩個LTS版本。您可以通過執行命令node -v
查看Node.js版本。
所有阿里云官方的Node.js SDK均位于@alicloud
下。錄音文件識別的Node.js示例依賴@alicloud/nls-filetrans-2018-08-17
,在示例文件所在目錄,執行如下命令安裝Node.js依賴模塊:
npm install @alicloud/nls-filetrans-2018-08-17 --save
調用步驟
創建并初始化阿里云鑒權對象。
設置請求參數,提交錄音文件識別請求,處理服務端返回的響應并獲取任務ID。
設置查詢參數為任務ID,輪詢該任務的識別結果。
代碼示例
下載nls-sample-16k.wav。該錄音文件為PCM編碼格式16000Hz采樣率,管控臺設置的模型為通用模型;如果使用其他錄音文件,請填入對應的編碼格式和采樣率,并在管控臺設置對應的模型,模型設置請參見管理項目。
調用接口前,需配置環境變量,通過環境變量讀取訪問憑證。智能語音交互的AccessKey ID、AccessKey Secret和AppKey的環境變量名:ALIYUN_AK_ID、ALIYUN_AK_SECRET、NLS_APP_KEY。
'use strict';
const Client = require('@alicloud/nls-filetrans-2018-08-17');
function fileTrans(akID, akSecret, appKey, fileLink) {
//地域ID,固定值。
var ENDPOINT = 'http://filetrans.cn-shanghai.aliyuncs.com';
var API_VERSION = '2018-08-17';
/**
* 創建阿里云鑒權client
*/
var client = new Client({
accessKeyId: akID, //獲取AccessKey ID和AccessKey Secret請前往控制臺:https://ram.console.aliyun.com/manage/ak
secretAccessKey: akSecret,
endpoint: ENDPOINT,
apiVersion: API_VERSION
});
/**
* 提交錄音文件識別請求,請求參數組合成JSON格式的字符串作為task的值。
* 請求參數appkey:項目appkey,獲取Appkey請前往控制臺:https://nls-portal.console.aliyun.com/applist
* 請求參數file_link:需要識別的錄音文件。
*/
var task = {
appkey : appKey,
file_link : fileLink,
version : "4.0", // 新接入請使用4.0版本,已接入(默認2.0)如需維持現狀,請注釋掉該參數設置。
enable_words : false // 設置是否輸出詞信息,默認值為false,開啟時需要設置version為4.0。
};
task = JSON.stringify(task);
var taskParams = {
Task : task
};
var options = {
method: 'POST'
};
// 提交錄音文件識別請求,處理服務端返回的響應。
client.submitTask(taskParams, options).then((response) => {
console.log(response);
// 服務端響應信息的狀態描述StatusText。
var statusText = response.StatusText;
if (statusText != 'SUCCESS') {
console.log('錄音文件識別請求響應失敗!')
return;
}
console.log('錄音文件識別請求響應成功!');
// 獲取錄音文件識別請求任務的TaskId,以供識別結果查詢使用。
var taskId = response.TaskId;
/**
* 以TaskId為查詢參數,提交識別結果查詢請求。
* 以輪詢的方式進行識別結果的查詢,直到服務端返回的狀態描述為"SUCCESS"、SUCCESS_WITH_NO_VALID_FRAGMENT,
* 或者為錯誤描述,則結束輪詢。
*/
var taskIdParams = {
TaskId : taskId
};
var timer = setInterval(() => {
client.getTaskResult(taskIdParams).then((response) => {
console.log('識別結果查詢響應:');
console.log(response);
var statusText = response.StatusText;
if (statusText == 'RUNNING' || statusText == 'QUEUEING') {
// 繼續輪詢,注意間隔周期。
}
else {
if (statusText == 'SUCCESS' || statusText == 'SUCCESS_WITH_NO_VALID_FRAGMENT') {
console.log('錄音文件識別成功:');
var sentences = response.Result;
console.log(sentences);
}
else {
console.log('錄音文件識別失敗!');
}
// 退出輪詢
clearInterval(timer);
}
}).catch((error) => {
console.error(error);
// 異常情況,退出輪詢。
clearInterval(timer);
});
}, 10000);
}).catch((error) => {
console.error(error);
});
}
var akId = process.env.ALIYUN_AK_ID;
var akSecret = process.env.ALIYUN_AK_SECRET;
var appKey = process.env.NLS_APP_KEY;
var fileLink = 'https://gw.alipayobjects.com/os/bmw-prod/0574ee2e-f494-45a5-820f-63aee583045a.wav';
fileTrans(akId, akSecret, appKey, fileLink);
文檔內容是否對您有幫助?