全部产品
云市场

Python Demo

更新时间:2019-10-24 13:25:39

提示:

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

SDK说明

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

SDK 安装

录音文件识别Python Demo只需安装阿里云Python SDK的核心库。阿里云Python SDK的安装支持Python 2.6.x, 2.7.x 和 3.x及以上环境,并提供pip和GitHub两种安装方式。

使用pip安装(推荐)

说明: 执行以下命令,通过pip安装Python SDK,版本为2.13.3:

  1. pip install aliyun-python-sdk-core==2.13.3

说明:文档会定期更新最新可支持录音文件识别的SDK版本,您已经安装使用的SDK版本可继续使用。

调用步骤

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

Demo 示例

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

nls-sample-16k.wav

示例

  1. # -*- coding: utf8 -*-
  2. import json
  3. import time
  4. from aliyunsdkcore.acs_exception.exceptions import ClientException
  5. from aliyunsdkcore.acs_exception.exceptions import ServerException
  6. from aliyunsdkcore.client import AcsClient
  7. from aliyunsdkcore.request import CommonRequest
  8. def fileTrans(akId, akSecret, appKey, fileLink) :
  9. # 地域ID,常量内容,请勿改变
  10. REGION_ID = "cn-shanghai"
  11. PRODUCT = "nls-filetrans"
  12. DOMAIN = "filetrans.cn-shanghai.aliyuncs.com"
  13. API_VERSION = "2018-08-17"
  14. POST_REQUEST_ACTION = "SubmitTask"
  15. GET_REQUEST_ACTION = "GetTaskResult"
  16. # 请求参数key
  17. KEY_APP_KEY = "appkey"
  18. KEY_FILE_LINK = "file_link"
  19. KEY_VERSION = "version"
  20. KEY_ENABLE_WORDS = "enable_words"
  21. # 是否开启智能分轨
  22. KEY_AUTO_SPLIT = "auto_split"
  23. # 响应参数key
  24. KEY_TASK = "Task"
  25. KEY_TASK_ID = "TaskId"
  26. KEY_STATUS_TEXT = "StatusText"
  27. KEY_RESULT = "Result"
  28. # 状态值
  29. STATUS_SUCCESS = "SUCCESS"
  30. STATUS_RUNNING = "RUNNING"
  31. STATUS_QUEUEING = "QUEUEING"
  32. # 创建AcsClient实例
  33. client = AcsClient(akId, akSecret, REGION_ID)
  34. # 提交录音文件识别请求
  35. postRequest = CommonRequest()
  36. postRequest.set_domain(DOMAIN)
  37. postRequest.set_version(API_VERSION)
  38. postRequest.set_product(PRODUCT)
  39. postRequest.set_action_name(POST_REQUEST_ACTION)
  40. postRequest.set_method('POST')
  41. # 新接入请使用4.0版本,已接入(默认2.0)如需维持现状,请注释掉该参数设置
  42. # 设置是否输出词信息,默认为false,开启时需要设置version为4.0
  43. task = {KEY_APP_KEY : appKey, KEY_FILE_LINK : fileLink, KEY_VERSION : "4.0", KEY_ENABLE_WORDS : False}
  44. # 开启智能分轨,如果开启智能分轨 task中设置KEY_AUTO_SPLIT : True
  45. # task = {KEY_APP_KEY : appKey, KEY_FILE_LINK : fileLink, KEY_VERSION : "4.0", KEY_ENABLE_WORDS : False, KEY_AUTO_SPLIT : True}
  46. task = json.dumps(task)
  47. print(task)
  48. postRequest.add_body_params(KEY_TASK, task)
  49. taskId = ""
  50. try :
  51. postResponse = client.do_action_with_exception(postRequest)
  52. postResponse = json.loads(postResponse)
  53. print (postResponse)
  54. statusText = postResponse[KEY_STATUS_TEXT]
  55. if statusText == STATUS_SUCCESS :
  56. print ("录音文件识别请求成功响应!")
  57. taskId = postResponse[KEY_TASK_ID]
  58. else :
  59. print ("录音文件识别请求失败!")
  60. return
  61. except ServerException as e:
  62. print (e)
  63. except ClientException as e:
  64. print (e)
  65. # 创建CommonRequest,设置任务ID
  66. getRequest = CommonRequest()
  67. getRequest.set_domain(DOMAIN)
  68. getRequest.set_version(API_VERSION)
  69. getRequest.set_product(PRODUCT)
  70. getRequest.set_action_name(GET_REQUEST_ACTION)
  71. getRequest.set_method('GET')
  72. getRequest.add_query_param(KEY_TASK_ID, taskId)
  73. # 提交录音文件识别结果查询请求
  74. # 以轮询的方式进行识别结果的查询,直到服务端返回的状态描述符为"SUCCESS"、"SUCCESS_WITH_NO_VALID_FRAGMENT",
  75. # 或者为错误描述,则结束轮询。
  76. statusText = ""
  77. while True :
  78. try :
  79. getResponse = client.do_action_with_exception(getRequest)
  80. getResponse = json.loads(getResponse)
  81. print (getResponse)
  82. statusText = getResponse[KEY_STATUS_TEXT]
  83. if statusText == STATUS_RUNNING or statusText == STATUS_QUEUEING :
  84. # 继续轮询
  85. time.sleep(3)
  86. else :
  87. # 退出轮询
  88. break
  89. except ServerException as e:
  90. print (e)
  91. except ClientException as e:
  92. print (e)
  93. if statusText == STATUS_SUCCESS :
  94. print ("录音文件识别成功!")
  95. else :
  96. print ("录音文件识别失败!")
  97. return
  98. accessKeyId = "您的AccessKey Id"
  99. accessKeySecret = "您的AccessKey Secret"
  100. appKey = "您的appkey"
  101. fileLink = "https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/examples/nls-sample-16k.wav"
  102. # 执行录音文件识别
  103. fileTrans(accessKeyId, accessKeySecret, appKey, fileLink)