Vosk-api新范式:完全离线的多语言语音识别解决方案

【免费下载链接】vosk-api vosk-api: Vosk是一个开源的离线语音识别工具包,支持20多种语言和方言的语音识别,适用于各种编程语言,可以用于创建字幕、转录讲座和访谈等。 【免费下载链接】vosk-api 项目地址: https://gitcode.com/GitHub_Trending/vo/vosk-api

你是否还在为语音识别依赖网络而烦恼?是否因延迟问题影响用户体验?Vosk-api为你带来革命性的离线语音识别体验,无需联网即可实现高效准确的语音转文字。本文将详细介绍如何利用Vosk-api构建完全离线的多语言语音识别系统,读完你将掌握:

  • Vosk-api的核心优势与适用场景
  • 多语言模型的快速部署方法
  • 不同编程语言的集成实例
  • 实时语音识别与文件转录的实现技巧

Vosk-api简介

Vosk是一个开源的离线语音识别工具包,支持20多种语言和方言,包括中文、英语、德语、法语等。与传统语音识别方案相比,Vosk具有以下显著优势:

  • 完全离线:无需网络连接,保护数据隐私
  • 模型小巧:仅50MB左右,适合嵌入式设备
  • 低延迟:流式API实现零延迟响应
  • 多语言支持:20+语言和方言,满足全球化需求
  • 跨平台:支持多种编程语言和操作系统

项目核心代码位于src/目录,包含模型加载、语音识别等核心功能实现。

快速开始

环境准备

Vosk-api支持多种编程语言,以下是各语言版本的官方文档和示例:

以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.pypython/example/test_webvtt.py

应用场景

Vosk-api可广泛应用于以下场景:

  1. 语音助手:构建离线语音助手,保护用户隐私
  2. 字幕生成:为视频自动生成多语言字幕
  3. 会议记录:实时转录会议内容,生成文字记录
  4. 智能家居:实现设备的语音控制
  5. 车载系统:离线语音交互,提高驾驶安全性

总结

Vosk-api为开发者提供了一个功能强大、易于使用的离线语音识别解决方案。其小巧的模型体积、低延迟和多语言支持使其成为各种应用场景的理想选择。无论是嵌入式设备还是桌面应用,Vosk都能提供高质量的语音识别服务。

项目源码托管在https://link.gitcode.com/i/4ba40a8db8193caa75ee2dda98ecf748,欢迎贡献代码和反馈。

希望本文能帮助你快速上手Vosk-api,如有任何问题,可参考各语言版本的官方文档或提交issue。

祝你的语音识别项目取得成功!

【免费下载链接】vosk-api vosk-api: Vosk是一个开源的离线语音识别工具包,支持20多种语言和方言的语音识别,适用于各种编程语言,可以用于创建字幕、转录讲座和访谈等。 【免费下载链接】vosk-api 项目地址: https://gitcode.com/GitHub_Trending/vo/vosk-api

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐