软件构造大作业——基于语音识别的儿童跟读练习功能设计与实现

软件构造大作业——基于语音识别的儿童跟读练习功能设计与实现

一、功能背景

在儿童故事管理平台中,仅提供“听故事”和“看故事”并不能完全满足语言学习需求。为了进一步提升儿童的语言表达能力,平台需要支持“跟读练习”功能,即让儿童在听完故事语音后,模仿朗读故事内容,并由系统对朗读结果进行识别与评价。

该功能的核心在于:将儿童的朗读语音转化为文本,并与标准文本进行对比,从而给出客观评分和改进建议。因此,本模块基于语音识别技术(Whisper),实现了从语音输入到文本识别、评分分析和反馈生成的完整工程流程。


二、设计目标

本模块的设计目标包括:

  1. 支持儿童朗读语音的上传与识别
  2. 将朗读语音转换为文本结果
  3. 将识别文本与标准文本进行对比
  4. 给出跟读评分与改进建议
  5. 为后续学习记录与成长分析提供数据基础

三、整体实现流程

跟读练习模块的整体处理流程如下:

  1. 前端录制儿童朗读语音并上传
  2. 后端接收音频文件并保存
  3. 调用 Whisper 模型进行语音识别
  4. 对识别文本与标准文本进行对比分析
  5. 计算评分并生成反馈建议
  6. 返回结果并在前端展示

四、音频文件接收与存储

后端接口接收前端上传的音频文件,并保存至服务器指定目录:

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": "朗读整体不错,可以注意个别字的发音。"
}

十、前端结果展示逻辑说明

前端根据返回结果展示识别文本、评分和反馈信息,帮助儿童理解自己的朗读效果,并引导其进行多次练习。


十一、工程实践中的问题与解决

在实际实现过程中,主要遇到以下问题:

  1. 儿童朗读语音不清晰,导致识别误差
  2. 不同儿童语速差异较大

针对这些问题,通过放宽评分阈值、优化反馈提示语,使系统在保证鼓励性的同时,提供有效指导。


十二、小结

本模块通过引入 Whisper 语音识别技术,实现了儿童故事平台中“从听到说”的完整学习闭环。通过合理的工程设计,将语音识别、文本对比、评分与反馈有机结合,不仅提升了平台的教育价值,也为儿童语言学习提供了可持续的技术支撑。

posted @ 2025-12-28 20:17  元始天尊123  阅读(5)  评论(0)    收藏  举报