ASR 语音识别接入:把语音转成文字的那些事

陈老师946 阅读

给应用加语音输入,核心是 ASR(自动语音识别)。我试了 OpenAI Whisper、阿里 FunASR,说下体验和坑。

Whisper(通用首选)

OpenAI 开源的识别模型,多语言效果好。本地部署:

Python
import whisper model = whisper.load_model("small") # tiny/base/small/medium/large result = model.transcribe("audio.mp3") print(result["text"])

模型大小选择:tiny 最快(CPU 实时),large 最准(需要 GPU)。中文用 large 效果最好,但 8G 显存跑 large 很吃力。

  • Whisper 对中文长音频的标点断句一般,转出来一坨没标点。用 faster-whisper(CTranslate2 加速)会好一些,速度快 4 倍。
  • 背景噪音大的音频识别率明显下降,前端可以先降噪再上传。

FunASR(中文优化)

阿里开源,中文场景效果比 Whisper 好,支持流式识别和标点恢复:

Python
from funasr import AutoModel model = AutoModel(model="paraformer-zh") result = model.generate(input="audio.wav")

中文准确率、标点、热词(自定义词汇)都更强。缺点是依赖较重,模型加载慢。

流式识别

实时语音输入需要流式 ASR:边说边识别。FunASR 支持流式,WebSocket 传音频帧,返回增量识别结果。Whisper 本身不支持流式,要用 faster-whisper 配合分片处理,复杂一些。

接入的通用坑

  1. 采样率。ASR 模型通常要求 16kHz 单声道,前端录音默认 44.1kHz 要转换,不转识别率暴跌。

  2. 音频格式。上传前统一转成 wav 或 mp3,后端别猜格式。

  3. 长音频分段。超过模型限制的音频要分段识别再拼接,分段边界可能截断词语,要有重叠。

  4. 静音检测。录完音先检测有没有有效声音,全是静音直接提示"没听清",别浪费一次识别。

  5. 标点恢复。识别出的文本没标点,下游(比如翻译、摘要)效果差。用标点恢复模型或规则补标点。

总结:中文为主选 FunASR,通用多语言选 faster-whisper。别一上来就上流式,先跑通离线识别再说。

评论0

还没有评论,来抢沙发~