基于树莓派的英语口语训练系统,集成语音合成、语音识别和智能评分功能。
- 语音合成(TTS):将题目文本转换为语音播放
- 语音识别(ASR):录音并识别用户回答,支持音频增强
- 智能评分:基于TOEFL SpeechRater准则进行评分,生成中英文评价
- 硬件:树莓派4B(推荐4GB内存以上)
- 系统:Raspberry Pi OS 64-bit
- Python:3.9(通过conda管理)
- 已安装:conda(Miniconda或Anaconda)
cd /home/pi/Desktop/AI_Oral_Assistant
./install.sh如果自动安装失败,可以手动执行:
# 1. 安装系统依赖
sudo apt-get update
sudo apt-get install -y portaudio19-dev python3-pyaudio ffmpeg gfortran build-essential
# 2. 创建conda环境
conda env create -f environment.yml
conda activate oral_assistant
# 3. 安装Python依赖
cd tts && pip install -r requirements.txt && cd ..
cd se && pip install -r requirements.txt && cd ..
cd asr && pip install -r requirements.txt && cd ..
cd scoring && pip install -r requirements.txt && cd ..
# 4. 下载TTS模型
cd tts && python download_models.py en_US-amy-medium && cd ..conda activate oral_assistant
cd /home/pi/Desktop/AI_Oral_Assistant
python main.py启用/禁用唤醒词:
# 启用唤醒词(默认,持续监听模式)
python main.py
# 禁用唤醒词(使用文本输入模式)
python main.py --no-wake-word- 启动程序:运行
python main.py - 唤醒系统:说出"voice assistant"或"语音助手"(如果启用唤醒词),或输入
start - 听题:系统会播放题目
- 准备:15秒准备时间
- 答题:45秒答题时间(系统自动录音)
- 评分:系统自动评分并播放评价
- 继续:选择是否继续练习,完成后返回监听模式
系统支持以下部署功能:
- 持续监听模式:程序启动后持续监听唤醒词,无需手动操作
- 语音唤醒:说出"voice assistant"或"语音助手"即可唤醒系统
- 开机自启:通过systemd服务实现树莓派通电后自动启动
- 后台运行:程序在后台运行,不占用终端
- 自动重启:程序异常退出时自动重启
系统使用轻量级的唤醒词检测器(se/wake_word_detector.py)实现持续监听。
当前实现:
- 基于能量检测的简单唤醒词识别
- 支持关键词:
"assistant","voice assistant","语音助手"
未来改进(可选):
- 集成ASR模块进行更准确的唤醒词识别
- 支持自定义唤醒词训练
- 程序启动后,唤醒词检测器开始持续监听
- 检测到语音能量超过阈值时,尝试匹配唤醒关键词
- 匹配成功后,触发回调函数,开始练习流程
- 练习完成后,返回监听模式
- 确保conda环境已正确安装(参考快速安装部分)
- 确保程序可以手动正常运行
- 需要root权限(使用sudo)
步骤1:检查服务文件
确保 oral-assistant.service 文件存在:
ls -l oral-assistant.service步骤2:运行安装脚本
sudo ./start_service.sh脚本会自动:
- 复制服务文件到
/etc/systemd/system/ - 更新路径配置(conda环境和项目路径)
- 启用服务(开机自启)
- 启动服务
步骤3:验证服务状态
sudo systemctl status oral-assistant应该看到 active (running) 状态。
如果自动脚本失败,可以手动安装:
# 1. 复制服务文件
sudo cp oral-assistant.service /etc/systemd/system/
# 2. 编辑服务文件,更新路径
sudo nano /etc/systemd/system/oral-assistant.service
# 修改以下路径:
# - ExecStart中的conda环境路径
# - WorkingDirectory中的项目路径
# 3. 重新加载systemd
sudo systemctl daemon-reload
# 4. 启用服务
sudo systemctl enable oral-assistant.service
# 5. 启动服务
sudo systemctl start oral-assistant.serviceoral-assistant.service 文件的关键配置:
[Unit]
Description=树莓派英语口语练习助手
After=network.target sound.target # 等待网络和音频系统就绪
[Service]
Type=simple
User=pi # 运行用户
WorkingDirectory=/home/pi/Desktop/AI_Oral_Assistant
ExecStart=/path/to/conda/envs/oral_assistant/bin/python main.py
Restart=always # 异常退出时自动重启
RestartSec=10 # 重启前等待10秒
[Install]
WantedBy=multi-user.target # 多用户模式启动重要路径:
ExecStart:conda环境中python的完整路径WorkingDirectory:项目根目录的完整路径
查看服务状态:
sudo systemctl status oral-assistant查看实时日志:
sudo journalctl -u oral-assistant -f查看最近100行日志:
sudo journalctl -u oral-assistant -n 100停止服务:
sudo systemctl stop oral-assistant重启服务:
sudo systemctl restart oral-assistant禁用开机自启(但保持服务运行):
sudo systemctl disable oral-assistant启用开机自启:
sudo systemctl enable oral-assistant-
重启树莓派,验证服务是否自动启动:
sudo reboot
-
等待系统启动后,检查服务状态:
sudo systemctl status oral-assistant
-
查看日志,确认程序正常运行:
sudo journalctl -u oral-assistant -n 50
问题:systemctl status 显示 failed 或 inactive
排查步骤:
-
查看详细错误日志:
sudo journalctl -u oral-assistant -n 50 --no-pager
-
检查路径是否正确:
- conda环境路径是否存在
- 项目目录路径是否正确
- Python可执行文件路径是否正确
-
检查权限:
ls -l /home/pi/Desktop/AI_Oral_Assistant/main.py
-
手动测试运行:
conda activate oral_assistant cd /home/pi/Desktop/AI_Oral_Assistant python main.py
问题:说出唤醒词后没有反应
排查步骤:
-
检查音频设备:
arecord -l # 列出录音设备 -
检查唤醒词检测器日志:
sudo journalctl -u oral-assistant | grep -i wake -
测试音频输入:
arecord -d 5 test.wav # 录制5秒音频测试 aplay test.wav # 播放测试
-
如果唤醒词检测失败,可以临时禁用:
- 编辑服务文件,在
ExecStart后添加--no-wake-word - 重启服务
- 编辑服务文件,在
问题:systemctl status 显示服务不断重启
可能原因:
- 程序启动时出错(检查日志)
- 资源不足(内存或CPU)
- 依赖服务未就绪
解决方案:
- 查看错误日志找出根本原因
- 增加
RestartSec延迟时间 - 在服务文件中添加资源限制:
MemoryLimit=512M CPUQuota=80%
问题:服务无法访问音频设备或文件
解决方案:
-
确保用户
pi在audio组中:groups pi # 查看用户组 sudo usermod -a -G audio pi # 添加到audio组
-
检查文件权限:
sudo chown -R pi:pi /home/pi/Desktop/AI_Oral_Assistant
编辑 main.py 中的唤醒词列表:
self.wake_detector = WakeWordDetector(
wake_keywords=["your", "custom", "wake", "words"]
)编辑服务文件,添加资源限制:
[Service]
MemoryLimit=512M # 内存限制
CPUQuota=80% # CPU限制如果需要设置环境变量,在服务文件中添加:
[Service]
Environment="PYTHONPATH=/path/to/project"
Environment="AUDIO_DEVICE=0"如果需要卸载systemd服务:
# 停止服务
sudo systemctl stop oral-assistant
# 禁用服务
sudo systemctl disable oral-assistant
# 删除服务文件
sudo rm /etc/systemd/system/oral-assistant.service
# 重新加载systemd
sudo systemctl daemon-reloadAI_Oral_Assistant/
├── tts/ # 语音合成模块
│ ├── tts_module.py # TTS核心模块
│ ├── config.py # 配置文件
│ └── models/ # TTS模型目录
├── se/ # 语音增强模块 (Speech Enhancement)
│ ├── raspberry_deploy.py # 树莓派部署(录音和音频增强)
│ ├── models/ # 音频处理模型(波束形成、去噪)
│ └── utils/ # 工具函数
├── asr/ # 语音识别模块 (ASR)
│ ├── asr_module.py # ASR核心模块(基于Vosk)
│ ├── config.py # ASR配置
│ └── models/ # Vosk模型目录
├── scoring/ # 评分模块
│ ├── speech_rater.py # 评分主类
│ ├── audio_analyzer.py # 音频分析
│ ├── delivery_scorer.py # 发音评分
│ └── language_scorer.py # 内容评分
├── doc/ # 文档和题库
├── main.py # 主程序入口
├── install.sh # 安装脚本
├── environment.yml # Conda环境配置
└── README.md # 本文件
题目存储在 question.md 文件中,每行一道题。
可以在 scoring/config.py 中调整各指标的权重。
- 语音增强模块(SE):16kHz,单通道或多通道(可在
se/config.py中修改) - 语音识别模块(ASR):16kHz,单声道(Vosk模型要求)
- 合成模块(TTS):22.05kHz,单声道
# 初始化conda
source ~/miniconda3/etc/profile.d/conda.sh
# 或
source ~/anaconda3/etc/profile.d/conda.sh
# 添加到 ~/.bashrc
echo "source ~/miniconda3/etc/profile.d/conda.sh" >> ~/.bashrc# 删除环境重新创建
conda env remove -n oral_assistant -y
./install.sh手动下载:
- 访问 https://github.com/rhasspy/piper/releases
- 下载
en_US-amy-medium.onnx和en_US-amy-medium.onnx.json - 放到
tts/models/目录
sudo usermod -a -G audio $USER
# 重新登录后生效如果ASR识别失败,需要下载Vosk模型:
# 创建模型目录
mkdir -p asr/models
# 下载轻量级模型(推荐,约40MB)
cd asr/models
wget https://alphacephei.com/vosk/models/vosk-model-small-en-us-0.15.zip
unzip vosk-model-small-en-us-0.15.zip
cd ../..以下包是可选的,不影响基本功能:
spacy- 评分功能会使用简化方法torch- 语音增强模块可选(树莓派上建议不使用)
所有模块都支持完全离线运行,不依赖网络连接。
- TTS模块:使用Piper TTS预训练模型
- SE模块(语音增强):波束形成(DSB/MVDR)+ 谱减法去噪
- ASR模块(语音识别):基于Vosk离线语音识别引擎
- 评分模块:大部分功能使用纯算法,可选spaCy增强
- 适配树莓派ARM架构
- 使用轻量级算法,减少计算量
- 支持流式处理,降低延迟
- 集成ASR功能(基于Vosk)
- 支持从Word文档读取题库
- 添加历史记录功能
- 添加可视化界面
- 优化ASR识别准确率(使用更大模型)
- Piper TTS: https://github.com/rhasspy/piper
- TOEFL SpeechRater: 见
doc/rate.txt - 树莓派音频配置: https://www.raspberrypi.com/documentation/computers/configuration.html#audio-configuration