前言
一个偶然的机会看到 Vosk 这个python工具,一直想一探究竟,主要是想看看他语音转文本的准确率。今天终于挤出时间来试试。下面给大家介绍一下过程和最终的效果。
创建环境
在conda 下创建一个 vosk 的evn。这里要注意的是官方说明了vosk要求的python版本是3.5 -3.9 安装其他版本将运行错误。
conda create -n vosk python=3.9
安装Vosk
pip3 install vosk
命令行调用
vosk的调用方式有很多支撑命令行调用、java、python等各类调用方式,既然是尝鲜先使用命令行调用试试:
vosk-transcriber -l cn -i /Users/huzd/Desktop/2.m4a -o /Users/huzd/Desktop/test2.txt
然后查看test2.txt的内容;总的来说准确率大概80%吧;没有标点符合,只有空格分隔。自己弄着玩还可以;如果商用基本上不靠谱。
python调用(使用大点的语言模型)
介于使用效果这么差,我以为下载1.4G的中文语言包模型会有所改善。于是下载解压,创建python项目。
编程调用。最终效果也是稍微有所改善吧;
python3 ./test.py /Users/huzd/Desktop/my_new.wav huzd@huzd-Macbook-Pro
LOG (VoskAPI:ReadDataFiles():model.cc:213) Decoding params beam=13 max-active=7000 lattice-beam=6
LOG (VoskAPI:ReadDataFiles():model.cc:216) Silence phones 1:2:3:4:5:6:7:8:9:10
LOG (VoskAPI:RemoveOrphanNodes():nnet-nnet.cc:948) Removed 0 orphan nodes.
LOG (VoskAPI:RemoveOrphanComponents():nnet-nnet.cc:847) Removing 0 orphan components.
LOG (VoskAPI:ReadDataFiles():model.cc:248) Loading i-vector extractor from /Users/huzd/Desktop/vosk/models/vosk-model-cn-0.22/ivector/final.ie
LOG (VoskAPI:ComputeDerivedVars():ivector-extractor.cc:183) Computing derived variables for iVector extractor
LOG (VoskAPI:ComputeDerivedVars():ivector-extractor.cc:204) Done.
LOG (VoskAPI:ReadDataFiles():model.cc:279) Loading HCLG from /Users/huzd/Desktop/vosk/models/vosk-model-cn-0.22/graph/HCLG.fst
LOG (VoskAPI:ReadDataFiles():model.cc:294) Loading words from /Users/huzd/Desktop/vosk/models/vosk-model-cn-0.22/graph/words.txt
LOG (VoskAPI:ReadDataFiles():model.cc:303) Loading winfo /Users/huzd/Desktop/vosk/models/vosk-model-cn-0.22/graph/phones/word_boundary.int
LOG (VoskAPI:ReadDataFiles():model.cc:310) Loading subtract G.fst model from /Users/huzd/Desktop/vosk/models/vosk-model-cn-0.22/rescore/G.fst
LOG (VoskAPI:ReadDataFiles():model.cc:312) Loading CARPA model from /Users/huzd/Desktop/vosk/models/vosk-model-cn-0.22/rescore/G.carpa
LOG (VoskAPI:ReadDataFiles():model.cc:318) Loading RNNLM model from /Users/huzd/Desktop/vosk/models/vosk-model-cn-0.22/rnnlm/final.raw
✅ 识别完成:
接下来 给 各位 评审 专家 演示 上级 管理 首先 是 心生 商机 在 这里 可以 填写 商品 名称 商机 来源 客户 名称 预估 金额 投标 日期 商机 描述 等 其次 我们 可以 在 商机 捕捉 种 过程 中 组织 新 商机 查看 上级 的 维护 以及 商机 的 跟进 商机 跟进 模块 当中 我们 可以 去 进行 查看 查看 历史 的 跟进 记录 以及 跟进 商机 的 状态 如果 是 跟进 中 的话 就 填写 跟进 记录 如果 是 一 中标 就要 填写 呃 中标 的 分类 是 全部 中标 还是 联合 中标 还是 分期 中标 以及 中标 的 金额 实际 招标 的 日期 如果 是 为 中标 的话 要 反馈 那个 中标者 以及 时间 如果 是 已 取消 要 填写 取消 原因 而 接下来 演示 商机 监控 评估 啊 在 这里 可以 根据 角色 去 做 一个 切换 啊 因为 当前 是 管理员 他 拥有 多 个 角色 可以 在 多 个 解释 中 进行 切换 如果 是 单一 角色 这里 只能 默认 选 一个 首先 是 商机 监控 评估 有种 从 商家处 以 中标 更 敬重 以及 总 金额 还有 全年 发展 情况 以及 商机 的 行业 分布 情况 商机 的 月度 分析 还有 详细 数据 可以 根据 年 季度 说 一 季 行业 等 进行 筛选 以上 就是 整个 商界 管理 的 所有 投标 演示 内容
具体代码如下:
import wave
import sys
import json
from vosk import Model, KaldiRecognizer, SetLogLevel
SetLogLevel(0)
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("/Users/huzd/Desktop/vosk/models/vosk-model-cn-0.22")
rec = KaldiRecognizer(model, wf.getframerate())
rec.SetWords(True)
results = []
while True:
data = wf.readframes(4000)
if len(data) == 0:
break
if rec.AcceptWaveform(data):
result = json.loads(rec.Result())
results.append(result.get("text", ""))
# 添加 FinalResult
final_result = json.loads(rec.FinalResult())
results.append(final_result.get("text", ""))
# 输出完整识别文本
full_text = " ".join([r for r in results if r])
print("\n 识别完成:")
print(full_text)
本文由 huzd 创作,采用 知识共享署名4.0 国际许可协议进行许可本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名最后编辑时间
为:
2025/08/20 19:48