This commit is contained in:
2025-09-05 22:27:58 +08:00
parent 65652639ca
commit 9bf1128f4a
3 changed files with 41 additions and 14 deletions

View File

@@ -1,11 +1,10 @@
import logging
import os
import uuid
import time
import asyncio
from fastapi import APIRouter, HTTPException, UploadFile, File
from pydantic import BaseModel
from typing import Optional
import tempfile
import shutil
import sys
from fastapi import APIRouter, UploadFile, File
# 配置日志
logger = logging.getLogger(__name__)
@@ -15,24 +14,52 @@ router = APIRouter(prefix="/api/xunFei", tags=["讯飞"])
UPLOAD_DIR = os.path.join(os.path.dirname(__file__), "..", "static", "audio")
os.makedirs(UPLOAD_DIR, exist_ok=True)
# 讯飞配置
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
from Config.Config import XF_APPID, XF_APIKEY, XF_APISECRET
@router.post("/save-audio")
async def save_audio(audio: UploadFile = File(...)):
"""保存音频文件"""
"""保存音频文件并评分"""
temp_file = None
try:
# 生成文件
# 1. 保存音频到临时文件
temp_dir = tempfile.mkdtemp()
temp_file = os.path.join(temp_dir, f"temp_{uuid.uuid4().hex}.wav")
content = await audio.read()
with open(temp_file, "wb") as f:
f.write(content)
# 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)
# 保存文件
content = await audio.read()
with open(file_path, "wb") as f:
f.write(content)
print(file_path)
return {
"success": True,
"file_name": file_name,
"file_path": f"/static/audio/{file_name}"
"file_path": f"/static/audio/{file_name}",
"evaluation": results,
"evaluation_time": str(eval_time)
}
except Exception as e:
return {"success": False, "error": str(e)}
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)