feat: Add base project structure with API and web components

This commit is contained in:
Ke Sun
2025-12-02 20:28:01 +08:00
parent f3de6d6cc9
commit c1adc62ec6
817 changed files with 111226 additions and 106 deletions

112
api/app/utils/volc_asr.py Normal file
View File

@@ -0,0 +1,112 @@
import requests
import json
import uuid
import os
import time
from datetime import datetime
from app.core.config import settings
# 火山的ASR
class VolcASR:
def __init__(self):
self.app_key = settings.VOLC_APP_KEY # 需要替换为实际的APP KEY
self.access_key = settings.VOLC_ACCESS_KEY # 需要替换为实际的Access Key
self.submit_url = settings.VOLC_SUBMIT_URL
self.query_url = settings.VOLC_QUERY_URL
def get_headers(self):
request_id = str(uuid.uuid4())
return {
"X-Api-App-Key": self.app_key,
"X-Api-Access-Key": self.access_key,
"X-Api-Resource-Id": "volc.bigasr.auc",
"X-Api-Request-Id": request_id,
"X-Api-Sequence": "-1",
"Content-Type": "application/json"
}
def submit_task(self, audio_url):
headers = self.get_headers()
data = {
"audio": {
"url": audio_url
}
}
response = requests.post(self.submit_url, headers=headers, json=data)
return response.headers.get("X-Api-Request-Id"), response.headers.get("X-Api-Status-Code")
def query_result(self, task_id):
headers = self.get_headers()
headers["X-Api-Request-Id"] = task_id
while True:
response = requests.post(self.query_url, headers=headers, json={})
status_code = response.headers.get("X-Api-Status-Code")
if status_code == "20000000": # 成功
return response.json()
elif status_code in ["20000001", "20000002"]: # 处理中或在队列中
time.sleep(1)
continue
elif status_code in ["20000003"]: # 静音音频
raise Exception(f"静音音频: {status_code}")
elif status_code in ["45000001"]: # 请求参数无效
raise Exception(f"请求参数无效: {status_code}")
elif status_code in ["45000002"]: # 空音频
raise Exception(f"空音频: {status_code}")
elif status_code in ["45000151"]: # 音频格式不正确
raise Exception(f"音频格式不正确: {status_code}")
elif status_code in ["55000031"]: # 服务器繁忙
raise Exception(f"服务器繁忙: {status_code}")
else:
raise Exception(f"服务内部处理错误: {status_code}")
def main():
# 音频URL
audio_url = "https://fosun-lcp-clickpaas.oss-cn-shanghai.aliyuncs.com/fosun-dify-files-images/test.mp3"
# 输出目录
output_dir = "/Users/sbtjfdn/Downloads"
os.makedirs(output_dir, exist_ok=True)
# 初始化ASR客户端
asr_client = VolcASR()
try:
# 提交任务
print("提交语音识别任务...")
task_id, status_code = asr_client.submit_task(audio_url)
if not task_id:
raise Exception("提交任务失败未获取到任务ID")
print(f"任务ID: {task_id}")
# 查询结果
print("等待识别结果...")
result = asr_client.query_result(task_id)
# 保存结果
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
output_file = os.path.join(output_dir, f"result_{timestamp}.json")
with open(output_file, "w", encoding="utf-8") as f:
json.dump(result, f, ensure_ascii=False, indent=2)
print(f"识别结果已保存到: {output_file}")
# 如果有识别文本,单独保存文本文件
if "result" in result and "text" in result["result"]:
text_file = os.path.join(output_dir, f"text_{timestamp}.txt")
with open(text_file, "w", encoding="utf-8") as f:
f.write(result["result"]["text"])
print(f"识别文本已保存到: {text_file}")
except Exception as e:
print(f"发生错误: {str(e)}")
if __name__ == "__main__":
main()