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

项目地址: github 链接

效果图

正文

本项目是一个基于 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 进行实时转录。
相关推荐
布莱克6059 分钟前
在C++中,构造函数能不能是虚函数?析构函数为什么要虚?
开发语言·c++·构造函数·析构函数·虚函数
VidDown13 分钟前
从视频画面里提取文字:OCR、文字检测与结构化输出
python·网络协议·ocr·音视频·视频编解码·视频
落魄实习生17 分钟前
Agent Scope Java 2.x 系列【1】核心架构
java·开发语言·架构
一水鉴天18 分钟前
三套语言:STL SPL/ SQL 20260928(元宝)
开发语言
言乐621 分钟前
Python实现ai进化
python·django·virtualenv·pygame·tornado
Sarvartha40 分钟前
数组基础知识
java·开发语言
南笙北梦1 小时前
从零写一个CAD 02:实体容器、Esc取消与键盘失灵的排查
python
泡海椒1 小时前
金融报表开发:jquick-pdf K 线图 PDF 可视化解决方案
java·开发语言·金融·pdf
孙启超1 小时前
【AI开发之Rust】第 17 课:项目总览与核心架构 —— AI 助手 Rust 核心从 0 到 1
开发语言·后端·rust
硫酸锌011 小时前
在手机上运行Python增量备份手机数据到PC电脑
android·windows·python