简介:本文详细介绍VOSK语音识别API的使用方法,涵盖环境配置、模型下载、基础调用及高级功能,助力开发者快速实现语音转文本功能。
VOSK是一个开源的离线语音识别工具包,支持多种编程语言(Python/Java/C#/Node.js等)和操作系统(Windows/Linux/macOS/Android)。其核心优势在于:
典型应用场景包括:会议记录转写、智能客服、语音控制、教育录播等。本文将以Python为例,系统讲解API的使用方法。
pip install vosk# 可选:安装音频处理库pip install sounddevice pyaudio
VOSK提供多种预训练模型,下载方式:
vosk-model-small-cn-0.3(轻量级,适合嵌入式设备)vosk-model-cn-0.22(完整版,精度更高)models文件夹性能对比:
| 模型类型 | 内存占用 | 识别精度 | 适用场景 |
|—————|—————|—————|—————|
| 小模型 | <500MB | 85%+ | 移动端 |
| 大模型 | 1.2GB+ | 92%+ | 服务器 |
from vosk import Model, KaldiRecognizerimport json# 加载模型(需指定模型路径)model = Model("models/vosk-model-small-cn-0.3")# 创建识别器(16000Hz采样率,单声道)recognizer = KaldiRecognizer(model, 16000)
import wavewf = wave.open("test.wav", "rb")if wf.getnchannels() != 1 or wf.getsampwidth() != 2:raise ValueError("需要单声道16位PCM WAV文件")frames = wf.readframes(wf.getnframes())if recognizer.AcceptWaveForm(frames):result = json.loads(recognizer.Result())print("完整识别结果:", result["text"])else:print("部分识别结果:", json.loads(recognizer.PartialResult())["partial"])
import sounddevice as sddef callback(indata, frames, time, status):if status:print(status)if recognizer.AcceptWaveForm(indata.tobytes()):print("最终结果:", json.loads(recognizer.Result())["text"])with sd.InputStream(samplerate=16000, channels=1, callback=callback):print("开始录音(按Ctrl+C停止)...")while True:pass
识别结果包含以下关键字段:
{"text": "完整识别文本","partial": "实时中间结果","conf": 0.98, // 置信度"words": [ // 分词结果{"word": "你好", "start": 0.1, "end": 0.3, "conf": 0.95},...]}
实用建议:
conf<0.7的可疑结果start/end实现字幕同步
import threadingimport queueclass AudioProcessor:def __init__(self):self.queue = queue.Queue()self.recognizer = KaldiRecognizer(model, 16000)def audio_callback(self, indata):self.queue.put(indata.tobytes())def result_processor(self):while True:data = b"".join([self.queue.get() for _ in range(10)]) # 批量处理if self.recognizer.AcceptWaveForm(data):print(json.loads(self.recognizer.Result())["text"])# 启动双线程processor = AudioProcessor()sd.InputStream(callback=processor.audio_callback)threading.Thread(target=processor.result_processor, daemon=True).start()
通过SetWords方法提升特定词汇的识别率:
recognizer.SetWords("[""{\"word\": \"VOSK\", \"weight\": 5.0},""{\"word\": \"语音识别\", \"weight\": 3.0}""]")
vosk-align工具
python train.py \--model=original_model \--data=training_data \--epochs=10 \--output=custom_model
--low-memory模式启动recognizer.SetBufferSize(1024)预处理建议:
性能调优:
部署方案:
通过系统掌握上述技术要点,开发者可以高效构建从简单录音转写到复杂语音交互系统的完整解决方案。VOSK的开源特性更使得长期维护和定制化开发成为可能。