Vosk是一款开源的离线语音识别工具包,具有以下功能:
-
多语言支持:能够对20多种语言和方言进行语音识别,如中文、英语、德语、法语、西班牙语等,可满足不同用户的语言需求。
-
模型轻量化:每种语言的模型大小仅约50Mb左右,节省存储空间,且能在资源有限的设备上运行,如Raspberry Pi或Android智能手机等。
-
实时性高:提供零延迟响应的流式API,适用于需要低延迟的实时应用场景,能快速地将语音转化为文字。
-
自定义性强:支持自定义词汇表和说话人识别功能,可根据特定需求进行个性化配置,提高识别的准确性和灵活性。
-
跨平台使用:提供了Python、Java、C#、Node.js、C++、Rust、Go等多种编程语言的绑定接口,开发者可以根据自己的熟悉语言和项目要求选择合适的语言进行开发。
-
高效性能:采用先进的算法,基于Kaldi语音识别框架和深度神经网络,能在处理大量语音数据时保持高效性能,并实时反馈识别结果。
离线识别效果图:
源码:
import json
import os
import waveimport pyaudio
from vosk import Model, KaldiRecognizer# 下载并解压模型
if not os.path.exists("vosk-model-small-cn-0.22"):print("请下载模型并解压到当前目录")exit(1)wf = wave.open("1.wav", "rb")
if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getcomptype() != "NONE":print("音频文件必须是单声道WAV格式,16位PCM编码")exit(1)model = Model("./vosk-model-small-cn-0.22")
rec = KaldiRecognizer(model, wf.getframerate())flag = 1
while True:if flag == 1:data = wf.readframes(4000)# flag = flag + 1else:audio = pyaudio.PyAudio()audio_stream = audio.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True)data = audio_stream.read(4000)# data = wf.readframes(1280)# print(data)if len(data) == 0:breakif rec.AcceptWaveform(data):pass# print(rec.Result())else:passres = rec.PartialResult()# print(type(res))if (json.loads(res)["partial"]):print(json.loads(res)["partial"])print(rec.FinalResult())