soeexample.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. # -*- coding: utf-8 -*-
  2. import os
  3. import time
  4. import requests
  5. import threading
  6. from datetime import datetime
  7. import json
  8. from spoken_language.common import credential
  9. from spoken_language.soe import speaking_assessment
  10. from spoken_language.read_config import read_config
  11. config_data = read_config()
  12. app_id,secret_id,secret_key= config_data['appId'],config_data['SecretId'],config_data['SecretKey']
  13. APPID = app_id
  14. SECRET_ID = secret_id
  15. SECRET_KEY = secret_key
  16. TOKEN = ""
  17. ENGINE_MODEL_TYPE = "16k_en"
  18. SLICE_SIZE = 32000
  19. spoken_result = {}
  20. class MySpeechRecognitionListener(speaking_assessment.SpeakingAssessmentListener):
  21. def __init__(self, id):
  22. self.id = id
  23. def on_recognition_start(self, response):
  24. pass
  25. def on_intermediate_result(self, response):
  26. rsp_str = json.dumps(response, ensure_ascii=False)
  27. def on_recognition_complete(self, response):
  28. global spoken_result
  29. spoken_result[self.id] = response
  30. def on_fail(self, response):
  31. rsp_str = json.dumps(response, ensure_ascii=False)
  32. def process(id):
  33. audio = r"C:\Users\86131\Desktop\音频\output_16k_mono.mp3"
  34. listener = MySpeechRecognitionListener(id)
  35. credential_var = credential.Credential(SECRET_ID, SECRET_KEY)
  36. recognizer = speaking_assessment.SpeakingAssessment(
  37. APPID, credential_var, ENGINE_MODEL_TYPE, listener)
  38. recognizer.set_text_mode(0)
  39. recognizer.set_ref_text("anyway")
  40. recognizer.set_eval_mode(0)
  41. recognizer.set_keyword("")
  42. recognizer.set_sentence_info_enabled(0)
  43. recognizer.set_voice_format(1)
  44. try:
  45. recognizer.start()
  46. with open(audio, 'rb') as f:
  47. content = f.read(SLICE_SIZE)
  48. while content:
  49. recognizer.write(content)
  50. content = f.read(SLICE_SIZE)
  51. #sleep模拟实际实时语音发送间隔
  52. time.sleep(0.2)
  53. except Exception as e:
  54. print(e)
  55. finally:
  56. recognizer.stop()
  57. def process_rec(task_id,audio_path,audio_text,audio_binary=None):
  58. audio = audio_path
  59. listener = MySpeechRecognitionListener(task_id)
  60. credential_var = credential.Credential(SECRET_ID, SECRET_KEY)
  61. recognizer = speaking_assessment.SpeakingAssessment(
  62. APPID, credential_var, ENGINE_MODEL_TYPE, listener)
  63. recognizer.set_text_mode(0)
  64. recognizer.set_ref_text(audio_text)
  65. recognizer.set_eval_mode(1)
  66. recognizer.set_keyword("")
  67. recognizer.set_sentence_info_enabled(0)
  68. recognizer.set_voice_format(2)
  69. recognizer.set_rec_mode(1)
  70. try:
  71. recognizer.start()
  72. if audio_binary:
  73. recognizer.write(audio_binary)
  74. else:
  75. with open(f"{task_id}.mp3", 'rb') as f:
  76. content = f.read()
  77. recognizer.write(content)
  78. except Exception as e:
  79. print(e)
  80. finally:
  81. recognizer.stop()
  82. def process_multithread(number):
  83. thread_list = []
  84. for i in range(0, number):
  85. thread = threading.Thread(target=process, args=(i,))
  86. thread_list.append(thread)
  87. thread.start()
  88. for thread in thread_list:
  89. thread.join()
  90. def make_spoken(task_id,audio_url,audio_content,audio_text):
  91. if audio_url:
  92. print("有url,应该去下载mp3文件")
  93. r = requests.get(audio_url)
  94. audio_content = r.content
  95. else:
  96. with open(f"{task_id}.mp3",'wb') as f:
  97. f.write(audio_content)
  98. process_rec(task_id,audio_path=f"",audio_text=audio_text,audio_binary=audio_content)
  99. global spoken_result
  100. for _ in range(60):
  101. if task_id in spoken_result:
  102. r = spoken_result[task_id]
  103. del spoken_result[task_id]
  104. if os.path.exists(f"{task_id}.mp3"):
  105. os.remove(f"{task_id}.mp3")
  106. return r
  107. time.sleep(0.5)
  108. return None
  109. if __name__ == "__main__":
  110. process_rec(0,r"C:\Users\86131\Desktop\音频\output_16k_mono.mp3","You must study to be frank with the world apple")