软件构造大作业——基于语音识别的儿童跟读练习功能设计与实现
软件构造大作业——基于语音识别的儿童跟读练习功能设计与实现
一、功能背景
在儿童故事管理平台中,仅提供“听故事”和“看故事”并不能完全满足语言学习需求。为了进一步提升儿童的语言表达能力,平台需要支持“跟读练习”功能,即让儿童在听完故事语音后,模仿朗读故事内容,并由系统对朗读结果进行识别与评价。
该功能的核心在于:将儿童的朗读语音转化为文本,并与标准文本进行对比,从而给出客观评分和改进建议。因此,本模块基于语音识别技术(Whisper),实现了从语音输入到文本识别、评分分析和反馈生成的完整工程流程。
二、设计目标
本模块的设计目标包括:
- 支持儿童朗读语音的上传与识别
- 将朗读语音转换为文本结果
- 将识别文本与标准文本进行对比
- 给出跟读评分与改进建议
- 为后续学习记录与成长分析提供数据基础
三、整体实现流程
跟读练习模块的整体处理流程如下:
- 前端录制儿童朗读语音并上传
- 后端接收音频文件并保存
- 调用 Whisper 模型进行语音识别
- 对识别文本与标准文本进行对比分析
- 计算评分并生成反馈建议
- 返回结果并在前端展示
四、音频文件接收与存储
后端接口接收前端上传的音频文件,并保存至服务器指定目录:
import os
import uuid
READ_AUDIO_DIR = "static/read_audio"
def save_read_audio(file):
if not os.path.exists(READ_AUDIO_DIR):
os.makedirs(READ_AUDIO_DIR)
filename = f"{uuid.uuid4().hex}.wav"
path = os.path.join(READ_AUDIO_DIR, filename)
file.save(path)
return path
五、Whisper 模型加载与语音识别
本系统采用本地部署的 Whisper 模型进行语音识别,避免频繁调用外部接口带来的延迟和成本问题。
1. Whisper 模型加载
import whisper
model = whisper.load_model("base")
2. 语音识别实现
def transcribe_audio(audio_path: str) -> str:
result = model.transcribe(audio_path, language="zh")
return result["text"].strip()
该方法将朗读语音转换为对应的文本内容,作为后续评分的输入。
六、标准文本获取
标准文本通常来自故事正文或高亮朗读模块中的单句文本:
def get_standard_text(db_conn, sentence_id: int) -> str:
sql = "SELECT text FROM story_sentence WHERE id = %s"
cursor = db_conn.cursor()
cursor.execute(sql, (sentence_id,))
row = cursor.fetchone()
return row[0]
七、文本相似度评分设计
系统采用基于文本相似度的评分方式,对识别文本与标准文本进行对比。
1. 文本预处理
import re
def normalize_text(text: str) -> str:
text = re.sub(r"[^\u4e00-\u9fff]", "", text)
return text
2. 相似度计算
import difflib
def calculate_score(standard: str, recognized: str) -> int:
standard = normalize_text(standard)
recognized = normalize_text(recognized)
ratio = difflib.SequenceMatcher(
None, standard, recognized
).ratio()
return int(ratio * 100)
该评分方式简单直观,适合儿童跟读场景。
八、评分等级与反馈建议生成
根据评分结果,系统生成不同等级的反馈信息:
def generate_feedback(score: int) -> str:
if score >= 90:
return "朗读非常准确,继续保持。"
elif score >= 75:
return "朗读整体不错,可以注意个别字的发音。"
elif score >= 60:
return "朗读基本正确,需要多练习。"
else:
return "建议放慢语速,仔细听示范后再朗读。"
九、跟读结果返回结构设计
后端统一返回如下结构,供前端展示:
{
"recognized_text": "从前有一只小兔子",
"score": 82,
"feedback": "朗读整体不错,可以注意个别字的发音。"
}
十、前端结果展示逻辑说明
前端根据返回结果展示识别文本、评分和反馈信息,帮助儿童理解自己的朗读效果,并引导其进行多次练习。
十一、工程实践中的问题与解决
在实际实现过程中,主要遇到以下问题:
- 儿童朗读语音不清晰,导致识别误差
- 不同儿童语速差异较大
针对这些问题,通过放宽评分阈值、优化反馈提示语,使系统在保证鼓励性的同时,提供有效指导。
十二、小结
本模块通过引入 Whisper 语音识别技术,实现了儿童故事平台中“从听到说”的完整学习闭环。通过合理的工程设计,将语音识别、文本对比、评分与反馈有机结合,不仅提升了平台的教育价值,也为儿童语言学习提供了可持续的技术支撑。

浙公网安备 33010602011771号