python + fast-wahisper 读取麦克风,实现语音转录,而且是实时转录。

0 阅读3分钟

项目地址: github 链接

效果图

20260423-162939-c76abb.jpg

正文

本项目是一个基于 Python 和 Flask 构建的专业实时语音转录工具。它通过集成 Faster-Whisper 模型,实现了低延迟、高准确度的麦克风音频流识别,并针对长句纠错和页面审美进行了深度重构。

1. 核心技术实现

1.1 实时转录逻辑

系统采用“前端切片 + 后端滚动推理”的架构:

  1. 前端音频流化:前端利用 Web Audio API 每 2.5 秒采集一段 WebM 格式的音频,通过 POST 请求即时发送至后端。
  2. 句子级缓冲区 (SESSION_STATE):后端接收到音频后不会立即丢弃旧数据,而是将其存入内存缓冲区。直到 Whisper 识别出完整的句子终止符(如句号、问号),系统才会判定该意图结束并清空当前缓冲。
  3. 滑动窗口自动纠错:每次识别时,后端会将当前未完成句子的音频全段提交给模型。这种方式让模型拥有了更充足的上下文信息,能够根据语境自动修正前一段切片中识别错误的文字。
  4. replace_start_index 协议:后端在返回 JSON 结果时,会附带一个替换索引参数。前端据此对当前 DOM 节点进行精准替换,实现转录文本的无痕动态更新。

1.2 推理引擎优化

  • Faster-Whisper (ctranslate2):由原本的 OpenAI 官方 Whisper 迁移至此,大大提升了在英伟达 GPU (CUDA) 上的推理效率。
  • 标点与语气词控制:在调用模型时注入了持续诱导 Prompt,并手动将 VAD (语音活动检测) 门槛宽限至 1000ms,以确保长句识别的连贯性和标点符号的丰富度。
  • 繁简自动转换:集成 OpenCC 组件,将识别结果统一输出为简体中文。

2. UI/UX 设计与功能细节

2.1 极简主义设计

为了确保使用时的专注感,界面进行了大量“减法”处理:

  1. 核心控制:仅保留一个 3 倍大小的西瓜红 (#d9234a) 麦克风按钮作为主操作位。
  2. 紧凑导航:将顶部 Navbar 高度压缩了 50%,去除所有不必要的垂直空白。
  3. 单会话聚焦:点击录音按钮会触发主转录区的 innerHTML 清零,旧会话自动收纳。
  4. 侧边栏智能标题:系统会自动抓取转录文本的前 20 个字符作为侧边栏的标题,配合日期作为副标题,方便快速索引。

2.2 状态持久化

  • 浏览器记忆:通过 localStorage 自动存储用户的识别模型(Tiny/Base/Medium)、语言偏好以及保存设置。除非手动修改,否则在刷新页面后依然保持用户习惯。
  • 原地交互反馈:点击“复制全部”按钮后,按钮文字会变为“已复制!”并伴随颜色变深,2 秒后自动恢复。

3. 已删除/优化的冗余项

基于对专业工具“克制感”的追求,我们明确剔除了以下内容:

  1. 删除所有鼠标悬停 (Hover) 动画:避免干扰视觉连贯性。
  2. 删除占位符文字:如“暂无内容”等废话,确保界面干净。
  3. 删除冗余按钮:去除了界面上零散的清空、删除等 text-based 布局,转而使用更为统一的 ChatGPT 式侧边栏折叠图标。
  4. 删除“科技蓝”风格:严禁任何渐变色,维持纯正暗色调。

4. 工程环境与部署

4.1 环境依赖

  • Python 虚拟环境 (venv):项目强制绑定虚拟环境运行。
  • CUDA 自动适配:后端具备自动探测 Windows 环境变量与 NVIDIA bin 目录的能力,通过动态修改 os.environ["PATH"] 解决依赖缺失问题。
  • 数据隔离:配置了详尽的 .gitignore,确保用户信息、本地数据库和临时音频文件不会被上传。

4.2 运行流程

  1. 安装依赖:pip install -r flask_app/requirements.txt
  2. 运行:python flask_app/app.py
  3. 访问:127.0.0.1:5000 进行实时转录。