Node.js Demo
本文介紹如何使用阿里云智能語音服務(wù)提供的Node.js SDK,包括SDK的安裝方法及SDK代碼示例。
前提條件
示例說明
錄音文件識別示例使用Node.js SDK提交識別請求和查詢識別結(jié)果,采用的是RPC風(fēng)格的POP API調(diào)用方式。
關(guān)于阿里云Node.js SDK請參見快速開始。
SDK安裝
阿里云Node.js SDK適用于Node.js 4.x和Node.js 6.x 兩個LTS版本。您可以通過執(zhí)行命令node -v
查看Node.js版本。
所有阿里云官方的Node.js SDK均位于aliyun-nls-filetrans
下。錄音文件識別的Node.js示例依賴aliyun-nls-filetrans
,在示例文件所在目錄,執(zhí)行如下命令安裝Node.js依賴模塊:
npm install aliyun-nls-filetrans --save
調(diào)用步驟
創(chuàng)建并初始化阿里云鑒權(quán)對象。
設(shè)置請求參數(shù),提交錄音文件識別請求,處理服務(wù)端返回的響應(yīng)并獲取任務(wù)ID。
設(shè)置查詢參數(shù)為任務(wù)ID,輪詢該任務(wù)的識別結(jié)果。
代碼示例
下載nls-sample-16k.wav。該錄音文件為PCM編碼格式16000 Hz采樣率,管控臺設(shè)置的模型為通用模型;如果使用其他錄音文件,請?zhí)钊雽?yīng)的編碼格式和采樣率,并在管控臺設(shè)置對應(yīng)的模型,模型設(shè)置請參見管理項目。
調(diào)用接口前,需配置環(huán)境變量,通過環(huán)境變量讀取訪問憑證。智能語音交互的AccessKey ID、AccessKey Secret和AppKey的環(huán)境變量名:ALIYUN_AK_ID、ALIYUN_AK_SECRET、NLS_APP_KEY。
'use strict';
const Client = require('aliyun-nls-filetrans');
function fileTrans(akID, akSecret, appKey, fileLink) {
//地域ID,固定值。
var ENDPOINT = 'http://speechfiletranscriberlite.cn-shanghai.aliyuncs.com';
var API_VERSION = '2021-12-21';
/**
* 創(chuàng)建阿里云鑒權(quán)client
*/
var client = new Client({
accessKeyId: akID,
secretAccessKey: akSecret,
endpoint: ENDPOINT,
apiVersion: API_VERSION
});
/**
* 提交錄音文件識別請求,請求參數(shù)組合成JSON格式的字符串作為task的值。
* 請求參數(shù)appkey:項目Appkey,獲取Appkey請前往控制臺:https://nls-portal.console.aliyun.com/applist
* 請求參數(shù)file_link:需要識別的錄音文件。
*/
var task = {
appkey : appKey,
file_link : fileLink,
enable_words : false // 設(shè)置是否輸出詞信息,默認(rèn)值為false。
};
task = JSON.stringify(task);
var taskParams = {
Task : task
};
var options = {
method: 'POST'
};
// 提交錄音文件識別請求,處理服務(wù)端返回的響應(yīng)。
client.submitTask(taskParams, options).then((response) => {
console.log(response);
// 服務(wù)端響應(yīng)信息的狀態(tài)描述StatusText。
var statusText = response.StatusText;
if (statusText != 'SUCCESS') {
console.log('錄音文件識別請求響應(yīng)失敗!')
return;
}
console.log('錄音文件識別請求響應(yīng)成功!');
// 獲取錄音文件識別請求任務(wù)的TaskId,以供識別結(jié)果查詢使用。
var taskId = response.TaskId;
/**
* 以TaskId為查詢參數(shù),提交識別結(jié)果查詢請求。
* 以輪詢的方式進(jìn)行識別結(jié)果的查詢,直到服務(wù)端返回的狀態(tài)描述為"SUCCESS"、SUCCESS_WITH_NO_VALID_FRAGMENT,
* 或者為錯誤描述,則結(jié)束輪詢。
*/
var taskIdParams = {
TaskId : taskId
};
var timer = setInterval(() => {
client.getTaskResult(taskIdParams).then((response) => {
console.log('識別結(jié)果查詢響應(yīng):');
console.log(response);
var statusText = response.StatusText;
if (statusText == 'RUNNING' || statusText == 'QUEUEING') {
// 繼續(xù)輪詢,注意間隔周期。
}
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);