本项目实现一个智能语音翻译应用,支持三种处理路径的动态选择:
- 完全手机本地运行:语音识别和翻译都在手机端完成
- 手机识别,服务器翻译:语音识别在手机端,翻译在服务器端
- 完全服务器识别和翻译:音频上传到服务器完成全部处理
- 🎯 智能路径选择:基于网络状态自动选择最优处理路径
- 📊 实时网络检测:定期检测到服务器的网络速度
- 🔄 动态路径切换:网络中断时自动切换到本地处理
- ⚡ 高性能处理:支持GPU加速和模型预加载
- 📱 跨平台支持:移动端和服务器端分离架构
语音转中文应用/
├── mobile_app/ # 移动端应用
│ ├── app.py # 移动端主应用
│ ├── requirements.txt # 移动端依赖
│ ├── .env # 移动端配置
│ └── README.md # 移动端说明
├── cloud_backend/ # 服务器后端
│ ├── app.py # 服务器主应用
│ ├── requirements.txt # 服务器依赖
│ ├── .env # 服务器配置
│ └── README.md # 服务器说明
├── hub/ # 模型存储目录
│ ├── models--openai--whisper-tiny/ # Whisper语音识别模型
│ └── models--Helsinki-NLP--opus-mt-en-zh/ # 英中翻译模型
├── download_models.py # 模型下载脚本
├── hello.mp3 # 测试音频文件
└── requirements.txt # 项目依赖(旧版本)
- 语音识别:使用OpenAI Whisper模型将语音转换为英文文本
- 文本翻译:使用Helsinki-NLP--opus-mt-en-zh模型将英文文本翻译成中文
应用通过以下步骤选择最优处理路径:
- 网络速度检测:定期测量到服务器的网络传输速度
- 处理时间预估:
- 本地处理时间 = 语音识别时间 + 翻译时间
- 云端处理时间 = 上传时间 + 服务器处理时间 + 下载时间
- 路径决策:比较预估时间,选择最快的处理路径
- 错误恢复:如果选择的路径失败,自动切换到备用路径
确保已安装Python 3.8+和必要的依赖。
编辑 mobile_app/.env 文件,设置相关配置:
# 服务器配置
SERVER_BASE_URL=http://localhost:5000
# 模型路径配置
WHISPER_MODEL_PATH=../hub/models--openai--whisper-tiny
TRANSLATION_MODEL_PATH=../hub/models--Helsinki-NLP--opus-mt-en-zh
# 临时目录配置
TEMP_DIR=temp编辑 cloud_backend/.env 文件,设置相关配置:
# 服务器配置
SERVER_HOST=0.0.0.0
SERVER_PORT=5000
# 模型路径配置
WHISPER_MODEL_PATH=../hub/models--openai--whisper-tiny
TRANSLATION_MODEL_PATH=../hub/models--Helsinki-NLP--opus-mt-en-zh
# 性能配置
MAX_AUDIO_DURATION=30
MAX_FILE_SIZE=10485760
# 日志配置
LOG_LEVEL=INFO
# 临时目录配置
TEMP_DIR=tempcd cloud_backend
pip install -r requirements.txt
python app.py服务器将在 http://localhost:5000 启动
cd mobile_app
pip install -r requirements.txt
streamlit run app.py应用将在 http://localhost:8501 启动
- 录音功能:用户通过移动端应用录制语音,支持5-30秒可调时长
- 文件上传:支持WAV、MP3、M4A、FLAC、OGG格式音频文件上传
- 临时存储:所有音频文件保存在
mobile_app/temp/目录进行临时处理
应用支持四种处理模式:
- 智能选择(auto):基于网络状态和音频时长自动选择最优路径
- 强制本地(local):强制使用本地模型处理
- 强制混合(hybrid):强制使用混合路径(手机识别+服务器翻译)
- 强制云端(cloud):强制使用云端处理
基于NetworkSpeedEstimator类的智能决策逻辑:
def choose_optimal_path(audio_duration, network_speed_estimator):
# 获取网络延迟和带宽信息
network_latency = network_speed_estimator.get_network_latency()
upload_bandwidth = network_speed_estimator.get_upload_bandwidth()
download_bandwidth = network_speed_estimator.get_download_bandwidth()
# 估算三种路径的处理时间
local_time = estimate_local_processing_time(audio_duration)
hybrid_time = estimate_hybrid_processing_time(audio_duration, upload_bandwidth, download_bandwidth, network_latency)
cloud_time = estimate_cloud_processing_time(audio_duration, upload_bandwidth, download_bandwidth, network_latency)
# 基于网络状态的决策逻辑
if network_latency > 5000 or upload_bandwidth < 10: # 网络不可用或极差
return "local"
elif network_latency > 1000 or upload_bandwidth < 50: # 网络较差
return min(["local", "hybrid"], key=lambda x: [local_time, hybrid_time])
else: # 网络良好
return min(["local", "hybrid", "cloud"], key=lambda x: [local_time, hybrid_time, cloud_time])处理步骤:
- 模型预加载检查:检查本地Whisper模型和翻译模型是否已加载
- 语音识别:使用Whisper-tiny模型将音频转换为英文文本
- 本地翻译:使用opus-mt-en-zh模型将英文翻译成中文
- 结果返回:返回识别和翻译结果,包含处理时间统计
技术特点:
- 使用
transformers库加载本地模型 - 支持GPU加速(如果可用)
- 完全离线处理,不依赖网络
处理步骤:
- 本地语音识别:在移动端使用Whisper模型进行语音识别
- 文本上传:将识别出的英文文本上传到服务器
- 服务器翻译:服务器端使用翻译模型进行文本翻译
- 结果返回:服务器返回翻译结果,移动端整合显示
技术特点:
- 语音识别在本地完成,保护用户隐私
- 翻译在服务器完成,保证翻译质量
- 网络中断时自动降级到本地翻译
处理步骤:
- 音频上传:将音频文件上传到云端服务器
- 服务器处理:服务器端完成语音识别和翻译
- 结果返回:服务器返回完整的处理结果
技术特点:
- 处理质量最高,使用服务器资源
- 支持大文件处理
- 依赖稳定的网络连接
基于后台线程的实时网络状态监控:
def measure_network_speed():
# 使用NetworkSpeedEstimator类进行网络状态检测
# 包含网络延迟测量、上传/下载带宽分离估算
# 返回包含延迟、上传带宽、下载带宽的综合网络状态基于多维度网络指标的综合评估:
-
网络延迟分类:
- 优秀(<100ms):网络响应迅速
- 良好(100-500ms):网络响应正常
- 一般(500-1000ms):网络响应较慢
- 较差(>1000ms):网络响应延迟明显
-
上传带宽分类:
- 优秀(>100 KB/s):支持大文件上传
- 良好(50-100 KB/s):支持常规文件上传
- 一般(20-50 KB/s):支持小文件上传
- 较差(<20 KB/s):上传能力受限
-
综合网络状态:
- 优秀:延迟<100ms且带宽>100KB/s,三种路径都可选
- 良好:延迟<500ms且带宽>50KB/s,优先选择混合或云端路径
- 一般:延迟<1000ms且带宽>20KB/s,优先选择本地或混合路径
- 较差:延迟>1000ms或带宽<20KB/s,强制使用本地路径
- 不可用:网络连接中断,只能使用本地路径
- 实时监测:后台线程定期检查云端服务器可达性
- 自动切换:云端处理失败时自动切换到本地处理模式
- 智能网速估算器更新:网络中断时更新网速估算器状态,标记网络不可用
- 混合处理降级:混合处理中翻译失败时自动使用本地翻译模型
- 错误分类处理:
- 请求超时(>30秒):自动重试或切换到本地处理
- 连接错误:标记网络不可用,更新网速估算器
- 4xx错误(客户端错误):记录错误信息,提示用户检查输入
- 5xx错误(服务器错误):记录错误信息,自动切换到备用路径
- 优雅降级:云端服务不可用时,自动降级到本地处理模式
- 状态缓存:缓存云端服务器状态,避免频繁检查
- 文件检查:验证本地模型文件完整性和可访问性
- 错误信息:提供详细的错误描述和解决建议
- 路径切换:模型加载失败时自动切换到可用的处理路径
- 重新加载尝试:提供模型重新加载机制,支持动态恢复
- 网络状态变化检测:实时监测网络连接状态变化
- 带宽动态调整:根据网络质量动态调整上传/下载带宽估算
- 延迟自适应:根据网络延迟调整路径选择策略
- 状态持久化:保存网络状态历史,支持智能预测
- 移动端预加载:应用启动时预加载Whisper语音识别模型和Opus-MT翻译模型
- 云端预加载:服务器启动时预加载所有模型,支持GPU加速(CUDA)
- 动态加载:按需加载模型,减少内存占用
- 模型缓存:已加载模型保持缓存状态,提高重复使用效率
- 初始化基准测试:应用启动时运行本地和云端处理速度测试
- 实时性能监控:持续监控处理速度,动态调整路径选择策略
- 性能数据收集:收集30秒窗口内的处理性能数据,支持智能决策
- 定期检查:后台线程每30秒检查云端服务器状态
- 网络延迟测量:实时测量到服务器的网络延迟
- 状态缓存:缓存云端服务器状态,避免频繁网络请求
- 智能网速估算:基于历史数据智能估算网络带宽
- 上传/下载带宽分离:分别估算上传和下载带宽
- 网络延迟自适应:根据延迟动态调整带宽估算
- 历史数据学习:基于历史网络状态数据优化估算精度
- 动态更新机制:网络状态变化时实时更新估算参数
- 安全存储:
temp/目录用于存储临时音频文件,支持路径安全验证 - 自动清理:支持文件清理机制,避免磁盘空间占用
- 并发处理:支持多用户同时处理,避免文件冲突
- 多维度估算:基于音频时长、网络延迟、带宽和处理速度综合预估
- 实时调整:根据实际处理性能动态调整预估时间
- 路径比较:比较三种路径的预估时间,选择最优方案
- 录音控制:录制语音并实时显示波形
- 处理模式:智能选择/强制本地/强制混合/强制云端
- 网络状态:实时显示网络速度和连接状态
- 处理结果:显示英文识别结果和中文翻译结果
- 适用场景:网络连接差或需要快速响应
- 优势:响应快,不依赖网络,保护隐私
- 限制:需要本地模型支持,翻译质量一般
- 适用场景:网络一般,需要平衡速度和质量
- 优势:语音识别本地化保护隐私,翻译质量较高
- 限制:需要部分网络连接
- 适用场景:网络良好,需要最高质量处理
- 优势:处理质量最高,支持大文件
- 限制:依赖稳定网络连接
本项目对比分析不同处理路径在以下方面的差异:
- 响应时间:本地处理 vs 云端处理的时间对比
- 资源消耗:移动端资源使用 vs 服务器资源使用
- 网络依赖性:不同网络条件下的性能表现
- 成本效益:本地计算 vs 云端计算的成本分析
- 适用场景:不同使用场景下的最优选择
- 网络中断检测:实时监测网络连接状态
- 路径切换:网络中断时自动切换到本地处理
- 重试机制:处理失败时自动重试或切换路径
- 状态保存:保存处理状态,避免重复计算
- 模型预加载:服务器启动时预加载模型
- GPU加速:支持CUDA加速推理
- 音频优化:音频预处理和压缩
- 缓存机制:常用翻译结果缓存
- 多语言支持:扩展支持更多语言翻译
- 离线模式:完整的本地处理支持
- 批量处理:支持批量语音文件处理
- API扩展:提供更丰富的API接口
软件体系结构课程作业
注意:首次运行需要下载模型文件,请确保网络连接正常。