当前位置:   article > 正文

python使用VOSK实现离线语音识别(中文普通话)_python vosk

python vosk

目标:一个代码简单,离线,可直接使用,常用语句准确率还不错,免费的,普通话语音转文本的工具

几番对比下来,VSOK基本满足我的需求,记录一下。

环境

windows 10 / python3.8.10


s1 安装 vosk

> pip install vosk
  • 1

s2 下载模型

两个模型,一个很小,文件名中带有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
  • 1
  • 2

s3 下载 示例代码

代码位置:

https://github.com/alphacep/vosk-api
  • 1

其实只用到其中的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")
# 设置模型所在路径,刚刚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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
s4.3 跑一下代码
> python .\test_simple.py cn2.wav
床前明月光
  • 1
  • 2

测试用到的 cn2.wav 是使用系统的录音机录的,再用格式工厂转为wav格式,这里需要注意的是wav必须是单声道的,否则没法识别的。
在这里插入图片描述

结论

准确率还是不错的,就是耗时比较大,就上面的一行诗得3秒左右,不知道是不是跟电脑配置也有关系

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/88178
推荐阅读
相关标签
  

闽ICP备14008679号