本文介绍如何使用阿里云智能语音服务提供的PHP SDK,包括SDK的安装方法及SDK代码示例。
前提条件
说明
本文PHP示例基于阿里云新版PHP SDK(Alibaba Cloud SDK for PHP)开发。如果您已接入阿里云旧版PHP SDK(aliyun-openapi-php-sdk),仍然可以继续使用或者更新到新版SDK(推荐)。
后续录音文件识别的PHP示例更新将基于新版PHP SDK。
SDK说明
录音文件识别的PHP示例使用了阿里云的PHP SDK提交录音文件识别请求和查询识别结果,采用RPC风格的POP API调用方式。
关于阿里云PHP SDK的详细介绍,请参见PHP SDK。
重要
阿里云PHP SDK适用于PHP的5.5.0或更高版本。
安装PHP SDK
阅读PHP SDK的安装方式,详情请参见安装Alibaba Cloud SDK for PHP。
调用步骤
创建一个全局客户端。
设置请求参数,提交录音文件识别请求;处理服务端返回的响应,获取任务ID,用于后续的识别结果轮询。
根据任务ID,轮询识别结果。
代码示例
下载nls-sample-16k.wav。该录音文件为PCM编码格式16000Hz采样率,管控台设置的模型为通用模型;如果使用其他录音文件,请填入对应的编码格式和采样率,并在管控台设置对应的模型,模型设置请参见管理项目。
调用接口前,需配置环境变量,通过环境变量读取访问凭证。智能语音交互的AccessKey ID、AccessKey Secret和AppKey的环境变量名: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 {
// 请求参数
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";
// 响应参数
private const KEY_TASK_ID = "TaskId";
private const KEY_STATUS_TEXT = "StatusText";
private const KEY_RESULT = "Result";
// 状态值
private const STATUS_SUCCESS = "SUCCESS";
private const STATUS_RUNNING = "RUNNING";
private const STATUS_QUEUEING = "QUEUEING";
function submitFileTransRequest($appKey, $fileLink) {
// 获取task JSON字符串,包含appkey和file_link参数等。
// 新接入请使用4.0版本,已接入(默认2.0)如需维持现状,请注释掉该参数设置。
// 设置是否输出词信息,默认为false,开启时需要设置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 {
// 提交请求,返回服务端的响应。
$submitTaskResponse = AlibabaCloud::nlsFiletrans()
->v20180817()
->submitTask()
->withTask($task)
->request();
print $submitTaskResponse . "\n";
// 获取录音文件识别请求任务的ID,以供识别结果查询使用。
$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) {
// 获取错误消息
print_r($exception->getErrorMessage());
} catch (ServerException $exception) {
// 获取错误消息
print_r($exception->getErrorMessage());
}
}
function getFileTransResult($taskId) {
$result = NULL;
while (TRUE) {
try {
$getResultResponse = AlibabaCloud::nlsFiletrans()
->v20180817()
->getTaskResult()
->withTaskId($taskId)
->request();
print "识别查询结果: " . $getResultResponse . "\n";
$statusText = $getResultResponse[self::KEY_STATUS_TEXT];
if (strcmp(self::STATUS_RUNNING, $statusText) == 0 || strcmp(self::STATUS_QUEUEING, $statusText) == 0) {
// 继续轮询
sleep(10);
}
else {
if (strcmp(self::STATUS_SUCCESS, $statusText) == 0) {
$result = $getResultResponse;
}
// 退出轮询
break;
}
} catch (ClientException $exception) {
// 获取错误消息
print_r($exception->getErrorMessage());
} catch (ServerException $exception) {
// 获取错误消息
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";
/**
* 第一步:设置一个全局客户端。
* 使用阿里云RAM账号的AccessKey ID和AccessKey Secret进行鉴权。
*/
AlibabaCloud::accessKeyClient($accessKeyId, $accessKeySecret)
->regionId("cn-shanghai")
->asGlobalClient();
$fileTrans = new NLSFileTrans();
/**
* 第二步:提交录音文件识别请求,获取任务ID,用于后续的识别结果轮询。
*/
$taskId = $fileTrans->submitFileTransRequest($appKey, $fileLink);
if ($taskId != NULL) {
print "录音文件识别请求成功,task_id: " . $taskId . "\n";
}
else {
print "录音文件识别请求失败!";
return ;
}
/**
* 第三步:根据任务ID轮询识别结果。
*/
$result = $fileTrans->getFileTransResult($taskId);
if ($result != NULL) {
print "录音文件识别结果查询成功: " . $result . "\n";
}
else {
print "录音文件识别结果查询失败!";
}
文档内容是否对您有帮助?