提示:
- 在使用SDK之前,请先确保已阅读了 接口说明文档。
- 本文档中的SDK只适用于7月5日新发布的2.0版语音服务,如果您是之前开通的,要使用此SDK需要新开通2.0版服务。
- 本文档PHP Demo是基于阿里云新版PHP SDK(Alibaba Cloud SDK for PHP)开发,您可直接使用。如果您已经接入阿里云旧版PHP SDK(aliyun-openapi-php-sdk),可选择继续使用旧版SDK,或者更新到新版SDK(推荐),后续录音文件识别的PHP Demo的更新将基于阿里云新版PHP SDK 。
SDK 说明
录音文件识别的PHP Demo使用了阿里云的PHP SDK用来提交录音文件识别请求和结果查询,采用的是RPC风格的POP API调用。阿里云PHP SDK的详细介绍请阅读阿里云PHP SDK 快速开始。
阿里云PHP SDK适用于PHP的5.5.0或更高版本。
安装阿里云PHP SDK
请阅读PHP SDK最新安装方式,打开链接。
1. 下载并安装Composer
Linux:
curl -sS https://getcomposer.org/installer | php
Windows:单击这里下载并安装Composer。
2. 执行Composer命令安装Alibaba Cloud SDK for PHP的最新版本
在Demo文件所在目录下执行以下命令,会生成一个composer.json文件和vendor目录:
php -d memory_limit=-1 composer.phar require alibabacloud/sdk
php -d memory_limit=-1 composer.phar dump-autoload --optimize
注意: composer.phar如果不在当前目录,应改为绝对路径。
3. 在代码中引入Composer自动加载工具
<?php
require __DIR__ . '/vendor/autoload.php';
注意: 如上设置Demo文件应与vendor同一个目录,否则需要替换为autoload.php所在的路径,如require '/path/to/vendor/autoload.php';
调用步骤
- 创建一个全局客户端,鉴权使用了阿里云账号的AccessKey ID和AccessKey Secret(获取方法请阅读开通服务一节)。
- 设置请求参数,提交录音文件识别请求;处理服务端返回的响应,获取任务ID,用于后续的识别结果轮询。
- 根据任务ID,轮询识别结果。
Demo 示例
录音文件说明: Demo中使用的录音文件为PCM编码格式16000Hz采样率,管控台设置的模型为通用模型;如果使用其他录音文件,请填入对应的编码格式和采样率,并在管控台设置对应的模型,模型设置请阅读管理项目一节。
nls-sample-16k.wav
阿里云鉴权:使用过程中,所有的调用均通过阿里云账号来完成鉴权操作。通过传入阿里云账号的AccessKey ID和AccessKey Secret(获取方法请阅读 开通服务 一节)。
示例
<?php
require __DIR__ . '/vendor/autoload.php';
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
class NLSFileTrans {
// 请求参数key
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";
// 响应参数key
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 = "您的AccessKey Id";
$accessKeySecret = "您的AccessKey Secret";
$appKey = "您的appkey";
$fileLink = "https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/examples/nls-sample-16k.wav";
/**
* 第一步:设置一个全局客户端
* 使用阿里云RAM账号的AccessKey ID和AccessKey Secret进行鉴权
*/
AlibabaCloud::accessKeyClient($accessKeyId, $accessKeySecret)
->regionId("ap-southeast-1")
->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 "录音文件识别结果查询失败!";
}