PHP Demo
本文介紹如何使用阿里云智能語(yǔ)音服務(wù)提供的PHP SDK,包括SDK的安裝方法及SDK代碼示例。
前提條件
使用SDK前,請(qǐng)先閱讀接口說(shuō)明,詳情請(qǐng)參見(jiàn)接口說(shuō)明。
已開(kāi)通智能語(yǔ)音交互并獲取AccessKey ID和AccessKey Secret,詳情請(qǐng)參見(jiàn)從這里開(kāi)始。
本文PHP示例基于阿里云新版PHP SDK(Alibaba Cloud SDK for PHP)開(kāi)發(fā)。如果您已接入阿里云舊版PHP SDK(aliyun-openapi-php-sdk),仍然可以繼續(xù)使用或者更新到新版SDK(推薦)。
后續(xù)錄音文件識(shí)別的PHP示例更新將基于新版PHP SDK。
SDK說(shuō)明
錄音文件識(shí)別的PHP示例使用了阿里云的PHP SDK提交錄音文件識(shí)別請(qǐng)求和查詢識(shí)別結(jié)果,采用RPC風(fēng)格的POP API調(diào)用方式。
關(guān)于阿里云PHP SDK的詳細(xì)介紹,請(qǐng)參見(jiàn)PHP SDK。
阿里云PHP SDK適用于PHP的5.5.0或更高版本。
安裝PHP SDK
閱讀PHP SDK的安裝方式,詳情請(qǐng)參見(jiàn)安裝Alibaba Cloud SDK for PHP。
調(diào)用步驟
創(chuàng)建一個(gè)全局客戶端。
設(shè)置請(qǐng)求參數(shù),提交錄音文件識(shí)別請(qǐng)求;處理服務(wù)端返回的響應(yīng),獲取任務(wù)ID,用于后續(xù)的識(shí)別結(jié)果輪詢。
根據(jù)任務(wù)ID,輪詢識(shí)別結(jié)果。
代碼示例
下載nls-sample-16k.wav。該錄音文件為PCM編碼格式16000Hz采樣率,管控臺(tái)設(shè)置的模型為通用模型;如果使用其他錄音文件,請(qǐng)?zhí)钊雽?duì)應(yīng)的編碼格式和采樣率,并在管控臺(tái)設(shè)置對(duì)應(yīng)的模型,模型設(shè)置請(qǐng)參見(jiàn)管理項(xiàng)目。
調(diào)用接口前,需配置環(huán)境變量,通過(guò)環(huán)境變量讀取訪問(wèn)憑證。智能語(yǔ)音交互的AccessKey ID、AccessKey Secret和AppKey的環(huán)境變量名:ALIYUN_AK_ID、ALIYUN_AK_SECRET、NLS_APP_KEY。
<?php
require __DIR__ . '/vendor/autoload.php';
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
class NLSFileTrans {
// 請(qǐng)求參數(shù)
private const KEY_APP_KEY = "appkey";
private const KEY_FILE_LINK = "file_link";
private const KEY_VERSION = "version";
private const KEY_ENABLE_WORDS = "enable_words";
// 響應(yīng)參數(shù)
private const KEY_TASK_ID = "TaskId";
private const KEY_STATUS_TEXT = "StatusText";
private const KEY_RESULT = "Result";
// 狀態(tài)值
private const STATUS_SUCCESS = "SUCCESS";
private const STATUS_RUNNING = "RUNNING";
private const STATUS_QUEUEING = "QUEUEING";
function submitFileTransRequest($appKey, $fileLink) {
// 獲取task JSON字符串,包含appkey和file_link參數(shù)等。
// 新接入請(qǐng)使用4.0版本,已接入(默認(rèn)2.0)如需維持現(xiàn)狀,請(qǐng)注釋掉該參數(shù)設(shè)置。
// 設(shè)置是否輸出詞信息,默認(rèn)為false,開(kāi)啟時(shí)需要設(shè)置version為4.0。
$taskArr = array(self::KEY_APP_KEY => $appKey, self::KEY_FILE_LINK => $fileLink, self::KEY_VERSION => "4.0", self::KEY_ENABLE_WORDS => FALSE);
$task = json_encode($taskArr);
print $task . "\n";
try {
// 提交請(qǐng)求,返回服務(wù)端的響應(yīng)。
$submitTaskResponse = AlibabaCloud::nlsFiletrans()
->v20180817()
->submitTask()
->withTask($task)
->request();
print $submitTaskResponse . "\n";
// 獲取錄音文件識(shí)別請(qǐng)求任務(wù)的ID,以供識(shí)別結(jié)果查詢使用。
$taskId = NULL;
$statusText = $submitTaskResponse[self::KEY_STATUS_TEXT];
if (strcmp(self::STATUS_SUCCESS, $statusText) == 0) {
$taskId = $submitTaskResponse[self::KEY_TASK_ID];
}
return $taskId;
} catch (ClientException $exception) {
// 獲取錯(cuò)誤消息
print_r($exception->getErrorMessage());
} catch (ServerException $exception) {
// 獲取錯(cuò)誤消息
print_r($exception->getErrorMessage());
}
}
function getFileTransResult($taskId) {
$result = NULL;
while (TRUE) {
try {
$getResultResponse = AlibabaCloud::nlsFiletrans()
->v20180817()
->getTaskResult()
->withTaskId($taskId)
->request();
print "識(shí)別查詢結(jié)果: " . $getResultResponse . "\n";
$statusText = $getResultResponse[self::KEY_STATUS_TEXT];
if (strcmp(self::STATUS_RUNNING, $statusText) == 0 || strcmp(self::STATUS_QUEUEING, $statusText) == 0) {
// 繼續(xù)輪詢
sleep(10);
}
else {
if (strcmp(self::STATUS_SUCCESS, $statusText) == 0) {
$result = $getResultResponse;
}
// 退出輪詢
break;
}
} catch (ClientException $exception) {
// 獲取錯(cuò)誤消息
print_r($exception->getErrorMessage());
} catch (ServerException $exception) {
// 獲取錯(cuò)誤消息
print_r($exception->getErrorMessage());
}
}
return $result;
}
}
$accessKeyId = getenv('ALIYUN_AK_ID');
$accessKeySecret = getenv('ALIYUN_AK_SECRET');
$appKey = getenv('NLS_APP_KEY');
$fileLink = "https://gw.alipayobjects.com/os/bmw-prod/0574ee2e-f494-45a5-820f-63aee583045a.wav";
/**
* 第一步:設(shè)置一個(gè)全局客戶端。
* 使用阿里云RAM賬號(hào)的AccessKey ID和AccessKey Secret進(jìn)行鑒權(quán)。
*/
AlibabaCloud::accessKeyClient($accessKeyId, $accessKeySecret)
->regionId("cn-shanghai")
->asGlobalClient();
$fileTrans = new NLSFileTrans();
/**
* 第二步:提交錄音文件識(shí)別請(qǐng)求,獲取任務(wù)ID,用于后續(xù)的識(shí)別結(jié)果輪詢。
*/
$taskId = $fileTrans->submitFileTransRequest($appKey, $fileLink);
if ($taskId != NULL) {
print "錄音文件識(shí)別請(qǐng)求成功,task_id: " . $taskId . "\n";
}
else {
print "錄音文件識(shí)別請(qǐng)求失敗!";
return ;
}
/**
* 第三步:根據(jù)任務(wù)ID輪詢識(shí)別結(jié)果。
*/
$result = $fileTrans->getFileTransResult($taskId);
if ($result != NULL) {
print "錄音文件識(shí)別結(jié)果查詢成功: " . $result . "\n";
}
else {
print "錄音文件識(shí)別結(jié)果查詢失敗!";
}