全部产品
云市场

GO Demo

更新时间:2019-10-11 14:19:59

提示:

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

SDK说明

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

SDK 安装

阿里云Go SDK支持Go 1.7及以上版本,您可以通过以下方式安装Go SDK:

使用Glide(推荐)

  1. glide get github.com/aliyun/alibaba-cloud-sdk-go

使用govendor

执行以下命令,安装Go SDK:

  1. go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk

调用步骤

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

Demo 示例

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

nls-sample-16k.wav


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

示例

  1. package main
  2. import (
  3. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
  4. "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
  5. "fmt"
  6. "encoding/json"
  7. "time"
  8. )
  9. func main() {
  10. // 地域ID,常量内容,请勿改变
  11. const REGION_ID string = "cn-shanghai"
  12. const ENDPOINT_NAME string = "cn-shanghai"
  13. const PRODUCT string = "nls-filetrans"
  14. const DOMAIN string = "filetrans.cn-shanghai.aliyuncs.com"
  15. const API_VERSION string = "2018-08-17"
  16. const POST_REQUEST_ACTION string = "SubmitTask"
  17. const GET_REQUEST_ACTION string = "GetTaskResult"
  18. // 请求参数key
  19. const KEY_APP_KEY string = "appkey"
  20. const KEY_FILE_LINK string = "file_link"
  21. const KEY_VERSION string = "version"
  22. const KEY_ENABLE_WORDS string = "enable_words"
  23. // 响应参数key
  24. const KEY_TASK string = "Task"
  25. const KEY_TASK_ID string = "TaskId"
  26. const KEY_STATUS_TEXT string = "StatusText"
  27. const KEY_RESULT string = "Result"
  28. // 状态值
  29. const STATUS_SUCCESS string = "SUCCESS"
  30. const STATUS_RUNNING string = "RUNNING"
  31. const STATUS_QUEUEING string = "QUEUEING"
  32. var accessKeyId string = "您的accessKeyId"
  33. var accessKeySecret string = "您的accessKeySecret"
  34. var appKey string = "您的appkey"
  35. var fileLink string = "https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/examples/nls-sample-16k.wav"
  36. client, err := sdk.NewClientWithAccessKey(REGION_ID, accessKeyId, accessKeySecret)
  37. if err != nil {
  38. panic(err)
  39. }
  40. postRequest := requests.NewCommonRequest()
  41. postRequest.Domain = DOMAIN
  42. postRequest.Version = API_VERSION
  43. postRequest.Product = PRODUCT
  44. postRequest.ApiName = POST_REQUEST_ACTION
  45. postRequest.Method = "POST"
  46. mapTask := make(map[string]string)
  47. mapTask[KEY_APP_KEY] = appKey
  48. mapTask[KEY_FILE_LINK] = fileLink
  49. // 新接入请使用4.0版本,已接入(默认2.0)如需维持现状,请注释掉该参数设置
  50. mapTask[KEY_VERSION] = "4.0"
  51. // 设置是否输出词信息,默认为false,开启时需要设置version为4.0
  52. mapTask[KEY_ENABLE_WORDS] = "false"
  53. task, err := json.Marshal(mapTask)
  54. if err != nil {
  55. panic(err)
  56. }
  57. postRequest.FormParams[KEY_TASK] = string(task)
  58. postResponse, err := client.ProcessCommonRequest(postRequest)
  59. if err != nil {
  60. panic(err)
  61. }
  62. postResponseContent := postResponse.GetHttpContentString()
  63. fmt.Println(postResponseContent)
  64. if (postResponse.GetHttpStatus() != 200) {
  65. fmt.Println("录音文件识别请求失败,Http错误码: ", postResponse.GetHttpStatus())
  66. return
  67. }
  68. var postMapResult map[string]interface{}
  69. err = json.Unmarshal([]byte(postResponseContent), &postMapResult)
  70. if err != nil {
  71. panic(err)
  72. }
  73. var taskId string = ""
  74. var statusText string = ""
  75. statusText = postMapResult[KEY_STATUS_TEXT].(string)
  76. if statusText == STATUS_SUCCESS {
  77. fmt.Println("录音文件识别请求成功响应!")
  78. taskId = postMapResult[KEY_TASK_ID].(string)
  79. } else {
  80. fmt.Println("录音文件识别请求失败!")
  81. return
  82. }
  83. getRequest := requests.NewCommonRequest()
  84. getRequest.Domain = DOMAIN
  85. getRequest.Version = API_VERSION
  86. getRequest.Product = PRODUCT
  87. getRequest.ApiName = GET_REQUEST_ACTION
  88. getRequest.Method = "GET"
  89. getRequest.QueryParams[KEY_TASK_ID] = taskId
  90. statusText = ""
  91. for true {
  92. getResponse, err := client.ProcessCommonRequest(getRequest)
  93. if err != nil {
  94. panic(err)
  95. }
  96. getResponseContent := getResponse.GetHttpContentString()
  97. fmt.Println("识别查询结果:", getResponseContent)
  98. if (getResponse.GetHttpStatus() != 200) {
  99. fmt.Println("识别结果查询请求失败,Http错误码:", getResponse.GetHttpStatus())
  100. break
  101. }
  102. var getMapResult map[string]interface{}
  103. err = json.Unmarshal([]byte(getResponseContent), &getMapResult)
  104. if err != nil {
  105. panic(err)
  106. }
  107. statusText = getMapResult[KEY_STATUS_TEXT].(string)
  108. if statusText == STATUS_RUNNING || statusText == STATUS_QUEUEING {
  109. time.Sleep(3 * time.Second)
  110. } else {
  111. break
  112. }
  113. }
  114. if statusText == STATUS_SUCCESS {
  115. fmt.Println("录音文件识别成功!")
  116. } else {
  117. fmt.Println("录音文件识别失败!")
  118. }
  119. }