ali_filetrans.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import json
  2. import os
  3. from aliyunsdkcore.acs_exception.exceptions import ClientException
  4. from aliyunsdkcore.acs_exception.exceptions import ServerException
  5. from aliyunsdkcore.client import AcsClient
  6. from aliyunsdkcore.request import CommonRequest
  7. from common.log import log
  8. def file_trans(fileLink):
  9. # 地域ID,固定值。
  10. REGION_ID = "cn-beijing"
  11. PRODUCT = "nls-filetrans"
  12. DOMAIN = "filetrans.cn-beijing.aliyuncs.com"
  13. API_VERSION = "2018-08-17"
  14. POST_REQUEST_ACTION = "SubmitTask"
  15. GET_REQUEST_ACTION = "GetTaskResult"
  16. # 请求参数
  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. # 响应参数
  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(os.getenv('ALIYUN_ACCESS_KEY_ID'), os.getenv('ALIYUN_ACCESS_SECRET'), 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: "IET8NhqIaLoPzdet", KEY_FILE_LINK: fileLink, KEY_VERSION: "4.0", KEY_ENABLE_WORDS: False}
  44. # 开启智能分轨,如果开启智能分轨,task中设置KEY_AUTO_SPLIT为True。
  45. task = {
  46. KEY_APP_KEY : os.getenv('ALIYUN_APP_KEY'),
  47. KEY_FILE_LINK : fileLink,
  48. KEY_VERSION : "4.0",
  49. KEY_ENABLE_WORDS : False,
  50. KEY_AUTO_SPLIT : True,
  51. "supervise_type":2,
  52. "speaker_num":2,
  53. "enable_callback":True,
  54. "callback_url":"https://toolsapi.gkscrm.com/api/v1/gpt/ali_trans_callback"
  55. }
  56. task = json.dumps(task)
  57. postRequest.add_body_params(KEY_TASK, task)
  58. taskId = ""
  59. try:
  60. postResponse = client.do_action_with_exception(postRequest)
  61. postResponse = json.loads(postResponse)
  62. log.info("录音文件识别任务:" + json.dumps(postResponse,indent=4))
  63. statusText = postResponse[KEY_STATUS_TEXT]
  64. if statusText == STATUS_SUCCESS:
  65. taskId = postResponse[KEY_TASK_ID]
  66. log.info("录音文件识别请求成功响应!任务ID:" + str(taskId))
  67. return str(taskId)
  68. else:
  69. log.error("录音文件识别任务失败!", statusText)
  70. return False
  71. except ServerException as e:
  72. log.error("录音文件识别失败! 服务端异常", e)
  73. return False
  74. except ClientException as e:
  75. log.error("录音文件识别失败! 客户端异常", e)
  76. return False
  77. # # 创建CommonRequest,设置任务ID。
  78. # getRequest = CommonRequest()
  79. # getRequest.set_domain(DOMAIN)
  80. # getRequest.set_version(API_VERSION)
  81. # getRequest.set_product(PRODUCT)
  82. # getRequest.set_action_name(GET_REQUEST_ACTION)
  83. # getRequest.set_method('GET')
  84. # getRequest.add_query_param(KEY_TASK_ID, taskId)
  85. # # 提交录音文件识别结果查询请求
  86. # # 以轮询的方式进行识别结果的查询,直到服务端返回的状态描述符为"SUCCESS"、"SUCCESS_WITH_NO_VALID_FRAGMENT",
  87. # # 或者为错误描述,则结束轮询。
  88. # statusText = ""
  89. # while True:
  90. # try:
  91. # getResponse = client.do_action_with_exception(getRequest)
  92. # getResponse = json.loads(getResponse)
  93. # log.info("录音文件识别结果:" + json.dumps(getResponse,indent=4))
  94. # statusText = getResponse[KEY_STATUS_TEXT]
  95. # if statusText == STATUS_RUNNING or statusText == STATUS_QUEUEING:
  96. # # 继续轮询
  97. # time.sleep(5)
  98. # else:
  99. # # 退出轮询
  100. # break
  101. # except ServerException as e:
  102. # log.error("录音文件识别查询失败! 服务端异常", e)
  103. # except ClientException as e:
  104. # log.error("录音文件识别查询失败! 客户端异常", e)
  105. # if statusText == STATUS_SUCCESS:
  106. # log.info("录音文件识别结束!成功")
  107. # return getResponse
  108. # else:
  109. # log.error("录音文件识别结束!失败", statusText)
  110. # return False