# 端侧大模型离线翻译app **Repository Path**: teampanel/FaceTranslator ## Basic Information - **Project Name**: 端侧大模型离线翻译app - **Description**: No description available - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-22 - **Last Updated**: 2026-09-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: 离线翻译, 端侧AI, 离线大模型 ## README # FaceTranslator 端侧离线「面对面实时翻译」Android 应用(Kotlin 实现):不联网、不依赖 Google Play,即可完成语音识别 → 翻译 → 语音播报的完整面对面翻译闭环。 - **面对面翻译**:双人对话,左右各按住说话,语音识别 → 翻译 → TTS 语音播报 + 文字展示 - **录音实时翻译**:按住录音持续识别并实时翻译,支持复制译文、朗读译文 - **端侧 AI 离线翻译**:Qwen2.5-0.5B-Instruct ONNX 端侧大模型(ONNX Runtime Mobile),完全离线运行 - **国内网络可用**:模型均从 ModelScope / hf-mirror 等国内可访问地址下载,不依赖 Google Play 服务 - **多语言**:中文、英文、日文、韩文、法文、德文、西班牙文,任意语言互译,源/目标语言自由切换 --- ## 项目简介 FaceTranslator 是一款面向跨国交流场景的 Android 端侧翻译应用。它在设备本地完成「语音识别(ASR)→ 机器翻译(MT)→ 语音合成(TTS)」全链路: - 语音识别采用 **Vosk** 离线 ASR(多语言小模型,16kHz 采集,实时 partial + final 结果); - 翻译引擎默认使用 **Qwen2.5-0.5B-Instruct int8 量化 ONNX 模型**,通过 ONNX Runtime Mobile 在端侧自回归生成译文,支持中英日韩法德西等任意语言互译; - TTS 使用系统 `TextToSpeech`,按目标语言自动切换 Locale 播报。 所有识别与翻译均在设备本地完成,**无需联网、无数据上传**,隐私安全;同时模型下载走国内镜像,国内网络环境开箱即用。 ## 核心功能 | 功能 | 说明 | |---|---| | 面对面翻译 | 左右双人各按住说话,自动识别并翻译,译文 TTS 播报 + 文字展示 | | 录音实时翻译 | 按住录音持续识别,实时输出翻译结果,支持复制 / 朗读译文 | | 端侧大模型翻译 | Qwen2.5-0.5B-Instruct ONNX(int8 量化)本地推理,默认引擎,完全离线 | | 多语言互译 | 中文 / 英文 / 日文 / 韩文 / 法文 / 德文 / 西班牙文 7 语言自由互译 | | 离线语音识别 | Vosk 离线 ASR,按语言加载对应小模型,无需云端 | | 自动模型管理 | 首次使用时自动从国内镜像下载缺失模型,带进度提示;也支持手动放置 | | 国内可用 | 不依赖 Google Play 服务,模型均通过 ModelScope / hf-mirror 下载 | ## 技术架构 分层设计,核心能力均通过接口抽象,便于替换实现: ``` ┌─────────────────────────────────────────────┐ │ UI 层:MainActivity + 3 个功能页(ViewBinding)│ ├─────────────────────────────────────────────┤ │ 语音识别:SpeechRecognizer 接口 │ │ └─ VoskSpeechRecognizer(Vosk 离线 ASR) │ ├─────────────────────────────────────────────┤ │ 翻译引擎:TranslatorEngine 接口 │ │ ├─ OnnxQwenTranslator(默认,端侧大模型) │ │ └─ LlamaOfflineTranslator(预留占位) │ ├─────────────────────────────────────────────┤ │ Tokenizer:QwenBpeTokenizer(纯 Kotlin,无 JNI)│ ├─────────────────────────────────────────────┤ │ 模型管理:ModelManager(下载/校验/路径管理) │ ├─────────────────────────────────────────────┤ │ TTS:TtsManager(系统 TextToSpeech) │ └─────────────────────────────────────────────┘ ``` **翻译数据流**:`AudioRecord 采集 16kHz PCM → Vosk 识别文本 → Qwen2.5 Chat Template 编码(纯 Kotlin BPE)→ ONNX Runtime 自回归生成(KV cache + greedy)→ 译文文本 → 系统 TTS 播报` 翻译引擎说明: - `OnnxQwenTranslator`(默认):基于 ONNX Runtime Mobile + Qwen2.5-0.5B-Instruct 量化模型。内部通过 few-shot prompt 引导模型完成「翻译到目标语言」任务,采用 KV cache 自回归生成,temperature=0 贪心解码,输出稳定;使用 BASIC 图优化级别以降低内存占用,适配中低端设备。 - `LlamaOfflineTranslator`:端侧大模型翻译的预留占位实现,便于后续接入其他模型。 ## 目录结构 ``` FaceTranslator/ ├── settings.gradle.kts # Gradle 工程配置(仓库 + include app) ├── build.gradle.kts # 根构建脚本(AGP / Kotlin 插件版本) ├── gradle.properties # 全局 Gradle / AndroidX 配置 ├── gradlew / gradlew.bat # Gradle Wrapper 启动脚本 ├── gradle/wrapper/gradle-wrapper.properties ├── local.properties # 本机 SDK 路径(不入库) ├── README.md └── app/ ├── build.gradle.kts # app 模块构建脚本(依赖声明) ├── proguard-rules.pro # 混淆规则(Vosk / ONNX Runtime keep) └── src/main/ ├── AndroidManifest.xml # 录音 / 网络权限 + 4 个 Activity ├── java/com/facetranslator/ │ ├── MainActivity.kt # 主页:三种入口 │ ├── ui/ │ │ ├── FaceTranslateActivity.kt # 面对面翻译(左右双人) │ │ ├── RealtimeTranslateActivity.kt # 录音实时翻译(按住持续 + 复制/朗读) │ │ └── LanguageSettingsActivity.kt # 语言设置(源/目标语言选择) │ ├── speech/ │ │ ├── SpeechRecognizer.kt # 语音识别抽象接口 │ │ └── VoskSpeechRecognizer.kt # Vosk 离线 ASR 实现(16kHz 采集) │ ├── translate/ │ │ ├── TranslatorEngine.kt # 翻译引擎抽象接口 │ │ ├── OnnxQwenTranslator.kt # 【默认】Qwen2.5-0.5B ONNX 端侧大模型翻译 │ │ └── LlamaOfflineTranslator.kt # 端侧大模型翻译【预留占位实现】 │ ├── tokenizer/ │ │ └── QwenBpeTokenizer.kt # 纯 Kotlin Qwen BPE Tokenizer(无 JNI) │ ├── model/ │ │ └── ModelManager.kt # 模型下载/校验/路径管理(国内镜像) │ ├── tts/ │ │ └── TtsManager.kt # TTS 语音播报模块 │ └── language/ │ └── LanguageManager.kt # 语言枚举 + 语言对持久化 └── res/ ├── layout/ # 4 个页面布局 ├── values/ # strings / colors / themes ├── drawable/ # 应用图标 foreground └── mipmap-*/ # 应用图标(adaptive + 各密度) ``` ## 环境要求与构建步骤 环境要求: - JDK 17 - Android Studio(Hedgehog 2023.1.1+,需支持 AGP 8.2.2) - Android 8.0+(API 24+)真机 版本信息:AGP 8.2.2 / Gradle 8.4 / Kotlin 1.9.22 / compileSdk 34 / minSdk 24 / targetSdk 34 / Java 17。 构建步骤: 1. 用 Android Studio 打开 `D:\workspace\FaceTranslator`(或项目所在路径) 2. 首次打开会自动生成 `gradle/wrapper/gradle-wrapper.jar` 并下载 Gradle 8.4(也可在命令行执行 `gradle wrapper --gradle-version 8.4` 手动补齐 wrapper) 3. 等待 Gradle Sync 完成,连接 Android 8.0+ 真机,点击 Run 运行 命令行构建: ```bash ./gradlew assembleDebug ``` 产出 APK:`app/build/outputs/apk/debug/app-debug.apk` ## 核心依赖 | 能力 | 依赖 | 说明 | |---|---|---| | 离线语音识别 | `com.alphacephei:vosk-android:0.3.47` | 端侧 ASR,多语言小模型切换 | | 离线翻译(默认) | `com.microsoft.onnxruntime:onnxruntime-android:1.30.0` | Qwen2.5-0.5B-Instruct ONNX 端侧大模型,Maven Central 可下载 | | TTS | 系统 `android.speech.tts.TextToSpeech` | 按目标语言自动切换 Locale 播报 | | UI / 基础 | `androidx.core:core-ktx:1.12.0`、`appcompat:1.6.1`、`material:1.11.0`、`constraintlayout:2.1.4`、`lifecycle-runtime-ktx:2.7.0` | AndroidX / Material 组件 | | 协程 | `org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3` | 异步识别 / 推理 / 下载 | | 端侧大模型 | Qwen2.5-0.5B-Instruct ONNX(int8 量化) | 约数百 MB,ModelScope / hf-mirror 下载 | > 依赖版本以 `app/build.gradle.kts` 实际声明为准。 ## 模型下载指引(国内镜像) 所有模型均可通过**国内可访问地址**下载;App 也会在首次使用时自动从 ModelScope / hf-mirror 拉取缺失文件(下载过程有进度 Toast 提示)。也支持手动放置模型文件,放置完成后即可跳过下载。 ### 1. Qwen2.5 端侧大模型(翻译,默认方案) 翻译引擎使用 **Qwen2.5-0.5B-Instruct ONNX**(int8 量化,约数百 MB,支持中英日韩法德西等任意语言互译)。 **App 内自动下载(默认)**:首次翻译时,`ModelManager` 会自动从以下国内镜像下载缺失文件到应用私有目录 `filesDir/models/qwen/`: - hf-mirror(默认主源):`https://hf-mirror.com/onnx-community/Qwen2.5-0.5B-Instruct-ONNX/resolve/main/<文件名>` - ModelScope(备选):在 [modelscope.cn](https://modelscope.cn) 搜索「Qwen2.5-0.5B-Instruct ONNX」获取对应仓库下载 **手动放置(可选)**:将以下 5 个文件放入 **`filesDir/models/qwen/`**(即 `Android/data/com.facetranslator/files/models/qwen/`,需 Android 文件管理器或 adb 访问): | 文件 | 说明 | |---|---| | `onnx/model_int8.onnx` | int8 量化 ONNX 模型(数百 MB) | | `vocab.json` | BPE 词表 | | `merges.txt` | BPE 合并规则 | | `tokenizer_config.json` | tokenizer 配置(add_bos / 特殊 token) | | `config.json` | 模型配置(hidden_size / 层数 / vocab_size 等) | ### 2. Vosk 语音识别模型(离线 ASR) 语音识别按语言加载对应 Vosk 小模型,模型目录名与语言映射如下: | 语言 | Vosk 模型目录名 | |---|---| | 中文 | `vosk-model-small-cn-0.22` | | 英文 | `vosk-model-small-en-us-0.15` | | 日文 | `vosk-model-small-ja-0.22` | | 韩文 | `vosk-model-small-ko-0.22` | | 法文 | `vosk-model-small-fr-pguyot-0.3` | | 德文 | `vosk-model-small-de-0.15` | | 西班牙文 | `vosk-model-small-es-0.42` | 模型获取与放置方式(二选一): - **方式一(assets 内置)**:从 [alphacephei.com/vosk/models](https://alphacephei.com/vosk/models)(或通过 hf-mirror 等国内镜像代理下载)获取对应模型压缩包,解压后将模型**目录**放入 `app/src/main/assets/<模型目录名>/`,重新构建 APK 即可;App 首次启动会自动将 assets 中的模型解压到 `filesDir`。 - **方式二(运行期放置 zip)**:将模型 zip(如 `vosk-model-small-cn-0.22.zip`)放到外部存储的 `Android/data/com.facetranslator/files/vosk_models/`(或应用内部 `filesDir/vosk_models/`),App 首次使用时自动解压到 `filesDir`。 ## 注意事项 - **首次使用需下载模型**:Qwen 翻译模型约数百 MB(int8 量化),Vosk 语音模型每个语言约几十 MB;建议在 Wi-Fi 环境下完成首次模型下载。下载过程中请勿杀进程。 - **完全离线、隐私安全**:语音识别与翻译均在设备本地完成,录音与文本不会上传到任何服务器。 - **录音权限**:App 使用 `RECORD_AUDIO` 权限进行语音采集,请授予麦克风权限。 - **TTS 语音包**:系统 TTS 播报依赖设备已安装对应语言的语音数据;个别语言首次播报时系统可能提示下载语音包,可在系统「文字转语音设置」中预装。 - **模型放置路径**:Qwen 模型必须位于 `filesDir/models/qwen/`;Vosk 模型按 `assets/` 或 `vosk_models/` zip 规则放置,路径错误将导致对应能力不可用。 - **内存占用**:Qwen2.5-0.5B 端侧推理约占用数百 MB 内存,已在实现中通过 BASIC 图优化级别降低峰值占用;极低内存设备上翻译响应可能偏慢。 - **国内可用性**:项目不依赖 Google Play 服务(ML Kit 等方案已移除/不启用),模型下载使用国内可访问镜像。 ## 商务合作 商务联系 QQ:**467643531** 欢迎洽谈端侧离线翻译、离线大模型部署、多语言语音交互等相关合作。