Vosk-api新范式:完全离线的多语言语音识别解决方案
你是否还在为语音识别依赖网络而烦恼?是否因延迟问题影响用户体验?Vosk-api为你带来革命性的离线语音识别体验,无需联网即可实现高效准确的语音转文字。本文将详细介绍如何利用Vosk-api构建完全离线的多语言语音识别系统,读完你将掌握:- Vosk-api的核心优势与适用场景- 多语言模型的快速部署方法- 不同编程语言的集成实例- 实时语音识别与文件转录的实现技巧## Vosk-a...
Vosk-api新范式:完全离线的多语言语音识别解决方案
你是否还在为语音识别依赖网络而烦恼?是否因延迟问题影响用户体验?Vosk-api为你带来革命性的离线语音识别体验,无需联网即可实现高效准确的语音转文字。本文将详细介绍如何利用Vosk-api构建完全离线的多语言语音识别系统,读完你将掌握:
- Vosk-api的核心优势与适用场景
- 多语言模型的快速部署方法
- 不同编程语言的集成实例
- 实时语音识别与文件转录的实现技巧
Vosk-api简介
Vosk是一个开源的离线语音识别工具包,支持20多种语言和方言,包括中文、英语、德语、法语等。与传统语音识别方案相比,Vosk具有以下显著优势:
- 完全离线:无需网络连接,保护数据隐私
- 模型小巧:仅50MB左右,适合嵌入式设备
- 低延迟:流式API实现零延迟响应
- 多语言支持:20+语言和方言,满足全球化需求
- 跨平台:支持多种编程语言和操作系统
项目核心代码位于src/目录,包含模型加载、语音识别等核心功能实现。
快速开始
环境准备
Vosk-api支持多种编程语言,以下是各语言版本的官方文档和示例:
- Python:python/README.md
- Java:java/README.md
- Node.js:nodejs/README.md
- C#:csharp/README.md
- Go:go/README.md
以Python为例,首先安装Vosk:
pip install vosk
模型下载
Vosk提供多种语言模型,可从官方网站下载。模型文件应放置在项目目录中,建议创建model文件夹存放。
基础示例
以下是一个简单的Python语音识别示例,用于处理WAV格式音频文件:
#!/usr/bin/env python3
import wave
import sys
from vosk import Model, KaldiRecognizer, SetLogLevel
SetLogLevel(0) # 设置日志级别,-1可禁用调试信息
wf = wave.open(sys.argv[1], "rb")
# 检查音频格式,必须是单声道PCM格式
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") # 加载模型,指定语言
rec = KaldiRecognizer(model, wf.getframerate())
rec.SetWords(True) # 启用单词级识别
rec.SetPartialWords(True) # 启用部分单词识别
while True:
data = wf.readframes(4000)
if len(data) == 0:
break
if rec.AcceptWaveform(data):
print(rec.Result()) # 输出完整识别结果
else:
print(rec.PartialResult()) # 输出部分识别结果
print(rec.FinalResult()) # 输出最终结果
完整代码示例:python/example/test_simple.py
实时语音识别
Vosk提供流式API,可实现实时语音识别。以下是使用麦克风进行实时识别的Python示例:
#!/usr/bin/env python3
import argparse
import queue
import sys
import sounddevice as sd
from vosk import Model, KaldiRecognizer
q = queue.Queue()
def callback(indata, frames, time, status):
"""音频回调函数,将音频数据放入队列"""
if status:
print(status, file=sys.stderr)
q.put(bytes(indata))
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("-d", "--device", type=int, help="输入设备ID")
parser.add_argument("-r", "--samplerate", type=int, help="采样率")
parser.add_argument("-m", "--model", type=str, help="语言模型,如en-us, zh-cn")
args = parser.parse_args()
# 设置采样率
if args.samplerate is None:
device_info = sd.query_devices(args.device, "input")
args.samplerate = int(device_info["default_samplerate"])
# 加载模型
model = Model(lang=args.model if args.model else "en-us")
with sd.RawInputStream(samplerate=args.samplerate, blocksize=8000, device=args.device,
dtype="int16", channels=1, callback=callback):
print("#" * 80)
print("Press Ctrl+C to stop the recording")
print("#" * 80)
rec = KaldiRecognizer(model, args.samplerate)
while True:
data = q.get()
if rec.AcceptWaveform(data):
print(rec.Result())
else:
print(rec.PartialResult())
完整代码示例:python/example/test_microphone.py
多语言支持
Vosk支持20多种语言,只需在加载模型时指定语言代码即可。例如,使用中文模型:
model = Model(lang="zh-cn")
以下是支持的主要语言及其代码:
| 语言 | 代码 | 语言 | 代码 |
|---|---|---|---|
| 中文 | zh-cn | 英语 | en-us |
| 德语 | de | 法语 | fr |
| 西班牙语 | es | 俄语 | ru |
| 日语 | ja | 韩语 | ko |
完整语言列表可参考README.md。
高级功能
单词级识别
Vosk支持单词级别的识别结果,包括每个单词的开始和结束时间:
rec.SetWords(True) # 启用单词级识别
result = json.loads(rec.Result())
words = result.get("result", [])
for word in words:
print(f"Word: {word['word']}, Start: {word['start']}, End: {word['end']}")
示例代码:python/example/test_words.py
说话人识别
Vosk还支持说话人识别功能,可用于区分不同说话人:
from vosk import Model, KaldiRecognizer, SpeakerModel
model = Model(lang="en-us")
spk_model = SpeakerModel("speaker-model") # 加载说话人模型
rec = KaldiRecognizer(model, 16000, spk_model)
示例代码:python/example/test_speaker.py
字幕生成
Vosk可用于生成视频字幕,支持SRT和WebVTT格式:
# SRT格式示例
from vosk import Model, KaldiRecognizer
import wave
import json
model = Model(lang="en-us")
wf = wave.open("test.wav", "rb")
rec = KaldiRecognizer(model, wf.getframerate())
rec.SetWords(True)
counter = 1
while True:
data = wf.readframes(4000)
if len(data) == 0:
break
if rec.AcceptWaveform(data):
result = json.loads(rec.Result())
if "result" in result:
start = result["result"][0]["start"]
end = result["result"][-1]["end"]
text = " ".join([word["word"] for word in result["result"]])
print(f"{counter}")
print(f"{format_time(start)} --> {format_time(end)}")
print(text + "\n")
counter += 1
示例代码:python/example/test_srt.py和python/example/test_webvtt.py
应用场景
Vosk-api可广泛应用于以下场景:
- 语音助手:构建离线语音助手,保护用户隐私
- 字幕生成:为视频自动生成多语言字幕
- 会议记录:实时转录会议内容,生成文字记录
- 智能家居:实现设备的语音控制
- 车载系统:离线语音交互,提高驾驶安全性
总结
Vosk-api为开发者提供了一个功能强大、易于使用的离线语音识别解决方案。其小巧的模型体积、低延迟和多语言支持使其成为各种应用场景的理想选择。无论是嵌入式设备还是桌面应用,Vosk都能提供高质量的语音识别服务。
项目源码托管在https://link.gitcode.com/i/4ba40a8db8193caa75ee2dda98ecf748,欢迎贡献代码和反馈。
希望本文能帮助你快速上手Vosk-api,如有任何问题,可参考各语言版本的官方文档或提交issue。
祝你的语音识别项目取得成功!
更多推荐

所有评论(0)