Skip to content

Repository files navigation

智能语音翻译应用 - 软件体系结构课程作业

项目概述

本项目实现一个智能语音翻译应用,支持三种处理路径的动态选择:

  1. 完全手机本地运行:语音识别和翻译都在手机端完成
  2. 手机识别,服务器翻译:语音识别在手机端,翻译在服务器端
  3. 完全服务器识别和翻译:音频上传到服务器完成全部处理

核心特性

  • 🎯 智能路径选择:基于网络状态自动选择最优处理路径
  • 📊 实时网络检测:定期检测到服务器的网络速度
  • 🔄 动态路径切换:网络中断时自动切换到本地处理
  • 高性能处理:支持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           # 项目依赖(旧版本)

技术架构

处理流程

  1. 语音识别:使用OpenAI Whisper模型将语音转换为英文文本
  2. 文本翻译:使用Helsinki-NLP--opus-mt-en-zh模型将英文文本翻译成中文

智能路径选择算法

应用通过以下步骤选择最优处理路径:

  1. 网络速度检测:定期测量到服务器的网络传输速度
  2. 处理时间预估
    • 本地处理时间 = 语音识别时间 + 翻译时间
    • 云端处理时间 = 上传时间 + 服务器处理时间 + 下载时间
  3. 路径决策:比较预估时间,选择最快的处理路径
  4. 错误恢复:如果选择的路径失败,自动切换到备用路径

安装和运行

1. 环境准备

确保已安装Python 3.8+和必要的依赖。

2. 配置环境变量

移动端配置 (mobile_app/.env)

编辑 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)

编辑 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=temp

3. 启动服务器后端

cd cloud_backend
pip install -r requirements.txt
python app.py

服务器将在 http://localhost:5000 启动

4. 启动移动端应用

cd mobile_app
pip install -r requirements.txt
streamlit run app.py

应用将在 http://localhost:8501 启动

业务逻辑和处理步骤

核心处理流程

1. 音频输入阶段

  • 录音功能:用户通过移动端应用录制语音,支持5-30秒可调时长
  • 文件上传:支持WAV、MP3、M4A、FLAC、OGG格式音频文件上传
  • 临时存储:所有音频文件保存在mobile_app/temp/目录进行临时处理

2. 路径选择阶段

应用支持四种处理模式:

  • 智能选择(auto):基于网络状态和音频时长自动选择最优路径
  • 强制本地(local):强制使用本地模型处理
  • 强制混合(hybrid):强制使用混合路径(手机识别+服务器翻译)
  • 强制云端(cloud):强制使用云端处理

3. 智能路径选择算法

基于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])

三种处理路径的详细实现

路径1:完全本地运行(process_locally)

处理步骤:

  1. 模型预加载检查:检查本地Whisper模型和翻译模型是否已加载
  2. 语音识别:使用Whisper-tiny模型将音频转换为英文文本
  3. 本地翻译:使用opus-mt-en-zh模型将英文翻译成中文
  4. 结果返回:返回识别和翻译结果,包含处理时间统计

技术特点:

  • 使用transformers库加载本地模型
  • 支持GPU加速(如果可用)
  • 完全离线处理,不依赖网络

路径2:混合处理(process_hybrid)

处理步骤:

  1. 本地语音识别:在移动端使用Whisper模型进行语音识别
  2. 文本上传:将识别出的英文文本上传到服务器
  3. 服务器翻译:服务器端使用翻译模型进行文本翻译
  4. 结果返回:服务器返回翻译结果,移动端整合显示

技术特点:

  • 语音识别在本地完成,保护用户隐私
  • 翻译在服务器完成,保证翻译质量
  • 网络中断时自动降级到本地翻译

路径3:完全云端处理(process_in_cloud)

处理步骤:

  1. 音频上传:将音频文件上传到云端服务器
  2. 服务器处理:服务器端完成语音识别和翻译
  3. 结果返回:服务器返回完整的处理结果

技术特点:

  • 处理质量最高,使用服务器资源
  • 支持大文件处理
  • 依赖稳定的网络连接

网络状态检测机制

智能网速估算器(NetworkSpeedEstimator)

基于后台线程的实时网络状态监控:

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,强制使用本地路径
    • 不可用:网络连接中断,只能使用本地路径

错误处理和恢复机制

1. 网络中断处理

  • 实时监测:后台线程定期检查云端服务器可达性
  • 自动切换:云端处理失败时自动切换到本地处理模式
  • 智能网速估算器更新:网络中断时更新网速估算器状态,标记网络不可用
  • 混合处理降级:混合处理中翻译失败时自动使用本地翻译模型

2. 服务器错误处理

  • 错误分类处理
    • 请求超时(>30秒):自动重试或切换到本地处理
    • 连接错误:标记网络不可用,更新网速估算器
    • 4xx错误(客户端错误):记录错误信息,提示用户检查输入
    • 5xx错误(服务器错误):记录错误信息,自动切换到备用路径
  • 优雅降级:云端服务不可用时,自动降级到本地处理模式
  • 状态缓存:缓存云端服务器状态,避免频繁检查

3. 模型加载失败处理

  • 文件检查:验证本地模型文件完整性和可访问性
  • 错误信息:提供详细的错误描述和解决建议
  • 路径切换:模型加载失败时自动切换到可用的处理路径
  • 重新加载尝试:提供模型重新加载机制,支持动态恢复

4. 智能网速估算器动态更新

  • 网络状态变化检测:实时监测网络连接状态变化
  • 带宽动态调整:根据网络质量动态调整上传/下载带宽估算
  • 延迟自适应:根据网络延迟调整路径选择策略
  • 状态持久化:保存网络状态历史,支持智能预测

性能优化策略

1. 模型预加载

  • 移动端预加载:应用启动时预加载Whisper语音识别模型和Opus-MT翻译模型
  • 云端预加载:服务器启动时预加载所有模型,支持GPU加速(CUDA)
  • 动态加载:按需加载模型,减少内存占用
  • 模型缓存:已加载模型保持缓存状态,提高重复使用效率

2. 基准测试系统

  • 初始化基准测试:应用启动时运行本地和云端处理速度测试
  • 实时性能监控:持续监控处理速度,动态调整路径选择策略
  • 性能数据收集:收集30秒窗口内的处理性能数据,支持智能决策

3. 后台云端状态监控

  • 定期检查:后台线程每30秒检查云端服务器状态
  • 网络延迟测量:实时测量到服务器的网络延迟
  • 状态缓存:缓存云端服务器状态,避免频繁网络请求
  • 智能网速估算:基于历史数据智能估算网络带宽

4. 智能网速估算器

  • 上传/下载带宽分离:分别估算上传和下载带宽
  • 网络延迟自适应:根据延迟动态调整带宽估算
  • 历史数据学习:基于历史网络状态数据优化估算精度
  • 动态更新机制:网络状态变化时实时更新估算参数

5. 临时文件管理

  • 安全存储temp/目录用于存储临时音频文件,支持路径安全验证
  • 自动清理:支持文件清理机制,避免磁盘空间占用
  • 并发处理:支持多用户同时处理,避免文件冲突

6. 处理时间预估

  • 多维度估算:基于音频时长、网络延迟、带宽和处理速度综合预估
  • 实时调整:根据实际处理性能动态调整预估时间
  • 路径比较:比较三种路径的预估时间,选择最优方案

使用说明

移动端界面功能

  • 录音控制:录制语音并实时显示波形
  • 处理模式:智能选择/强制本地/强制混合/强制云端
  • 网络状态:实时显示网络速度和连接状态
  • 处理结果:显示英文识别结果和中文翻译结果

处理路径说明

路径1:完全本地运行

  • 适用场景:网络连接差或需要快速响应
  • 优势:响应快,不依赖网络,保护隐私
  • 限制:需要本地模型支持,翻译质量一般

路径2:混合处理(手机识别+服务器翻译)

  • 适用场景:网络一般,需要平衡速度和质量
  • 优势:语音识别本地化保护隐私,翻译质量较高
  • 限制:需要部分网络连接

路径3:完全服务器识别和翻译

  • 适用场景:网络良好,需要最高质量处理
  • 优势:处理质量最高,支持大文件
  • 限制:依赖稳定网络连接

体系结构分析

本项目对比分析不同处理路径在以下方面的差异:

  • 响应时间:本地处理 vs 云端处理的时间对比
  • 资源消耗:移动端资源使用 vs 服务器资源使用
  • 网络依赖性:不同网络条件下的性能表现
  • 成本效益:本地计算 vs 云端计算的成本分析
  • 适用场景:不同使用场景下的最优选择

错误处理和恢复

  • 网络中断检测:实时监测网络连接状态
  • 路径切换:网络中断时自动切换到本地处理
  • 重试机制:处理失败时自动重试或切换路径
  • 状态保存:保存处理状态,避免重复计算

性能优化

  • 模型预加载:服务器启动时预加载模型
  • GPU加速:支持CUDA加速推理
  • 音频优化:音频预处理和压缩
  • 缓存机制:常用翻译结果缓存

扩展功能

  • 多语言支持:扩展支持更多语言翻译
  • 离线模式:完整的本地处理支持
  • 批量处理:支持批量语音文件处理
  • API扩展:提供更丰富的API接口

作者信息

软件体系结构课程作业


注意:首次运行需要下载模型文件,请确保网络连接正常。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages