全部产品
云市场

.NET Demo

更新时间:2019-10-11 14:20:10

提示:

  • 在使用SDK之前,请先确保已阅读了 接口说明文档
  • 本文档中的SDK只适用于7月5日新发布的2.0版语音服务,如果您是之前开通的,要使用此SDK需要新开通2.0版服务

SDK 说明

录音文件识别的.Net Demo使用了阿里云.Net SDK的CommonRequest用来提交录音文件识别请求和识别结果查询,采用的是RPC风格的POP API调用。阿里云.NET SDK的详细介绍请阅读阿里云.Net SDK 使用手册,.NET SDK CommonRequest的使用方法请阅读 使用CommonReques进行调用

SDK 安装

您只需安装阿里云.NET SDK的核心库即可。通过以下两种方式安装.NET SDK:

添加核心库的DLL引用

  1. .NET SDK 发布列表选择SDK核心库—>适用于.NET 4.0及以上的DLL引用下载核心库的DLL文件。
  2. 在Visual Studio的解决方案资源管理器中右键单击您的项目,然后单击引用
  3. 在弹出的菜单中单击添加引用
  4. 在弹出对话框中,单击浏览,选择之前下载的DLL文件,单击确定

项目引入方式

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

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

    在下载的文件目录aliyun-openapi-net-sdk中找到名为aliyun-net-sdk-core的子文件夹,再找到aliyun-net-sdk-core.vs2010.csproj文件(适用于vs2010、vs2013、vs2015)或者aliyun-net-sdk-core.vs2017.csproj文件(适用于vs2017),即.NET项目文件。

  2. 在Visual Studio的界面中,右键单击您的解决方案。

  3. 单击添加 > 现有项目
  4. 在弹出的对话框中,选择刚才下载的源代码中相应的.NET 项目文件(例如 aliyun-net-sdk-core.vs2010.csproj),单击打开
  5. 右键单击您的项目,单击引用 > 添加引用

调用步骤

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

Demo 示例

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

nls-sample-16k.wav


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

示例

  1. using System;
  2. using Newtonsoft.Json.Linq;
  3. using Aliyun.Acs.Core;
  4. using Aliyun.Acs.Core.Exceptions;
  5. using Aliyun.Acs.Core.Profile;
  6. using Aliyun.Acs.Core.Http;
  7. namespace FileTrans
  8. {
  9. class FileTrans
  10. {
  11. // 地域ID,常量内容,请勿改变值
  12. public const string REGIONID = "cn-shanghai";
  13. public const string PRODUCT = "nls-filetrans";
  14. public const string DOMAIN = "filetrans.cn-shanghai.aliyuncs.com";
  15. public const string API_VERSION = "2018-08-17";
  16. public const string POST_REQUEST_ACTION = "SubmitTask";
  17. public const string GET_REQUEST_ACTION = "GetTaskResult";
  18. // 请求参数key
  19. public const string KEY_APP_KEY = "appkey";
  20. public const string KEY_FILE_LINK = "file_link";
  21. public const string KEY_VERSION = "version";
  22. public const string KEY_ENABLE_WORDS = "enable_words";
  23. // 响应参数key
  24. public const string KEY_TASK = "Task";
  25. public const string KEY_TASK_ID = "TaskId";
  26. public const string KEY_STATUS_TEXT = "StatusText";
  27. // 状态值
  28. public const string STATUS_SUCCESS = "SUCCESS";
  29. public const string STATUS_RUNNING = "RUNNING";
  30. public const string STATUS_QUEUEING = "QUEUEING";
  31. static void Main(string[] args)
  32. {
  33. if (args.Length < 3)
  34. {
  35. System.Console.WriteLine("FileTrans Demo need params: <AccessKey Id> <AccessKey Secret> <app-key>");
  36. return;
  37. }
  38. string accessKeyId = args[0];
  39. string accessKeySecret = args[1];
  40. string appKey = args[2];
  41. string fileLink = "https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/examples/nls-sample-16k.wav";
  42. /**
  43. * 创建阿里云鉴权client
  44. */
  45. IClientProfile profile = DefaultProfile.GetProfile(
  46. REGIONID,
  47. accessKeyId,
  48. accessKeySecret
  49. );
  50. DefaultAcsClient client = new DefaultAcsClient(profile);
  51. try
  52. {
  53. /**
  54. * 创建录音文件识别请求,设置请求参数
  55. */
  56. CommonRequest request = new CommonRequest();
  57. request.Domain = DOMAIN;
  58. request.Version = API_VERSION;
  59. request.Action = POST_REQUEST_ACTION;
  60. request.Product = PRODUCT;
  61. request.Method = MethodType.POST;
  62. // 设置task,以JSON格式的字符串设置到请求的Body中
  63. JObject obj = new JObject();
  64. obj[KEY_APP_KEY] = appKey;
  65. obj[KEY_FILE_LINK] = fileLink;
  66. // 新接入请使用4.0版本,已接入(默认2.0)如需维持现状,请注释掉该参数设置
  67. obj[KEY_VERSION] = "4.0";
  68. // 设置是否输出词信息,默认为false,开启时需要设置version为4.0
  69. obj[KEY_ENABLE_WORDS] = false;
  70. string task = obj.ToString();
  71. request.AddBodyParameters(KEY_TASK, task);
  72. /**
  73. * 提交录音文件识别请求,处理服务端返回的响应
  74. */
  75. CommonResponse response = client.GetCommonResponse(request);
  76. System.Console.WriteLine(response.Data);
  77. if (response.HttpStatus != 200)
  78. {
  79. System.Console.WriteLine("录音文件识别请求失败: " + response.HttpStatus);
  80. return;
  81. }
  82. // 获取录音文件识别请求任务的ID,以供识别结果查询使用
  83. string taskId = "";
  84. JObject jsonObj = JObject.Parse(response.Data);
  85. string statusText = jsonObj[KEY_STATUS_TEXT].ToString();
  86. if (statusText.Equals(STATUS_SUCCESS))
  87. {
  88. System.Console.WriteLine("录音文件识别请求成功响应!");
  89. taskId = jsonObj[KEY_TASK_ID].ToString();
  90. }
  91. else
  92. {
  93. System.Console.WriteLine("录音文件识别请求失败!");
  94. return;
  95. }
  96. /**
  97. * 创建识别结果查询请求,并设置查询参数为任务ID
  98. */
  99. CommonRequest getRequest = new CommonRequest();
  100. getRequest.Domain = DOMAIN;
  101. getRequest.Version = API_VERSION;
  102. getRequest.Action = GET_REQUEST_ACTION;
  103. getRequest.Product = PRODUCT;
  104. getRequest.Method = MethodType.GET;
  105. getRequest.AddQueryParameters(KEY_TASK_ID, taskId);
  106. /**
  107. * 提交录音文件识别结果查询请求
  108. * 以轮询的方式进行识别结果的查询,直到服务端返回的状态描述为“SUCCESS”、“SUCCESS_WITH_NO_VALID_FRAGMENT”,
  109. * 或者为错误描述,则结束轮询。
  110. */
  111. statusText = "";
  112. while (true)
  113. {
  114. CommonResponse getResponse = client.GetCommonResponse(getRequest);
  115. System.Console.WriteLine(getResponse.Data);
  116. if (getResponse.HttpStatus != 200)
  117. {
  118. System.Console.WriteLine("识别结果查询请求失败,Http错误码:" + getResponse.HttpStatus);
  119. break;
  120. }
  121. JObject jsonObj2 = JObject.Parse(getResponse.Data);
  122. statusText = jsonObj2[KEY_STATUS_TEXT].ToString();
  123. if (statusText.Equals(STATUS_RUNNING) || statusText.Equals(STATUS_QUEUEING))
  124. {
  125. // 继续轮询
  126. System.Threading.Thread.Sleep(3 * 1000);
  127. }
  128. else
  129. {
  130. // 退出轮询
  131. break;
  132. }
  133. }
  134. if (statusText.Equals(STATUS_SUCCESS))
  135. {
  136. System.Console.WriteLine("录音文件识别成功!");
  137. }
  138. else {
  139. System.Console.WriteLine("录音文件识别失败!");
  140. }
  141. }
  142. catch (ServerException ex)
  143. {
  144. System.Console.WriteLine(ex.ToString());
  145. }
  146. catch (ClientException ex)
  147. {
  148. System.Console.WriteLine(ex.ToString());
  149. }
  150. }
  151. }
  152. }