diff --git a/dsLightRag/Config/__pycache__/Config.cpython-310.pyc b/dsLightRag/Config/__pycache__/Config.cpython-310.pyc index 68346443..b834a481 100644 Binary files a/dsLightRag/Config/__pycache__/Config.cpython-310.pyc and b/dsLightRag/Config/__pycache__/Config.cpython-310.pyc differ diff --git a/dsLightRag/Test/auc_websocket_demo.py b/dsLightRag/Test/auc_websocket_demo.py deleted file mode 100644 index 064199b3..00000000 --- a/dsLightRag/Test/auc_websocket_demo.py +++ /dev/null @@ -1,116 +0,0 @@ -import json -import time -import uuid -import requests - -from Config.Config import HS_ASR_APP_ID, HS_ASR_TOKEN - - -def submit_task(): - submit_url = "https://openspeech-direct.zijieapi.com/api/v3/auc/bigmodel/submit" - - task_id = str(uuid.uuid4()) - - headers = { - "X-Api-App-Key": appid, - "X-Api-Access-Key": token, - "X-Api-Resource-Id": "volc.bigasr.auc", - "X-Api-Request-Id": task_id, - "X-Api-Sequence": "-1" - } - - request = { - "user": { - "uid": "fake_uid" - }, - "audio": { - "url": file_url, - # "format": "mp3", - # "codec": "map3", - # "rate": 48000, - # "bits": 16, - #"channel": 2 - }, - "request": { - "model_name": "bigmodel", - # "model_name": "bigmodel", - "enable_channel_split": True, - "enable_ddc": True, - "enable_speaker_info": True, - "enable_punc": True, - "enable_itn": True, - # "enable_itn": True, - # "enable_punc": True, - # "enable_ddc": True, - # "show_utterances": True, - # "enable_channel_split": True, - # "vad_segment": True, - # "enable_speaker_info": True, - "corpus": { - # "boosting_table_name": "test", - "correct_table_name": "", - "context": "" - } - } - } - print(f'Submit task id: {task_id}') - response = requests.post(submit_url, data=json.dumps(request), headers=headers) - if 'X-Api-Status-Code' in response.headers and response.headers["X-Api-Status-Code"] == "20000000": - print(f'Submit task response header X-Api-Status-Code: {response.headers["X-Api-Status-Code"]}') - print(f'Submit task response header X-Api-Message: {response.headers["X-Api-Message"]}') - x_tt_logid = response.headers.get("X-Tt-Logid", "") - print(f'Submit task response header X-Tt-Logid: {response.headers["X-Tt-Logid"]}\n') - return task_id, x_tt_logid - else: - print(f'Submit task failed and the response headers are: {response.headers}') - exit(1) - return task_id - - -def query_task(task_id, x_tt_logid): - query_url = "https://openspeech-direct.zijieapi.com/api/v3/auc/bigmodel/query" - - headers = { - "X-Api-App-Key": appid, - "X-Api-Access-Key": token, - "X-Api-Resource-Id": "volc.bigasr.auc", - "X-Api-Request-Id": task_id, - "X-Tt-Logid": x_tt_logid # 固定传递 x-tt-logid - } - - response = requests.post(query_url, json.dumps({}), headers=headers) - - if 'X-Api-Status-Code' in response.headers: - print(f'Query task response header X-Api-Status-Code: {response.headers["X-Api-Status-Code"]}') - print(f'Query task response header X-Api-Message: {response.headers["X-Api-Message"]}') - print(f'Query task response header X-Tt-Logid: {response.headers["X-Tt-Logid"]}\n') - else: - print(f'Query task failed and the response headers are: {response.headers}') - exit(1) - return response - - -def main(): - task_id, x_tt_logid = submit_task() - while True: - query_response = query_task(task_id, x_tt_logid) - code = query_response.headers.get('X-Api-Status-Code', "") - if code == '20000000': # task finished - print(query_response.json()) - print("SUCCESS!") - exit(0) - elif code != '20000001' and code != '20000002': # task failed - print("FAILED!") - exit(1) - time.sleep(1) - -# 需要使用在线url,推荐使用TOS -file_url = "https://ttc-advisory-oss.oss-cn-hangzhou.aliyuncs.com/lark_audio/int/T_APLA_1941058348698869760.mp3" - -# 填入控制台获取的app id和access token - -appid = HS_ASR_APP_ID -token = HS_ASR_TOKEN - -if __name__ == '__main__': - main() diff --git a/dsLightRag/Util/ASRClient.py b/dsLightRag/Util/ASRClient.py new file mode 100644 index 00000000..a75ea933 --- /dev/null +++ b/dsLightRag/Util/ASRClient.py @@ -0,0 +1,128 @@ +import json +import time +import uuid +import requests + +from Config.Config import HS_ASR_APP_ID, HS_ASR_TOKEN + + +class ASRClient: + def __init__(self, appid=None, token=None, file_url=None): + self.appid = appid or HS_ASR_APP_ID + self.token = token or HS_ASR_TOKEN + self.file_url = file_url or "https://ttc-advisory-oss.oss-cn-hangzhou.aliyuncs.com/lark_audio/int/T_APLA_1941058348698869760.mp3" + self.submit_url = "https://openspeech-direct.zijieapi.com/api/v3/auc/bigmodel/submit" + self.query_url = "https://openspeech-direct.zijieapi.com/api/v3/auc/bigmodel/query" + self.task_id = None + self.x_tt_logid = None + + def _prepare_headers(self, task_id=None): + """准备请求头""" + headers = { + "X-Api-App-Key": self.appid, + "X-Api-Access-Key": self.token, + "X-Api-Resource-Id": "volc.bigasr.auc", + "X-Api-Request-Id": task_id or str(uuid.uuid4()), + } + if task_id and self.x_tt_logid: + headers["X-Tt-Logid"] = self.x_tt_logid + else: + headers["X-Api-Sequence"] = "-1" + return headers + + def _prepare_request_body(self): + """准备请求体""" + return { + "user": { + "uid": "fake_uid" + }, + "audio": { + "url": self.file_url + }, + "request": { + "model_name": "bigmodel", + "enable_channel_split": True, + "enable_ddc": True, + "enable_speaker_info": True, + "enable_punc": True, + "enable_itn": True, + "corpus": { + "correct_table_name": "", + "context": "" + } + } + } + + def submit_task(self): + """提交ASR任务""" + headers = self._prepare_headers() + self.task_id = headers["X-Api-Request-Id"] + request_body = self._prepare_request_body() + + print(f'Submit task id: {self.task_id}') + response = requests.post(self.submit_url, data=json.dumps(request_body), headers=headers) + + if 'X-Api-Status-Code' in response.headers and response.headers["X-Api-Status-Code"] == "20000000": + print(f'Submit task response header X-Api-Status-Code: {response.headers["X-Api-Status-Code"]}') + print(f'Submit task response header X-Api-Message: {response.headers["X-Api-Message"]}') + self.x_tt_logid = response.headers.get("X-Tt-Logid", "") + print(f'Submit task response header X-Tt-Logid: {self.x_tt_logid}\n') + return self.task_id, self.x_tt_logid + else: + print(f'Submit task failed and the response headers are: {response.headers}') + exit(1) + + def query_task(self): + """查询ASR任务状态""" + if not self.task_id or not self.x_tt_logid: + print("Task not submitted yet. Please call submit_task() first.") + exit(1) + + headers = self._prepare_headers(self.task_id) + response = requests.post(self.query_url, json.dumps({}), headers=headers) + + if 'X-Api-Status-Code' in response.headers: + print(f'Query task response header X-Api-Status-Code: {response.headers["X-Api-Status-Code"]}') + print(f'Query task response header X-Api-Message: {response.headers["X-Api-Message"]}') + print(f'Query task response header X-Tt-Logid: {response.headers["X-Tt-Logid"]}\n') + else: + print(f'Query task failed and the response headers are: {response.headers}') + exit(1) + return response + + def extract_text_from_result(self, result): + """从识别结果中提取文本内容""" + if isinstance(result, dict) and 'result' in result and 'text' in result['result']: + return result['result']['text'] + return "" + + def process_task(self): + """处理ASR任务:提交并轮询结果""" + self.submit_task() + while True: + query_response = self.query_task() + code = query_response.headers.get('X-Api-Status-Code', "") + if code == '20000000': # task finished + result_json = query_response.json() + # 提取并返回文本内容 + text_content = self.extract_text_from_result(result_json) + print(f"识别文本: {text_content}") + return text_content + elif code != '20000001' and code != '20000002': # task failed + print("FAILED!") + exit(1) + time.sleep(1) + + +def main(audio_url=None): + # 创建ASR客户端实例,传入指定的音频文件URL + asr_client = ASRClient(file_url=audio_url) + # 处理ASR任务并获取文本结果 + text_result = asr_client.process_task() + return text_result + + +if __name__ == '__main__': + # 使用指定的音频文件URL进行测试 + audio_url = "https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/Temp/temp_audio_20250822085243.wav" + main(audio_url)