Files
dsProject/dsLightRag/Routes/XunFeiRoute.py

65 lines
2.1 KiB
Python
Raw Normal View History

2025-09-05 20:28:18 +08:00
import logging
import os
import uuid
2025-09-05 22:27:58 +08:00
import tempfile
import shutil
import sys
from fastapi import APIRouter, UploadFile, File
2025-09-05 20:28:18 +08:00
# 配置日志
logger = logging.getLogger(__name__)
router = APIRouter(prefix="/api/xunFei", tags=["讯飞"])
2025-09-05 22:18:53 +08:00
# 音频保存目录
UPLOAD_DIR = os.path.join(os.path.dirname(__file__), "..", "static", "audio")
os.makedirs(UPLOAD_DIR, exist_ok=True)
2025-09-05 22:01:55 +08:00
2025-09-05 22:27:58 +08:00
# 讯飞配置
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
from Config.Config import XF_APPID, XF_APIKEY, XF_APISECRET
2025-09-05 22:18:53 +08:00
@router.post("/save-audio")
async def save_audio(audio: UploadFile = File(...)):
2025-09-05 22:27:58 +08:00
"""保存音频文件并评分"""
temp_file = None
2025-09-05 22:01:55 +08:00
try:
2025-09-05 22:27:58 +08:00
# 1. 保存音频到临时文件
temp_dir = tempfile.mkdtemp()
temp_file = os.path.join(temp_dir, f"temp_{uuid.uuid4().hex}.wav")
2025-09-05 22:18:53 +08:00
content = await audio.read()
2025-09-05 22:27:58 +08:00
with open(temp_file, "wb") as f:
2025-09-05 22:18:53 +08:00
f.write(content)
2025-09-05 22:27:58 +08:00
# 2. 讯飞评分
from KeDaXunFei.XunFeiAudioEvaluator import XunFeiAudioEvaluator
evaluator = XunFeiAudioEvaluator(
appid=XF_APPID,
api_key=XF_APIKEY,
api_secret=XF_APISECRET,
audio_file=temp_file,
language="english"
)
results, eval_time = evaluator.run_evaluation()
# 3. 保存到正式目录
file_name = f"audio_{uuid.uuid4().hex}.wav"
file_path = os.path.join(UPLOAD_DIR, file_name)
shutil.copy2(temp_file, file_path)
2025-09-05 22:18:53 +08:00
return {
"success": True,
"file_name": file_name,
2025-09-05 22:27:58 +08:00
"file_path": f"/static/audio/{file_name}",
"evaluation": results,
"evaluation_time": str(eval_time)
2025-09-05 22:18:53 +08:00
}
2025-09-05 22:01:55 +08:00
except Exception as e:
2025-09-05 22:27:58 +08:00
logger.error(f"处理失败: {str(e)}")
return {"success": False, "error": str(e)}
finally:
# 4. 清理临时文件
if temp_file and os.path.exists(temp_file):
shutil.rmtree(os.path.dirname(temp_file), ignore_errors=True)