This commit is contained in:
2025-09-06 17:46:55 +08:00
parent e6464e56cc
commit a38ac59f3f
23 changed files with 59 additions and 42 deletions

View File

@@ -66,12 +66,21 @@ async def save_audio(audio: UploadFile = File(...), txt: str = Form(...)):
appid=XF_APPID,
api_key=XF_APIKEY,
api_secret=XF_APISECRET,
audio_file=mp3_file_path, # 使用新的MP3路径
txt=txt
audio_file=mp3_file_path, # 使用MP3文件路径
txt=txt.strip() # 确保文本预处理避免None
)
results, eval_time = evaluator.run_evaluation()
print(evaluator.get_evaluation_summary())
# 运行评测并获取结果(已整合重构后的解析逻辑)
results, eval_time = evaluator.run_evaluation()
# 验证解析结果完整性
if not results or 'total_score' not in results:
# 尝试从本地XML文件重新解析容错机制
xml_log_path = os.path.join(UPLOAD_DIR, f"{os.path.splitext(mp3_file_name)[0]}.xml")
if os.path.exists(xml_log_path):
with open(xml_log_path, 'r', encoding='utf-8') as f:
evaluator.parse_evaluation_results(f.read())
results = evaluator.evaluation_results
return {
"success": True,

View File

@@ -116,10 +116,6 @@
<span class="score-value" id="totalScore">--</span>
<span class="score-label">总分</span>
</div>
<div class="score-item">
<span class="score-value" id="accuracyScore">--</span>
<span class="score-label">准确度</span>
</div>
<div class="score-item">
<span class="score-value" id="fluencyScore">--</span>
<span class="score-label">流利度</span>
@@ -128,10 +124,15 @@
<span class="score-value" id="completenessScore">--</span>
<span class="score-label">完整度</span>
</div>
</div>
<div class="words-list" id="wordsList">
<h4 style="color: #5eead4; margin-bottom: 10px;">字词评分</h4>
<div id="wordsContent">等待评测结果...</div>
<!-- 新增评分项 -->
<div class="score-item">
<span class="score-value" id="toneScore">--</span>
<span class="score-label">语调</span>
</div>
<div class="score-item">
<span class="score-value" id="phoneScore">--</span>
<span class="score-label">发音</span>
</div>
</div>
</div>
</div>
@@ -174,11 +175,15 @@
this.progressText = document.getElementById('progressText');
this.evaluationContainer = document.getElementById('evaluationContainer');
this.totalScore = document.getElementById('totalScore');
this.accuracyScore = document.getElementById('accuracyScore');
// 移除已删除的准确度评分元素引用
this.fluencyScore = document.getElementById('fluencyScore');
this.completenessScore = document.getElementById('completenessScore');
this.wordsList = document.getElementById('wordsList');
this.wordsContent = document.getElementById('wordsContent');
this.toneScore = document.getElementById('toneScore');
this.phoneScore = document.getElementById('phoneScore');
// 移除已删除的情感评分元素引用
//this.emotionScore = document.getElementById('emotionScore');
//this.wordsList = document.getElementById('wordsList');
//this.wordsContent = document.getElementById('wordsContent');
}
setupCanvas() {
@@ -395,34 +400,37 @@
}
displayEvaluationResults(evaluation) {
if (!evaluation) return;
if (!evaluation) return;
// 显示评分卡片
this.totalScore.textContent = evaluation.total_score ? evaluation.total_score.toFixed(1) : '--';
this.accuracyScore.textContent = evaluation.accuracy_score ? evaluation.accuracy_score.toFixed(1) : '--';
this.fluencyScore.textContent = evaluation.fluency_score ? evaluation.fluency_score.toFixed(1) : '--';
this.completenessScore.textContent = evaluation.completeness_score ? evaluation.completeness_score.toFixed(1) : '--';
this.totalScore.textContent = evaluation.total_score ? evaluation.total_score.toFixed(1) : '--';
// 移除已删除的准确度评分设置
this.fluencyScore.textContent = evaluation.fluency_score ? evaluation.fluency_score.toFixed(1) : '--';
this.completenessScore.textContent = evaluation.integrity_score ? evaluation.integrity_score.toFixed(1) : '--';
this.toneScore.textContent = evaluation.tone_score ? evaluation.tone_score.toFixed(1) : '--';
this.phoneScore.textContent = evaluation.phone_score ? evaluation.phone_score.toFixed(1) : '--';
// 移除已删除的情感评分设置
this.evaluationContainer.classList.add('show');
this.evaluationContainer.classList.add('show');
// 显示字词评分
if (evaluation.words && evaluation.words.length > 0) {
let wordsHTML = '';
evaluation.words.forEach((word, index) => {
const score = word.total_score ? word.total_score.toFixed(1) : '0.0';
const color = score >= 80 ? '#10b981' : score >= 60 ? '#f59e0b' : '#ef4444';
wordsHTML += `
<div class="word-item">
<span class="word-content">${word.content || `字词${index + 1}`}</span>
<span class="word-score" style="color: ${color}">${score}</span>
</div>
`;
});
this.wordsContent.innerHTML = wordsHTML;
} else {
this.wordsContent.innerHTML = '<p style="color: #cbd5e1; text-align: center;">无字词评分数据</p>';
}
}
// // 移除已删除的句子评分相关代码
// const sentencesContent = document.getElementById('sentencesContent');
// if (evaluation.sentences && evaluation.sentences.length > 0) {
// let sentencesHTML = '';
// evaluation.sentences.forEach((sentence, index) => {
// const score = sentence.total_score ? sentence.total_score.toFixed(1) : '--';
// const color = score >= 90 ? '#5eead4' : score >= 80 ? '#a7f3d0' : '#fef3c7';
// sentencesHTML += `
// <div style="display: flex; justify-content: space-between; align-items: center; padding: 8px 0; border-bottom: 1px solid rgba(148, 163, 184, 0.1);">
// <span style="color: #e2e8f0;">${index + 1}. ${sentence.content}</span>
// <span style="font-weight: bold; color: ${color};">${score}</span>
// </div>
// `;
// });
// sentencesContent.innerHTML = sentencesHTML;
// } else {
// sentencesContent.innerHTML = '<p style="color: #94a3b8; text-align: center;">无句子评分数据</p>';
// }
}
simulateUploadProgress() {
let progress = 0;