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 配合分片处理,复杂一些。
接入的通用坑:
-
采样率。ASR 模型通常要求 16kHz 单声道,前端录音默认 44.1kHz 要转换,不转识别率暴跌。
-
音频格式。上传前统一转成 wav 或 mp3,后端别猜格式。
-
长音频分段。超过模型限制的音频要分段识别再拼接,分段边界可能截断词语,要有重叠。
-
静音检测。录完音先检测有没有有效声音,全是静音直接提示"没听清",别浪费一次识别。
-
标点恢复。识别出的文本没标点,下游(比如翻译、摘要)效果差。用标点恢复模型或规则补标点。
总结:中文为主选 FunASR,通用多语言选 faster-whisper。别一上来就上流式,先跑通离线识别再说。
评论0
还没有评论,来抢沙发~