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())
?