impress_asr_input_rust/PRD.md
impressionyang ceb2df18c4
Some checks are pending
Build Windows GUI / build-windows (push) Waiting to run
Build Windows GUI / release (push) Blocked by required conditions
初始提交:Windows 跨平台语音识别应用
功能:
- Tauri v2 GUI 应用
- 系统托盘支持
- 日志输出到文件
- 带时间戳的版本号
- 前端资源嵌入

修复:
- 前端路径使用相对路径
- 移除 devUrl 配置
- 窗口置顶设置
2026-05-21 17:58:18 +08:00

24 KiB
Raw Blame History

项目需求文档 (PRD)

impress_asr_input_rust


1. 项目概述

1.1 项目名称

impress_asr_input_rust

1.2 项目定位

一款高性能、跨平台的桌面语音识别输入工具,采用纯 Rust 技术栈实现,提供低延迟的语音转文字体验。

1.3 核心价值主张

  • 🚀 极速识别1 秒内完成语音识别响应
  • 🦀 纯 Rust 实现:高性能、内存安全、无外部依赖
  • 🖥️ 全平台支持Windows、Linux、macOS 统一体验
  • 🎯 用户友好:完整的图形界面和系统托盘集成

2. 功能需求

2.1 核心功能

2.1.1 语音录制与识别

功能点 描述 优先级
一键录音 点击按钮即可开始/停止录音 P0
实时波形显示 录音时显示音频波形可视化 P1
自动识别 录音停止后自动触发识别 P0
识别结果显示 实时展示识别出的文字 P0
结果复制 一键复制识别结果到剪贴板 P1
历史记录 保存识别历史记录 P2

2.1.2 音频文件识别

功能点 描述 优先级
文件选择 支持拖拽和文件选择器导入音频 P0
格式支持 支持 WAV、MP3、FLAC、OGG 等格式 P0
批量处理 支持批量导入多个音频文件 P2
进度显示 显示识别进度和预计剩余时间 P1
导出结果 支持导出为 TXT、SRT 字幕格式 P1

2.1.3 配置管理

功能点 描述 优先级
模型选择 选择/切换 ONNX 语音识别模型 P0
语言设置 设置识别语言(中文、英文等) P0
麦克风选择 选择输入音频设备 P0
快捷键配置 自定义全局快捷键 P1
主题设置 深色/浅色主题切换 P2

2.2 系统托盘功能

功能点 描述 优先级
托盘图标 显示应用状态图标 P0
快速菜单 右键菜单提供常用功能 P0
状态指示 显示录音/识别状态 P1
全局快捷键 后台监听录音快捷键 P1

3. 技术架构

3.1 技术栈选型

┌─────────────────────────────────────────────────────────────┐
│                      用户界面层                               │
│  ┌─────────────────────────────────────────────────────┐    │
│  │              Tauri v2 + React/TypeScript            │    │
│  │              (或纯 Rust: Iced/Slint)                │    │
│  └─────────────────────────────────────────────────────┘    │
├─────────────────────────────────────────────────────────────┤
│                      应用逻辑层                               │
│  ┌─────────────────────────────────────────────────────┐    │
│  │                 Rust 业务逻辑层                      │    │
│  │  - 状态管理  - 配置管理  - 任务调度                 │    │
│  └─────────────────────────────────────────────────────┘    │
├─────────────────────────────────────────────────────────────┤
│                      核心服务层                               │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │   音频服务    │  │   识别服务    │  │   系统服务    │      │
│  │  cpal/rodio  │  │  ort/onnxruntime │  tray/icon    │      │
│  └──────────────┘  └──────────────┘  └──────────────┘      │
├─────────────────────────────────────────────────────────────┤
│                      模型层                                   │
│  ┌─────────────────────────────────────────────────────┐    │
│  │           ONNX 模型 (SenseVoice/FunASR 等)           │    │
│  └─────────────────────────────────────────────────────┘    │
└─────────────────────────────────────────────────────────────┘

3.2 核心依赖清单

类别 Crate 用途
UI 框架 tauri v2 跨平台桌面应用框架
UI 框架 (备选) iced / slint 纯 Rust GUI 方案
音频输入 cpal 跨平台音频输入/输出
音频解码 rodio 音频文件解码播放
音频处理 hound WAV 文件读写
ONNX 推理 ort / onnxruntime ONNX 模型推理引擎
张量处理 ndarray 多维数组运算
系统托盘 tauri-plugin-tray 系统托盘支持
快捷键 global-hotkey 全局快捷键监听
配置管理 serde + toml 配置文件序列化
日志 tracing + tracing-subscriber 结构化日志
异步运行时 tokio 异步任务执行

3.3 推荐的 ONNX 模型

模型 语言支持 大小 特点
SenseVoice 中/英/日/韩 ~100MB 阿里达摩院,高精度,支持情感识别
FunASR Paraformer 中/英 ~60MB 阿里,流式识别,低延迟
Whisper (ONNX 版) 多语言 ~40MB-1GB OpenAI多语言支持好

推荐首选: SenseVoice Small 版本,在速度和精度间取得良好平衡


4. 性能要求

4.1 延迟指标

场景 目标 可接受上限
录音启动延迟 < 100ms < 200ms
识别响应延迟 (5 秒音频) < 500ms < 1s
识别响应延迟 (30 秒音频) < 2s < 5s
界面响应帧率 60 FPS > 30 FPS
应用启动时间 < 2s < 5s

4.2 资源占用

指标 空闲状态 录音状态 识别状态
内存占用 < 100MB < 150MB < 500MB
CPU 占用 < 1% < 5% < 30%

4.3 优化策略

  1. 模型量化: 使用 INT8 量化模型减少推理时间
  2. 模型预加载: 应用启动时预加载模型到内存
  3. 流式识别: 支持边录音边识别,减少等待时间
  4. 音频分片: 长音频分段并行处理
  5. GPU 加速: 支持 CUDA/DirectML 后端加速

5. 用户界面设计

5.1 页面结构

┌─────────────────────────────────────────────────────────┐
│  impress_asr_input_rust                    □ ○ ×       │
├─────────────────────────────────────────────────────────┤
│  ┌─────────┬─────────────────────────────────────────┐ │
│  │         │                                          │ │
│  │  侧边   │           主内容区域                      │ │
│  │  导航   │                                          │ │
│  │         │   ┌─────────────────────────────────┐   │ │
│  │  🎙️     │   │                                 │   │ │
│  │  录音    │   │         录音/识别测试           │   │ │
│  │         │   │                                 │   │ │
│  │  📁     │   └─────────────────────────────────┘   │ │
│  │  文件    │                                          │ │
│  │         │                                          │ │
│  │  ⚙️     │                                          │ │
│  │  设置    │                                          │ │
│  │         │                                          │ │
│  └─────────┴─────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘

5.2 录音识别测试页面

┌─────────────────────────────────────────────────────────┐
│  录音识别测试                                            │
├─────────────────────────────────────────────────────────┤
│                                                         │
│           ┌─────────────────────────────────┐          │
│           │     ╭────╮                      │          │
│           │          ╲   波形可视化         │          │
│           │   │   ▓▓   │  ~~~~~~~~~         │          │
│           │    ╲                            │          │
│           │     ╰────╯                      │          │
│           └─────────────────────────────────┘          │
│                                                         │
│              ┌──────────┐  ┌──────────┐               │
│              │  🎤 录音  │  │  ⏹ 停止  │               │
│              └──────────┘  └──────────┘               │
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │ 识别结果:                                        │   │
│  │ ┌─────────────────────────────────────────────┐ │   │
│  │ │ 这里是识别出的文字内容...                   │ │   │
│  │ │                                             │ │   │
│  │ └─────────────────────────────────────────────┘ │   │
│  │                                                  │   │
│  │  [📋 复制]  [🗑️ 清除]  [💾 保存]                 │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  状态:就绪  |  时长00:00  |  模型SenseVoice-ZH    │
└─────────────────────────────────────────────────────────┘

5.3 文件识别转文字页面

┌─────────────────────────────────────────────────────────┐
│  文件识别转文字                                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │  📁 拖拽音频文件到此处,或点击选择文件            │   │
│  │     支持WAV, MP3, FLAC, OGG, M4A              │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  文件列表:                                              │
│  ┌─────────────────────────────────────────────────┐   │
│  │ 📄 meeting_20240115.wav      待处理    [开始]   │   │
│  │ 📄 voice_note_001.mp3   ✓ 已完成    [查看]     │   │
│  │ 📄 interview.flac        处理中 50%  [取消]    │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  [批量开始]  [批量导出]  [清空列表]                     │
│                                                         │
└─────────────────────────────────────────────────────────┘

5.4 功能配置页面

┌─────────────────────────────────────────────────────────┐
│  设置                                                    │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ── 识别模型 ───────────────────────────────────────   │
│  模型选择:[SenseVoice Small ▼]  [下载更多模型]        │
│  识别语言:[中文普通话 ▼]                               │
│  使用 GPU 加速:☐ 启用                                  │
│                                                         │
│  ── 音频输入 ───────────────────────────────────────   │
│  麦克风:[Built-in Microphone ▼]                       │
│  采样率:[16000 Hz ▼]                                  │
│  声道:[单声道 ▼]                                       │
│                                                         │
│  ── 快捷键 ─────────────────────────────────────────   │
│  开始/停止录音:[Ctrl+Shift+R] [修改]                  │
│  快速复制结果:[Ctrl+Shift+C] [修改]                   │
│  显示/隐藏窗口:[Ctrl+Shift+H] [修改]                  │
│                                                         │
│  ── 外观 ───────────────────────────────────────────   │
│  主题:[深色 ▼]                                         │
│  语言:[简体中文 ▼]                                     │
│                                                         │
│  ── 其他 ───────────────────────────────────────────   │
│  开机自启:☐                                            │
│  自动检查更新:☑                                        │
│  保存识别历史:☑  保留天数:[30] 天                    │
│                                                         │
│               [保存设置]  [重置默认]                    │
└─────────────────────────────────────────────────────────┘

5.5 系统托盘菜单

╭────────────────────────────────────╮
│  🎤 开始录音                        │
│  ───────────────────────────────── │
│  📂 打开文件识别...                 │
│  📋 复制上次结果                    │
│  📜 查看历史记录                    │
│  ───────────────────────────────── │
│  ⚙️ 设置                           │
│  ❌ 退出                           │
╰────────────────────────────────────╯

6. 项目结构

impress_asr_input_rust/
├── Cargo.toml
├── README.md
├── PRD.md
├── .gitignore
├── ├──
├── src/
│   ├── main.rs              # 应用入口
│   ├── lib.rs               # 库导出
│   ├──
│   ├── app/                 # Tauri 应用层
│   │   ├── mod.rs
│   │   ├── main.rs          # Tauri 主程序
│   │   ├── commands.rs      # Tauri 命令处理
│   │   └── state.rs         # 应用状态管理
│   │
│   ├── audio/               # 音频处理模块
│   │   ├── mod.rs
│   │   ├── capture.rs       # 音频捕获
│   │   ├── decoder.rs       # 音频解码
│   │   ├── processor.rs     # 音频预处理
│   │   └── resampler.rs     # 音频重采样
│   │
│   ├── asr/                 # 语音识别核心
│   │   ├── mod.rs
│   │   ├── engine.rs        # 识别引擎
│   │   ├── model.rs         # ONNX 模型加载
│   │   ├── decoder.rs       # 识别结果解码
│   │   └── stream.rs        # 流式识别
│   │
│   ├── ui/                  # UI 组件 (如使用 Iced)
│   │   ├── mod.rs
│   │   ├── views/
│   │   │   ├── mod.rs
│   │   │   ├── record.rs    # 录音页面
│   │   │   ├── file.rs      # 文件识别页面
│   │   │   └── settings.rs  # 设置页面
│   │   ├── components/
│   │   │   ├── mod.rs
│   │   │   ├── waveform.rs  # 波形组件
│   │   │   └── player.rs    # 播放器组件
│   │   └── theme.rs         # 主题样式
│   │
│   ├── config/              # 配置管理
│   │   ├── mod.rs
│   │   ├── settings.rs      # 设置结构
│   │   └── manager.rs       # 配置管理器
│   │
│   ├── tray/                # 系统托盘
│   │   ├── mod.rs
│   │   └── handler.rs       # 托盘事件处理
│   │
│   └── utils/               # 工具函数
│       ├── mod.rs
│       ├── logger.rs        # 日志工具
│       └── hotkey.rs        # 快捷键处理
│
├── models/                  # ONNX 模型目录
│   └── sensevoice-small.onnx
│
├── web/                     # Tauri 前端 (如使用 Tauri)
│   ├── package.json
│   ├── vite.config.ts
│   ├── index.html
│   └── src/
│       ├── main.tsx
│       ├── App.tsx
│       ├── pages/
│       │   ├── Record.tsx
│       │   ├── FileConvert.tsx
│       │   └── Settings.tsx
│       └── components/
│
└── resources/
    ├── icons/
    │   ├── icon.ico
    │   ├── icon.png
    │   └── tray-icon.png
    ├── locales/
    │   ├── zh-CN.ftl
    │   └── en-US.ftl
    └── configs/
        └── default.toml

7. 开发里程碑

Phase 1: 基础框架 (2 周)

  • 项目初始化Cargo 配置
  • Tauri/TSD 应用框架搭建
  • 基础 UI 页面框架
  • 配置管理模块
  • 日志系统

Phase 2: 音频核心 (2 周)

  • 音频捕获 (cpal)
  • 音频格式解码 (rodio/hound)
  • 音频预处理 (重采样、归一化)
  • 波形可视化组件

Phase 3: ASR 集成 (2 周)

  • ONNX Runtime 集成 (ort)
  • SenseVoice 模型加载
  • 识别推理管道
  • 结果后处理

Phase 4: 功能完善 (2 周)

  • 文件识别功能
  • 系统托盘集成
  • 全局快捷键
  • 历史记录管理

Phase 5: 优化与发布 (1 周)

  • 性能优化 (延迟、内存)
  • 多平台测试
  • 安装包制作
  • 文档完善

8. 交付物

8.1 软件交付

  • Windows: .msi / .exe 安装程序
  • macOS: .dmg / .app 安装包
  • Linux: .deb / .rpm / AppImage

8.2 代码交付

  • 完整的源代码 (GitHub 仓库)
  • Cargo 文档 (cargo doc)
  • 开发者文档

8.3 用户文档

  • README.md (使用指南)
  • 用户手册
  • FAQ

9. 风险与缓解

风险 影响 概率 缓解措施
ONNX 模型推理速度慢 模型量化、GPU 加速、选择更轻量模型
跨平台音频 API 兼容性 充分测试各平台,使用成熟的 cpal 库
Tauri v2 稳定性 准备 Iced 备选方案
模型文件过大 首次启动下载,提供多个模型尺寸选择

10. 成功标准

技术指标

  • 5 秒语音识别延迟 < 1 秒
  • 应用启动时间 < 2 秒
  • 内存占用 < 500MB (识别中)
  • 识别准确率 > 90% (标准普通话)

用户体验指标

  • 一键录音,无需复杂配置
  • 界面响应流畅,无明显卡顿
  • 三平台功能一致

工程指标

  • 代码测试覆盖率 > 60%
  • CI/CD 自动化构建
  • 完整的错误处理和日志

附录

A. 参考项目

B. 相关 Rust 项目

C. 版本历史

版本 日期 描述
v0.1 2026-05-20 初始 PRD 版本

文档创建2026-05-20 项目状态:规划阶段