123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import os
- import json
- import threading
- import nls # 引入阿里云语音识别库
- from aliyunsdkcore.client import AcsClient
- from aliyunsdkcore.request import CommonRequest
- import time
- # 获取Token的函数
- def get_token():
- ak_id = "LTAI5tQ2HmiHCygZkt5BYrYR"
- ak_secret = "KhmxTd14SUcXafpFk5yofA43FoeM99"
- client = AcsClient(ak_id, ak_secret, "cn-shanghai")
- request = CommonRequest()
- request.set_method('POST')
- request.set_domain('nls-meta.cn-shanghai.aliyuncs.com')
- request.set_version('2019-02-28')
- request.set_action_name('CreateToken')
- try:
- response = client.do_action_with_exception(request)
- jss = json.loads(response)
- if 'Token' in jss and 'Id' in jss['Token']:
- token = jss['Token']['Id']
- expire_time = jss['Token']['ExpireTime']
- print(f"Token: {token}, ExpireTime: {expire_time}")
- return token, int(expire_time) # 返回Token和过期时间
- else:
- print("Token获取失败,响应内容: ", response)
- except Exception as e:
- print(f"获取Token时发生错误: {e}")
- return None, None
- # WebSocket服务地址
- URL = "wss://nls-gateway-cn-beijing.aliyuncs.com/ws/v1"
- APPKEY = "OKt6jogp6fRjHQVp" # 你的Appkey
- # 定义实时转写类
- class TestSt:
- # 静态变量用于缓存Token
- token_cache = {
- "token": None,
- "expire_time": None
- }
- @classmethod
- def get_cached_token(cls):
- # 检查是否已有缓存的Token且未过期
- if cls.token_cache["token"] and cls.token_cache["expire_time"]:
- current_time = int(time.time())
- if current_time < cls.token_cache["expire_time"]:
- print("使用缓存的Token")
- return cls.token_cache["token"]
- # 如果没有缓存Token或者Token已过期,重新获取
- new_token, expire_time = get_token()
- if new_token:
- cls.token_cache["token"] = new_token
- cls.token_cache["expire_time"] = expire_time
- print("获取新的Token")
- return new_token
- else:
- print("无法获取Token")
- return None
- def __init__(self, tid):
- self.__th = threading.Thread(target=self.__test_run)
- self.__id = tid
- self._Token = self.get_cached_token()
- self.sr = None
- print("开始")
- def start(self):
- self.__th.start()
- def send_audio(self, audio_data):
- if self.sr:
- print("Sending audio data of length:", len(audio_data))
- self.sr.send_audio(audio_data)
- print("Audio data sent.")
- def __test_run(self):
- print("Thread:{} start..".format(self.__id))
- self.sr = nls.NlsSpeechTranscriber(
- url=URL,
- token=self._Token,
- appkey=APPKEY,
- on_error=self.test_on_error,
- on_result_changed=self.test_on_result_chg,
- on_completed=self.test_on_completed
- )
- self.sr.start(
- aformat="pcm",
- enable_intermediate_result=True,
- enable_punctuation_prediction=True,
- enable_inverse_text_normalization=True
- )
- print("ASR session started.")
- def test_on_error(self, message, *args):
- print(f"Error occurred: {message}")
- def test_on_result_chg(self, message, *args):
- print(f"Result changed: {message}")
- def test_on_completed(self, message, *args):
- print(f"Recognition completed: {message}")
|