3 步跑通 Whisper:浏览器语音转文字应用搭建实战
【免费下载链接】whisperRobust Speech Recognition via Large-Scale Weak Supervision项目地址: https://gitcode.com/GitHub_Trending/whisp/whisper
很多网页应用需要接入 Whisper 语音识别:把用户在页面上说的话直接转成文字,并且不用自己训练模型,Whisper 原生支持中、英、日在内的 98 种语言,最小的模型也能跑得很快。下面从一条命令开始,把"浏览器录音、Whisper 转写"这套应用串起来。
先跑通:安装 Whisper 并跑第一次转录
在讲原理之前,先让效果出现。克隆仓库、装依赖、丢一个音频文件进去,四条命令:
git clone https://gitcode.com/GitHub_Trending/whisp/whisper cd whisper pip install -r requirements.txt whisper 示例音频.mp3 --model tiny跑完会在同目录生成四类文件:txt(纯文本)、srt 和 vtt(两种字幕格式)、json(带时间戳的完整结果)。如果终端提示找不到 ffmpeg,先用系统包管理器装一下它,再重跑上面的命令。
再理解:Whisper 如何把声音变成文字
Whisper 是一个 Transformer 家族的序列到序列模型(输入一段序列、输出另一段序列)。运行时它先把整段音频切成 30 秒一块,每一块转成梅尔频谱图——可以理解为把声音"拍"成计算机看得懂的频谱照片——编码器把它压缩成声学表示,解码器再逐词预测出文字。巧妙之处在于:同一套模型只要切换输出前的几个"特殊标记",就能在转写、翻译、语种识别几个任务之间切换,一个模型顶替了传统语音处理流水线里的多个环节。
图中是 Whisper 的序列到序列结构:左侧编码器把频谱图压缩成声学表示,右侧解码器靠任务标记驱动转写、翻译、语种识别等不同任务。
按场景用:三种接法各解决什么问题
场景一:命令行转录现成的音频文件
适合手头已有一批会议录音、采访文件的情况。你可以直接用一条命令处理:whisper meeting.mp3 --model turbo,首次运行时模型会自动下载,不用手动搬权重。预期效果:跑完后同目录多出全文 txt 和带时间戳的字幕文件,想看全部参数就敲whisper --help。
场景二:Python 里指定语言转录中文音频
想把识别能力嵌进自己的脚本或后端服务时,直接调 Python API:
import whisper model = whisper.load_model("small") result = model.transcribe("采访录音.mp3", language="zh") print(result["text"])预期效果:指定language后模型不再猜测口语音种,中文转写的稳定性会明显提升;如果再传一个task="translate",则直接输出这段音频的英文译文。
场景三:浏览器录音切段,后端 Whisper 实时语音转录
Whisper 官方仓库是 Python 项目,所以常见的 whisper web 集成模式是:前端负责录音和上传,后端调用这个库做识别。页面上用getUserMedia拿麦克风流,MediaRecorder每 10 秒切一段发给后端接口,后端调用已加载好的模型并回传文字:
const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); const recorder = new MediaRecorder(stream); recorder.ondataavailable = async (e) => { const res = await fetch("/transcribe", { method: "POST", body: e.data }); document.getElementById("out").textContent += (await res.json()).text; }; recorder.start(10000); // 每 10 秒上传一段预期效果:边说边在页面上追加文字,接近实时转录。注意:模型要在后端启动时加载一次并复用,别按请求反复加载,否则延迟会很难看。
做选择:四个模型档位对照
| 档位 | 参数量 | 显存需求 | 相对速度 | 适合谁 |
|---|---|---|---|---|
| tiny | 39 M | 约 1 GB | 约 10 倍 | 验证流程、低配机器 |
| small | 244 M | 约 2 GB | 约 4 倍 | 一般生产环境 |
| medium | 769 M | 约 5 GB | 约 2 倍 | 多语言高精度需求 |
| turbo | 809 M | 约 6 GB | 约 8 倍 | 追求速度的生产环境(不支持翻译) |
速度是相对最大的 large 模型而言。推荐策略:先用 tiny 验证整条流程通不通,英文生产环境换 turbo,多语言且要精度时上 medium,纯英文场景可以再加.en后缀的版本,通常更准。
少踩坑:四个高频问题
- 现象:安装成功,一跑转录就提示找不到 ffmpeg。原因:Whisper 依赖系统级的 ffmpeg 命令行工具来解码音频文件。怎么办:先
sudo apt install ffmpeg或brew install ffmpeg,再重跑命令。 - 现象:非英文音频被转写成串语,准确率偏低。原因:默认让模型自动探测语种,短音频、带噪声时容易判错。怎么办:显式指定语言,命令行加
--language Japanese,Python 里传language参数。 - 现象:长音频转写要等很久。原因:音频按 30 秒滑动窗口串行处理,模型越大每个窗口越慢。怎么办:先用 tiny、base 这类小模型把流程跑顺,或把文件预先切段并行处理。
- 现象:网页端要等录完才出文字,实时感差。原因:前端等整段录音结束后才开始处理。怎么办:按 10 秒一段流式上传,每段返回的文字立刻追加到页面上。
到这里,浏览器录音、Whisper 转写、按场景选模型这条链路就完整了。下一步可以往两个方向走:一是用 translate 任务给应用加上语音转英文的能力,二是把模型文件缓存在服务器端,减少首次请求的冷启动时间。
【免费下载链接】whisperRobust Speech Recognition via Large-Scale Weak Supervision项目地址: https://gitcode.com/GitHub_Trending/whisp/whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考