全部产品
云市场

PHP Demo

更新时间:2019-10-16 10:03:31

提示:

  • 在使用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,旧版 PHP Demo 不再更新。

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:

    1. curl -sS https://getcomposer.org/installer | php
  • Windows:单击这里下载并安装Composer。

2. 执行Composer命令安装Alibaba Cloud SDK for PHP的最新版本

在Demo文件所在目录下执行以下命令,会生成一个composer.json文件和vendor目录:

  1. php -d memory_limit=-1 composer.phar require alibabacloud/sdk
  2. php -d memory_limit=-1 composer.phar dump-autoload --optimize

注意: composer.phar如果不在当前目录,应改为绝对路径。

3. 在代码中引入Composer自动加载工具

  1. <?php
  2. require __DIR__ . '/vendor/autoload.php';

注意: 如上设置Demo文件应与vendor同一个目录,否则需要替换为autoload.php所在的路径,如require '/path/to/vendor/autoload.php';

调用步骤

  1. 创建一个全局客户端,鉴权使用了阿里云账号的AccessKey ID和AccessKey Secret(获取方法请阅读开通服务一节)。
  2. 设置请求参数,提交录音文件识别请求;处理服务端返回的响应,获取任务ID,用于后续的识别结果轮询。
  3. 根据任务ID,轮询识别结果。

Demo 示例

录音文件说明: Demo中使用的录音文件为PCM编码格式16000Hz采样率,管控台设置的模型为通用模型;如果使用其他录音文件,请填入对应的编码格式和采样率,并在管控台设置对应的模型,模型设置请阅读管理项目一节。

nls-sample-16k.wav


阿里云鉴权:使用过程中,所有的调用均通过阿里云账号来完成鉴权操作。通过传入阿里云账号的AccessKey ID和AccessKey Secret(获取方法请阅读 开通服务 一节)。

示例

  1. <?php
  2. require __DIR__ . '/vendor/autoload.php';
  3. use AlibabaCloud\Client\AlibabaCloud;
  4. use AlibabaCloud\Client\Exception\ClientException;
  5. use AlibabaCloud\Client\Exception\ServerException;
  6. class NLSFileTrans {
  7. // 请求参数key
  8. private const KEY_APP_KEY = "appkey";
  9. private const KEY_FILE_LINK = "file_link";
  10. private const KEY_VERSION = "version";
  11. private const KEY_ENABLE_WORDS = "enable_words";
  12. // 响应参数key
  13. private const KEY_TASK_ID = "TaskId";
  14. private const KEY_STATUS_TEXT = "StatusText";
  15. private const KEY_RESULT = "Result";
  16. // 状态值
  17. private const STATUS_SUCCESS = "SUCCESS";
  18. private const STATUS_RUNNING = "RUNNING";
  19. private const STATUS_QUEUEING = "QUEUEING";
  20. function submitFileTransRequest($appKey, $fileLink) {
  21. // 获取task json字符串,包含appkey和file_link参数等;
  22. // 新接入请使用4.0版本,已接入(默认2.0)如需维持现状,请注释掉该参数设置
  23. // 设置是否输出词信息,默认为false,开启时需要设置version为4.0
  24. $taskArr = array(self::KEY_APP_KEY => $appKey, self::KEY_FILE_LINK => $fileLink, self::KEY_VERSION => "4.0", self::KEY_ENABLE_WORDS => FALSE);
  25. $task = json_encode($taskArr);
  26. print $task . "\n";
  27. try {
  28. // 提交请求,返回服务端的响应
  29. $submitTaskResponse = AlibabaCloud::nlsFiletrans()
  30. ->v20180817()
  31. ->submitTask()
  32. ->withTask($task)
  33. ->request();
  34. print $submitTaskResponse . "\n";
  35. // 获取录音文件识别请求任务的ID,以供识别结果查询使用
  36. $taskId = NULL;
  37. $statusText = $submitTaskResponse[self::KEY_STATUS_TEXT];
  38. if (strcmp(self::STATUS_SUCCESS, $statusText) == 0) {
  39. $taskId = $submitTaskResponse[self::KEY_TASK_ID];
  40. }
  41. return $taskId;
  42. } catch (ClientException $exception) {
  43. // 获取错误消息
  44. print_r($exception->getErrorMessage());
  45. } catch (ServerException $exception) {
  46. // 获取错误消息
  47. print_r($exception->getErrorMessage());
  48. }
  49. }
  50. function getFileTransResult($taskId) {
  51. $result = NULL;
  52. while (TRUE) {
  53. try {
  54. $getResultResponse = AlibabaCloud::nlsFiletrans()
  55. ->v20180817()
  56. ->getTaskResult()
  57. ->withTaskId($taskId)
  58. ->request();
  59. print "识别查询结果: " . $getResultResponse . "\n";
  60. $statusText = $getResultResponse[self::KEY_STATUS_TEXT];
  61. if (strcmp(self::STATUS_RUNNING, $statusText) == 0 || strcmp(self::STATUS_QUEUEING, $statusText) == 0) {
  62. // 继续轮询
  63. sleep(3);
  64. }
  65. else {
  66. if (strcmp(self::STATUS_SUCCESS, $statusText) == 0) {
  67. $result = $getResultResponse;
  68. }
  69. // 退出轮询
  70. break;
  71. }
  72. } catch (ClientException $exception) {
  73. // 获取错误消息
  74. print_r($exception->getErrorMessage());
  75. } catch (ServerException $exception) {
  76. // 获取错误消息
  77. print_r($exception->getErrorMessage());
  78. }
  79. }
  80. return $result;
  81. }
  82. }
  83. $accessKeyId = "您的AccessKey Id";
  84. $accessKeySecret = "您的AccessKey Secret";
  85. $appKey = "您的appkey";
  86. $fileLink = "https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/examples/nls-sample-16k.wav";
  87. /**
  88. * 第一步:设置一个全局客户端
  89. * 使用阿里云RAM账号的AccessKey ID和AccessKey Secret进行鉴权
  90. */
  91. AlibabaCloud::accessKeyClient($accessKeyId, $accessKeySecret)
  92. ->regionId("cn-shanghai")
  93. ->asGlobalClient();
  94. $fileTrans = new NLSFileTrans();
  95. /**
  96. * 第二步:提交录音文件识别请求,获取任务ID,用于后续的识别结果轮询
  97. */
  98. $taskId = $fileTrans->submitFileTransRequest($appKey, $fileLink);
  99. if ($taskId != NULL) {
  100. print "录音文件识别请求成功,task_id: " . $taskId . "\n";
  101. }
  102. else {
  103. print "录音文件识别请求失败!";
  104. return ;
  105. }
  106. /**
  107. * 第三步:根据任务ID轮询识别结果
  108. */
  109. $result = $fileTrans->getFileTransResult($taskId);
  110. if ($result != NULL) {
  111. print "录音文件识别结果查询成功: " . $result . "\n";
  112. }
  113. else {
  114. print "录音文件识别结果查询失败!";
  115. }