技术栈文档
DuRT 技术栈文档 (macOS 语音识别与翻译工具)
1. 技术栈选型与版本
- 核心开发框架:
- SwiftUI (3.0+): 构建声明式、响应式用户界面的首选现代化框架,确保流畅的悬浮窗交互体验。
- AppKit (macOS SDK): 提供底层窗口管理(悬浮窗
NSWindow
)、系统集成、菜单栏控制等必要原生能力。
- 语音识别引擎:
- Apple Speech Framework (
SFSpeechRecognizer
): 核心语音转文本引擎,支持多种语言,利用Apple优化过的本地模型,保障基础识别性能与隐私。 - 本地化AI模型 (可选/补充): 如 Whisper.cpp (v1.5.0+) 或 Vosk (0.3.45+)。集成高性能、轻量级开源语音识别模型库,扩展语言支持(尤其是Speech框架覆盖不足的语种)并提升特定场景准确度。模型文件内置App Bundle。
- Apple Speech Framework (
- 机器翻译引擎:
- 本地化Transformer模型 (Core ML格式): 使用 PyTorch (2.0+) 或 TensorFlow (2.12+) 训练轻量级翻译模型,通过 Core ML Tools (7.0+) 转换为
.mlmodel
格式集成。模型文件内置App Bundle,完全离线运行。
- 本地化Transformer模型 (Core ML格式): 使用 PyTorch (2.0+) 或 TensorFlow (2.12+) 训练轻量级翻译模型,通过 Core ML Tools (7.0+) 转换为
- 音频处理:
- AVFoundation Framework (
AVAudioEngine
,AVAudioInputNode
): 实时捕获麦克风音频流,进行低延迟缓冲与预处理(如降噪、增益控制)。
- AVFoundation Framework (
- AI推理引擎:
- Core ML (5.0+): Apple原生高性能机器学习框架,负责高效、安全地执行本地语音识别模型(如Whisper/Vosk)和翻译模型的推理,充分利用Apple Silicon(ANE)或GPU加速。
- 系统服务集成:
- ExtensionKit / XPC (可选): 若需实现全局快捷键激活或更深层系统集成(如识别当前应用上下文),可能需开发辅助守护进程或系统扩展,通过XPC进行安全进程间通信。
- 数据存储:
- SwiftData (macOS 14+) 或 Core Data: 轻量级本地存储,用于管理用户配置(目标语言、快捷键、UI偏好)、历史翻译记录缓存(可选,需明确用户隐私选项)。
- 依赖管理:
- Swift Package Manager (SPM): 管理开源库依赖(如Whisper.cpp/Vosk封装库)。
- 开发环境:
- Xcode (15.0+), macOS SDK (14.0+), Swift (5.9+), 部署目标:macOS 12.0+
2. 核心模块技术方案
- 语音捕获与预处理 (
AudioCaptureService
):- 使用
AVAudioEngine
配置音频会话 (AVAudioSession
),请求麦克风权限。 - 连接
AVAudioInputNode
捕获原始PCM音频流。 - 实现实时环形缓冲区,处理音频数据块(如30ms),应用必要的预处理(VAD端点检测、降噪滤波)。
- 使用
- 语音识别 (
SpeechRecognitionService
):- 双引擎策略: 主引擎优先使用
SFSpeechRecognizer
。对于其不支持或识别率低的语言,无缝切换到本地模型引擎(Whisper/Vosk)。 - Apple Speech: 创建
SFSpeechRecognitionTask
,将预处理后的音频缓冲区 (AVAudioPCMBuffer
) 或文件送入识别。 - 本地模型: 使用Core ML加载
.mlmodel
(Whisper/Vosk)。将音频块转换为模型输入特征(如Mel频谱),执行prediction
获得文本结果。实现结果流式输出拼接。
- 双引擎策略: 主引擎优先使用
- 机器翻译 (
TranslationService
):- 使用Core ML加载预置的翻译
.mlmodel
。 - 接收识别后的源语言文本。
- 执行模型推理 (
prediction
),获得目标语言翻译文本。 - 优化: 实现简单缓存机制(LRU),缓存常用短语翻译结果,减少模型调用。
- 使用Core ML加载预置的翻译
- 悬浮窗展示 (
OverlayWindowManager
):- 创建
NSWindow
,设置level = .floating
,styleMask = [.borderless]
,isOpaque = false
,backgroundColor = .clear
。 - 使用SwiftUI定义悬浮窗视图 (
OverlayView
),展示实时识别文本、翻译结果、语言标签、控制按钮。 - 实现窗口拖拽、调整大小(可选)、置顶/隐藏逻辑。
- 响应系统事件(如屏幕分辨率变化、空间切换),保持位置合理性。
- 创建
- 系统服务与集成 (
SystemIntegrationService
):- 注册全局快捷键 (
addLocalMonitorForEvents(matching: .keyDown)
) 激活/隐藏悬浮窗或触发识别。 - (如需要)开发XPC Service处理需更高权限或后台持续运行的任务。
- 注册全局快捷键 (
3. 关键架构特性
- 隐私优先:
- 所有语音数据处理(识别、翻译)100%本地完成,无网络请求。
- 用户数据(音频、识别文本、翻译结果)默认不持久化。若提供历史记录功能,需明确用户授权选项,数据加密存储 (
Data Protection API
)。 - 严格遵守macOS沙盒 (
App Sandbox
) 限制,仅请求必要权限(麦克风、辅助功能-用于全局快捷键)。
- 性能优化:
- 硬件加速: Core ML自动利用Apple Silicon NPU (ANE) / GPU,最大化本地模型推理速度。
- 流式处理: 音频捕获、识别、翻译流水线化,减少端到端延迟。
- 轻量模型: 精心选择或训练小型、高效的语音识别与翻译模型,平衡精度与资源消耗。
- 内存管理: 严格管理音频缓冲区、模型输入输出内存,避免泄漏。使用
autoreleasepool
。
- 可扩展性:
- 模块化设计:
AudioCaptureService
,SpeechRecognitionService
,TranslationService
,OverlayWindowManager
高度解耦,通过清晰协议通信。 - 插件式模型加载: 模型加载器 (
ModelLoader
) 抽象接口,方便未来集成新语音识别或翻译模型(只需实现对应接口并更新配置)。 - 配置驱动: 用户设置(语言对、识别引擎偏好、UI样式)集中管理,易于扩展新选项。
- 模块化设计:
4. 实施要点
- 环境搭建: Xcode 15+, 配置Swift Package依赖 (Whisper.cpp/Vosk的Swift封装)。
- 模型准备: 训练/获取目标语言对的轻量翻译模型 (e.g., OPUS-MT),使用Core ML Tools转换。准备所需语音识别模型文件。
- 核心服务实现:
- 实现
AudioCaptureService
进行低延迟音频流处理。 - 实现
SpeechRecognitionService
,集成Speech框架和本地模型引擎。 - 实现
TranslationService
,封装Core ML模型推理。
- 实现
- UI与交互:
- 使用SwiftUI构建主应用界面(设置页)和核心的
OverlayView
。 - 使用AppKit (
NSWindow
,NSViewControllerRepresentable
) 管理悬浮窗的生命周期、位置和层级。
- 使用SwiftUI构建主应用界面(设置页)和核心的
- 系统集成: 实现全局快捷键监听、辅助功能权限请求(如需)。
- 数据与配置: 使用SwiftData/Core Data实现设置持久化。谨慎设计历史记录存储(加密、用户可控)。
- 测试与优化:
- 单元测试核心算法与服务。
- 集成测试端到端语音识别翻译流程。
- 性能剖析 (Instruments):重点监测CPU/GPU/内存占用、音频延迟、模型推理时间。
- 多语言、多口音场景测试。
- 上架准备: 配置App Sandbox权限,完善隐私声明(明确所有数据处理均在本地),符合Mac App Store审核指南。
总结: DuRT的技术栈围绕 本地化、高性能、隐私安全 构建。利用Apple原生框架(SwiftUI, AppKit, AVFoundation, Speech, Core ML)保障基础体验与效率,选择性集成高性能开源本地模型(Whisper/Vosk)扩展能力边界。模块化设计和Core ML的硬件加速为未来功能扩展(如新模型、新语言)与持续性能优化奠定了坚实基础。严格的隐私控制(无网络、沙盒、可选加密存储)是核心产品优势的技术保障。