全部产品
云市场

基于阿里云aliyun-openapi-php-sdk PHP Demo

更新时间:2019-01-23 14:27:12

提示:

  • 在使用SDK之前,请先确保已阅读了接口说明文档
  • 本文档中的SDK只适用于7月5日新发布的2.0版语音服务,如果您是之前开通的,要使用此SDK需要新开通2.0版服务
  • 本文档使用的阿里云PHP SDK为aliyun-openapi-php-sdk,对于已经上线的用户,可以继续使用,对于新用户,请直接使用阿里云新版PHP SDK:Alibaba Cloud SDK for PHP,录音文件识别PHP Demo的更新也将基于新版PHP SDK。基于新版阿里云PHP SDK的Demo链接https://help.aliyun.com/document_detail/94067.html

SDK 说明

录音文件识别的PHP Demo使用了阿里云的PHP SDK用来提交录音文件识别请求和结果查询,采用的是RPC风格的POP API调用。阿里云PHP SDK的详细介绍请阅读阿里云PHP SDK。阿里云PHP SDK适用于PHP的5.3、5.4、5.5、5.6、7.0和7.1版本。

安装阿里云PHP SDK

1. 执行以下命令在GitHub中下载PHP SDK的源代码

  1. git clone https://github.com/aliyun/aliyun-openapi-php-sdk.git

2. 添加PHP SDK引用

假设PHP SDK下载后的路径为 /path/to/aliyun-openapi-php-sdk:

  1. require_once '/path/to/aliyun-openapi-php-sdk/aliyun-php-sdk-core/Config.php';
  2. require_once '/path/to/aliyun-openapi-php-sdk/aliyun-php-sdk-nls-filetrans/nls_filetrans/Request/V20180817/SubmitTaskRequest.php';
  3. require_once '/path/to/aliyun-openapi-php-sdk/aliyun-php-sdk-nls-filetrans/nls_filetrans/Request/V20180817/GetTaskResultRequest.php';

调用步骤

  1. 创建并初始化DefaultAcsClient实例,鉴权使用了阿里云账号的AccessKey ID和AccessKey Secret(获取方法请阅读开通服务一节)。
  2. 创建录音文件识别请求SubmitTaskRequest实例,并设置请求参数。
  3. 提交录音文件识别请求,处理服务端返回的响应,获取任务ID,供轮询识别结果使用。
  4. 创建识别结果查询请求GetTaskResultRequest实例,设置查询参数为任务的ID。
  5. 轮询该任务的识别结果。

Demo 示例

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

nls-sample-16k.wav

示例

  1. <?php
  2. // 修改成自己的SDK路径
  3. require_once '/path/to/aliyun-openapi-php-sdk/aliyun-php-sdk-core/Config.php';
  4. require_once '/path/to/aliyun-openapi-php-sdk/aliyun-php-sdk-nls-filetrans/nls_filetrans/Request/V20180817/SubmitTaskRequest.php';
  5. require_once '/path/to/aliyun-openapi-php-sdk/aliyun-php-sdk-nls-filetrans/nls_filetrans/Request/V20180817/GetTaskResultRequest.php';
  6. use nls_filetrans\Request\V20180817\SubmitTaskRequest;
  7. use nls_filetrans\Request\V20180817\GetTaskResultRequest;
  8. /**
  9. * 地域ID
  10. * 常量内容,请勿改变
  11. */
  12. define("REGION_ID", "cn-shanghai");
  13. define("ENDPOINT_NAME", "cn-shanghai");
  14. define("PRODUCT", "nls-filetrans");
  15. define("DOMAIN", "filetrans.cn-shanghai.aliyuncs.com");
  16. define("API_VERSION", "2018-08-17");
  17. define("POST_REQUEST_ACTION", "SubmitTask");
  18. define("GET_REQUEST_ACTION", "GetTaskResult");
  19. /**
  20. * 参数设置Key
  21. * 常量内容,请勿改变
  22. */
  23. define("KEY_APP_KEY", "app_key");
  24. define("KEY_FILE_LINK", "file_link");
  25. define("KEY_TASK", "Task");
  26. define("KEY_TASK_ID", "TaskId");
  27. define("KEY_STATUS_TEXT", "StatusText");
  28. function fileTrans($accessKeyId, $accessKeySecret, $appKey, $fileLink) {
  29. // 设置endpoint
  30. DefaultProfile::addEndpoint(
  31. ENDPOINT_NAME,
  32. REGION_ID,
  33. PRODUCT,
  34. DOMAIN);
  35. /**
  36. * 创建阿里云鉴权client
  37. */
  38. $clientProfile = DefaultProfile::getProfile(
  39. REGION_ID,
  40. $accessKeyId,
  41. $accessKeySecret);
  42. $client = new DefaultAcsClient($clientProfile);
  43. /**
  44. * 创建提交录音文件识别请求,设置请求参数
  45. */
  46. $submitTaskRequest = new SubmitTaskRequest();
  47. // 获取task json字符串,包含app_key和file_link参数
  48. $taskArr = array(KEY_APP_KEY => $appKey, KEY_FILE_LINK => $fileLink);
  49. $task = json_encode($taskArr);
  50. print $task . "\n";
  51. // 设置task
  52. $submitTaskRequest->setTask($task);
  53. try {
  54. /**
  55. * 提交录音文件识别请求,处理服务端返回的响应
  56. */
  57. $submitTaskResponse = $client->getAcsResponse($submitTaskRequest);
  58. print_r($submitTaskResponse);
  59. // 获取录音文件识别请求任务的ID,以供识别结果查询使用
  60. $taskId = "";
  61. $statusText = ((array)$submitTaskResponse)[KEY_STATUS_TEXT];
  62. if (strcmp("SUCCESS", $statusText) == 0) {
  63. $taskId = ((array)$submitTaskResponse)[KEY_TASK_ID];
  64. print "录音文件识别请求成功!\n";
  65. }
  66. else {
  67. print "录音文件识别请求失败!\n";
  68. return;
  69. }
  70. /**
  71. * 创建录音文件识别结果查询请求
  72. * 以轮询的方式进行识别结果的查询,直到服务端返回的状态描述为"SUCCESS"、"SUCCESS_WITH_NO_VALID_FRAGMENT",
  73. * 或者为错误描述,则结束轮询。
  74. */
  75. $getTaskResultRequest = new GetTaskResultRequest();
  76. $getTaskResultRequest->setTaskId($taskId);
  77. /**
  78. * 提交查询识别结果请求
  79. * 以轮询的方式进行识别结果的查询,直到服务端返回的状态描述符为"SUCCESS"、"SUCCESS_WITH_NO_VALID_FRAGMENT",
  80. * 或者为错误描述,则结束轮询。
  81. */
  82. $statusText = "";
  83. while (TRUE) {
  84. $getTaskResultResponse = $client->getAcsResponse($getTaskResultRequest);
  85. print_r($getTaskResultResponse);
  86. $statusText = ((array)$getTaskResultResponse)[KEY_STATUS_TEXT];
  87. if (strcmp("RUNNING", $statusText) == 0 || strcmp("QUEUEING", $statusText) == 0) {
  88. // 继续轮询
  89. sleep(3);
  90. }
  91. else {
  92. // 退出轮询
  93. break;
  94. }
  95. }
  96. } catch (ServerException $e) {
  97. print "ServerException: " . $e->getErrorCode() . " Message: " . $e->getMessage() . "\n";
  98. } catch (ClientException $e) {
  99. print "ClientException: " . $e->getErrorCode() . " Message: " . $e->getMessage() . "\n";
  100. }
  101. if (strcmp("SUCCESS", $statusText) == 0 || strcmp("SUCCESS_WITH_NO_VALID_FRAGMENT", $statusText) == 0) {
  102. print "录音文件识别成功!\n";
  103. }
  104. else {
  105. print "录音文件识别失败!\n";
  106. }
  107. }
  108. $accessKeyId = "您的AccessKey Id";
  109. $accessKeySecret = "您的AccessKey Secret";
  110. $appKey = "您的app_key";
  111. $fileLink = "https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/examples/nls-sample-16k.wav";
  112. fileTrans($accessKeyId, $accessKeySecret, $appKey, $fileLink);
  113. ?>