项目地址: github 链接
效果图
正文
本项目是一个基于 Python 和 Flask 构建的专业实时语音转录工具。它通过集成 Faster-Whisper 模型,实现了低延迟、高准确度的麦克风音频流识别,并针对长句纠错和页面审美进行了深度重构。
1. 核心技术实现
1.1 实时转录逻辑
系统采用“前端切片 + 后端滚动推理”的架构:
- 前端音频流化:前端利用 Web Audio API 每 2.5 秒采集一段 WebM 格式的音频,通过 POST 请求即时发送至后端。
- 句子级缓冲区 (SESSION_STATE):后端接收到音频后不会立即丢弃旧数据,而是将其存入内存缓冲区。直到 Whisper 识别出完整的句子终止符(如句号、问号),系统才会判定该意图结束并清空当前缓冲。
- 滑动窗口自动纠错:每次识别时,后端会将当前未完成句子的音频全段提交给模型。这种方式让模型拥有了更充足的上下文信息,能够根据语境自动修正前一段切片中识别错误的文字。
- replace_start_index 协议:后端在返回 JSON 结果时,会附带一个替换索引参数。前端据此对当前 DOM 节点进行精准替换,实现转录文本的无痕动态更新。
1.2 推理引擎优化
- Faster-Whisper (ctranslate2):由原本的 OpenAI 官方 Whisper 迁移至此,大大提升了在英伟达 GPU (CUDA) 上的推理效率。
- 标点与语气词控制:在调用模型时注入了持续诱导 Prompt,并手动将 VAD (语音活动检测) 门槛宽限至 1000ms,以确保长句识别的连贯性和标点符号的丰富度。
- 繁简自动转换:集成 OpenCC 组件,将识别结果统一输出为简体中文。
2. UI/UX 设计与功能细节
2.1 极简主义设计
为了确保使用时的专注感,界面进行了大量“减法”处理:
- 核心控制:仅保留一个 3 倍大小的西瓜红 (#d9234a) 麦克风按钮作为主操作位。
- 紧凑导航:将顶部 Navbar 高度压缩了 50%,去除所有不必要的垂直空白。
- 单会话聚焦:点击录音按钮会触发主转录区的
innerHTML清零,旧会话自动收纳。 - 侧边栏智能标题:系统会自动抓取转录文本的前 20 个字符作为侧边栏的标题,配合日期作为副标题,方便快速索引。
2.2 状态持久化
- 浏览器记忆:通过
localStorage自动存储用户的识别模型(Tiny/Base/Medium)、语言偏好以及保存设置。除非手动修改,否则在刷新页面后依然保持用户习惯。 - 原地交互反馈:点击“复制全部”按钮后,按钮文字会变为“已复制!”并伴随颜色变深,2 秒后自动恢复。
3. 已删除/优化的冗余项
基于对专业工具“克制感”的追求,我们明确剔除了以下内容:
- 删除所有鼠标悬停 (Hover) 动画:避免干扰视觉连贯性。
- 删除占位符文字:如“暂无内容”等废话,确保界面干净。
- 删除冗余按钮:去除了界面上零散的清空、删除等 text-based 布局,转而使用更为统一的 ChatGPT 式侧边栏折叠图标。
- 删除“科技蓝”风格:严禁任何渐变色,维持纯正暗色调。
4. 工程环境与部署
4.1 环境依赖
- Python 虚拟环境 (venv):项目强制绑定虚拟环境运行。
- CUDA 自动适配:后端具备自动探测 Windows 环境变量与 NVIDIA bin 目录的能力,通过动态修改
os.environ["PATH"]解决依赖缺失问题。 - 数据隔离:配置了详尽的
.gitignore,确保用户信息、本地数据库和临时音频文件不会被上传。
4.2 运行流程
- 安装依赖:
pip install -r flask_app/requirements.txt - 运行:
python flask_app/app.py - 访问:
127.0.0.1:5000进行实时转录。