目標:一個代碼簡單,離線,可直接使用,常用語句準確率還不錯,免費的,普通話語音轉(zhuǎn)文本的工具
幾番對比下來,VSOK基本滿足我的需求,記錄一下。
環(huán)境
windows 10 / python3.8.10
s1 安裝 vosk
> pip install vosk
s2 下載模型
兩個模型,一個很小,文件名中帶有small字樣,另一個就很大了,就我自己測試起來,small也夠用
官網(wǎng)下載地址:
https://alphacephei.com/vosk/models/vosk-model-small-cn-0.22.zip 41.87 M
https://alphacephei.com/vosk/models/vosk-model-cn-0.15.zip 1.67 G
s3 下載 示例代碼
代碼位置:
https://github.com/alphacep/vosk-api
其實只用到其中的python部分
s4 測試
s4.1 把 s2下載的 model 解壓,記住路徑
s4.2 修改示例代碼 vosk-api/python/example/test_simple.py
import wave
import sys
import json
from vosk import Model, KaldiRecognizer, SetLogLevel
# You can set log level to -1 to disable debug messages
SetLogLevel(-1)
wf = wave.open(sys.argv[1], "rb")
if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getcomptype() != "NONE":
print("Audio file must be WAV format mono PCM.")
sys.exit(1)
# model = Model(lang="en-us")
# You can also init model by name or with a folder path
# model = Model(model_name="vosk-model-en-us-0.21")
# 設(shè)置模型所在路徑,剛剛4.1中解壓出來的路徑 《《《《
# model = Model("model")
model = Model("model-small")
rec = KaldiRecognizer(model, wf.getframerate())
rec.SetWords(True)
# rec.SetPartialWords(True) # 注釋這行 《《《《
str_ret = ""
while True:
data = wf.readframes(4000)
if len(data) == 0:
break
if rec.AcceptWaveform(data):
result = rec.Result()
# print(result)
result = json.loads(result)
if 'text' in result:
str_ret += result['text'] + ' '
# else:
# print(rec.PartialResult())
# print(rec.FinalResult())
result = json.loads(rec.FinalResult())
if 'text' in result:
str_ret += result['text']
print(str_ret)
s4.3 跑一下代碼
> python .\test_simple.py cn2.wav
床前明月光
測試用到的 cn2.wav 是使用系統(tǒng)的錄音機錄的,再用格式工廠轉(zhuǎn)為wav格式,這里需要注意的是wav必須是單聲道的,否則沒法識別的。文章來源:http://www.zghlxwxcb.cn/news/detail-516468.html
結(jié)論
準確率還是不錯的,就是耗時比較大,就上面的一行詩得3秒左右,不知道是不是跟電腦配置也有關(guān)系文章來源地址http://www.zghlxwxcb.cn/news/detail-516468.html
到了這里,關(guān)于python使用VOSK實現(xiàn)離線語音識別(中文普通話)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!