赞
踩
目标:一个代码简单,离线,可直接使用,常用语句准确率还不错,免费的,普通话语音转文本的工具
几番对比下来,VSOK基本满足我的需求,记录一下。
windows 10 / python3.8.10
> pip install vosk
两个模型,一个很小,文件名中带有small字样,另一个就很大了,就我自己测试起来,small也够用
官网下载地址:
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
代码位置:
https://github.com/alphacep/vosk-api
其实只用到其中的python部分
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") # 设置模型所在路径,刚刚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)
> python .\test_simple.py cn2.wav
床前明月光
测试用到的 cn2.wav 是使用系统的录音机录的,再用格式工厂转为wav格式,这里需要注意的是wav必须是单声道的,否则没法识别的。
准确率还是不错的,就是耗时比较大,就上面的一行诗得3秒左右,不知道是不是跟电脑配置也有关系
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。