'commit'
This commit is contained in:
@@ -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)
|
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user