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

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

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

环境

windows 10 / python3.8.10


s1 安装 vosk

> pip install vosk

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

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")
# 设置模型所在路径,刚刚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 是使用系统的录音机录的,再用格式工厂转为wav格式,这里需要注意的是wav必须是单声道的,否则没法识别的。
在这里插入图片描述

结论

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

### 安装和配置 Vosk 语音识别库 #### 在树莓派上安装 Vosk 的前提条件 为了成功在树莓派上运行 Vosk,需要满足一些基本的前提条件。Vosk 是一个跨平台的开源离线语音识别工具包,支持多种操作系统以及硬件架构。然而,在树莓派这样的 ARM 架构设备上使用时,需要注意兼容性和依赖项的正确安装。 #### 步骤说明 #### Python 环境准备 首先,确保树莓派已安装最新版本的 Python 和 pip 工具。可以通过以下命令验证并更新环境: ```bash sudo apt update && sudo apt upgrade -y sudo apt install python3-pip python3-dev libasound2-plugins ffmpeg -y pip3 install --upgrade pip setuptools wheel ``` 上述命令会安装必要的开发工具、音频处理插件以及 FFmpeg 多媒体框架[^2]。 #### 安装 Vosk 库 通过 pip 工具可以直接安装 Vosk 软件包。由于树莓派基于 ARM 架构,官方提供了针对该架构优化的二进制文件,因此无需额外编译即可完成安装。 ```bash pip3 install vosk ``` 如果遇到任何错误提示,请确认网络连接正常,并尝试重新执行以上命令[^4]。 #### 下载语言模型 Vosk 支持超过二十种不同的语言和方言,每一种都需要对应的语言模型来提供最佳效果。对于中文普通话场景,推荐下载 `zh-cn` 模型;如果是英文,则可以选择通用版或其他特定变体。以下是获取模型的方法之一: 访问 [Alpha Cephei Models](https://alphacephei.com/vosk/models),找到适合目标语言的小规模或大规模模型链接后保存到本地路径下(例如 `/usr/share/vosk/model` 或者当前工作目录中的子文件夹)。 ```bash wget https://github.com/alphacep/vosk-api/releases/download/v0.3.7-models/vosk-model-small-en-us-0.15.zip unzip vosk-model-small-en-us-0.15.zip -d ./model rm vosk-model-small-en-us-0.15.zip ``` 这里以小型英语模型为例进行了演示操作过程[^3]。 #### 测试代码样例 编写一段简单的 Python 脚本来检验整个设置流程是否顺利完成。下面给出了一段基础示例程序供参考学习之用: ```python import wave import json from vosk import Model, KaldiRecognizer def recognize_audio(file_path): model = Model("./model") # 加载刚刚解压出来的模型数据集位置 wf = wave.open(file_path, "rb") recog = KaldiRecognizer(model, wf.getframerate()) result_texts = [] while True: data = wf.readframes(4000) if len(data) == 0: break if recog.AcceptWaveform(data): res_json = json.loads(recog.Result()) text = res_json['text'] result_texts.append(text) final_res = json.loads(recog.FinalResult())['text'] all_results = ' '.join(result_texts + [final_res]) return all_results if __name__ == "__main__": audio_file = "./test.wav" recognized_text = recognize_audio(audio_file) print(f"Recognized Text: {recognized_text}") ``` 此脚本读取名为 test.wav 的 WAV 音频文件,并将其转换成文字输出显示出来。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值