vosk語音識別實戰

一、簡介

Vosk 是一個由 Alpha Cephei 團隊開發的開源離線語音識別(ASR)工具包。它的核心優勢在于完全離線運行和輕量級,使其非常適合在資源受限的環境、注重隱私的場景或需要低延遲的應用中使用。

二、核心特點

離線運行 (Offline)

這是 Vosk 最突出的特點。所有語音識別過程都在本地設備上完成,無需將音頻數據上傳到任何遠程服務器。這對于保護用戶隱私(如醫療、金融應用)或在沒有穩定網絡連接的環境下工作至關重要。

基于 Kaldi

Vosk 的后端引擎是業界知名的開源語音識別工具包 Kaldi。Kaldi 提供了強大的聲學模型和解碼器,保證了識別的準確性和魯棒性。Vosk 可以看作是 Kaldi 的一個封裝和簡化接口,使其更易于集成到應用程序中。

輕量級與高效

Vosk 模型經過優化,可以在 CPU 上高效運行,對內存和計算資源的需求相對較低。這使得它能在樹莓派、手機、嵌入式設備甚至普通筆記本電腦上流暢工作。

多語言支持

Vosk 支持多種語言,包括但不限于:英語、中文(普通話)、西班牙語、法語、德語、俄語、日語、韓語、阿拉伯語等。官方提供了這些語言的預訓練模型。

支持流式識別 (Streaming)

Vosk 支持實時流式語音識別。這意味著你可以一邊錄音,一邊將音頻數據塊(chunk)送入 Vosk 進行處理,并幾乎實時地獲得部分識別結果。這對于語音助手、實時字幕等應用非常有用。

小詞匯量識別 (Keyword Spotting)

除了全量語音識別,Vosk 還支持通過提供一個“詞匯表”(即一個包含有限詞語的列表)來實現小詞匯量識別。這可以顯著提高特定關鍵詞(如“打開”、“關閉”、“播放音樂”)的識別速度和準確率,同時降低資源消耗。

開源與免費

Vosk 在 Apache 2.0 許可下開源,可以免費用于商業和非商業項目。

三、主要應用場景

  • 智能家居控制(離線語音指令)
  • 移動端語音輸入(保護隱私)
  • 嵌入式設備上的語音交互
  • 實時會議/講座字幕生成
  • 語音轉寫工具(離線版)
  • 語音命令接口

四、應用實戰

1. 下載Vosk模型

地址:https://alphacephei.com/vosk/models
這里以小個頭的中文模型 vosk-model-small-cn-0.22 為例,體積只有42M,手機和樹莓派都可以跑。在這里插入圖片描述
直接點擊鏈接下載即可,然后解壓到任一目錄下,比如 D:/asr/model/vosk-model-small-cn-0.22,后邊代碼要用到這個路徑。

2. 安裝Python依賴

執行 pip3 install vosk,等待安裝完成后即可開始編碼。

3. 編寫Python測試代碼

離線識別代碼示例:

import json
import time
import wavefrom vosk import Model, KaldiRecognizer, SetLogLevelSetLogLevel(-1)  # 禁止輸出調試日志信息
model = Model("D:/asr/model/vosk-model-small-cn-0.22")# 打開音頻文件
audio_file = input("請輸入音頻文件路徑:")
start = time.time()
wf = wave.open(audio_file, "rb")
rec = KaldiRecognizer(model, wf.getframerate())
# 檢查音頻參數
if wf.getnchannels() != 1 or wf.getsampwidth() != 2:print("警告:音頻文件應為單聲道,16位")while True:data = wf.readframes(4000)if len(data) == 0:breakrec.AcceptWaveform(data)# if rec.AcceptWaveform(data):#     print(rec.Result())# else:#     print(rec.PartialResult())wf.close()
# 獲取最終結果
print('最終識別結果:', json.loads(rec.FinalResult())['text'])
print(f'識別用時:{time.time() - start:.2f}秒')

Model里邊的路徑就是第二步解壓模型的路徑。
程序運行后會提示輸入聲音文件路徑,輸入后回車即可識別輸出文本內容。
測試音頻:test.wav 是測試時錄制的一段話。

運行效果

在這里插入圖片描述

識別效果還是可以的。
更多玩法請參考官方文檔:https://alphacephei.com/vosk/在這里插入圖片描述

其他功能示例代碼

1. 實時語音識別
import sys
from vosk import Model, KaldiRecognizer
import pyaudio# 創建模型對象
model = Model("D:/asr/model/vosk-model-small-cn-0.22")# 創建識別器 (sample_rate 需要與音頻流的采樣率一致)
rec = KaldiRecognizer(model, 16000)# 初始化音頻流
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16,channels=1,rate=16000,input=True,frames_per_buffer=8000)
stream.start_stream()print("開始錄音,請說話... (按 Ctrl+C 停止)")try:while True:# 讀取音頻數據塊data = stream.read(4000, exception_on_overflow=False)# 將數據送入識別器if rec.AcceptWaveform(data):# 獲取最終識別結果(JSON格式)result = rec.Result()print(result)  # 通常包含 'text' 字段else:# 獲取部分識別結果(可選,用于實時反饋)partial_result = rec.PartialResult()# print(partial_result) # 可以取消注釋查看部分結果except KeyboardInterrupt:print("\n停止錄音。")finally:# 清理資源stream.stop_stream()stream.close()p.terminate()# 獲取最終的識別結果final_result = rec.FinalResult()print("最終識別結果:", final_result)

程序運行時會持續監聽麥克風,只要說話就會進行識別并輸出識別結果。

2. 小詞匯量識別
from vosk import Model, KaldiRecognizer
import pyaudio# 創建模型
model = Model("D:/asr/model/vosk-model-small-cn-0.22")# 傳入詞匯表(用空格分隔的詞語)
# 注意:對于中文,詞匯表中的詞需要是模型能識別的詞語
# 這里假設模型支持這些詞
keywords = "打開 關閉 開燈 關燈 播放 暫停 下一首 上一首"
rec = KaldiRecognizer(model, 16000, keywords)  # 第三個參數是詞匯表p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=8000)
stream.start_stream()print("小詞匯量識別模式。可說:打開、關閉、開燈、關燈、播放、暫停、下一首、上一首")try:while True:data = stream.read(4000)if len(data) == 0:breakif rec.AcceptWaveform(data):result = rec.Result()print("識別到:", result)
except KeyboardInterrupt:pass
finally:stream.stop_stream()stream.close()p.terminate()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95820.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95820.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95820.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙ABC開發中的名稱混淆與反射處理策略:安全與效率的平衡

在當今的軟件開發中,代碼安全是一個至關重要的議題。隨著鴻蒙系統(HarmonyOS)的廣泛應用,開發者們在追求功能實現的同時,也必須考慮如何保護代碼不被輕易破解。名稱混淆是一種常見的代碼保護手段,但當反射機…

css頁面頂部底部固定,中間自適應幾種方法

以下是實現頁面頂部和底部固定、中間內容自適應的幾種常見方法&#xff0c;附代碼示例和適用場景分析&#xff1a;方法一&#xff1a;Flexbox 彈性布局 <body style"margin:0; min-height:100vh; display:flex; flex-direction:column;"><header style"…

徹底拆解 CSS?accent-color:一個屬性,省下一堆“重造輪子”的苦工

我有一支技術全面、經驗豐富的小型團隊&#xff0c;專注高效交付中等規模外包項目&#xff0c;有需要外包項目的可以聯系我既要原生控件、又要品牌配色&#xff0c;還不想偽造組件&#xff1f;能不能講透 accent-color。下面給出一版盡量“到骨頭里”的解析&#xff1b;對討厭從…

在選擇iOS代簽服務前,你必須了解的三大安全風險

選iOS代簽服務&#xff1f;這三個安全坑千萬別踩&#xff01;關于iOS代簽那些你可能忽略的安全風險。多少次因為測試設備限制、緊急分發或者企業賬號年費肉疼&#xff0c;我們不得不考慮第三方代簽服務&#xff1f;但這里頭的水&#xff0c;比想象中深。風險一&#xff1a;證書…

GitHub 熱榜項目 - 日榜(2025-09-04)

GitHub 熱榜項目 - 日榜(2025-09-04) 生成于&#xff1a;2025-09-04 統計摘要 共發現熱門項目&#xff1a;20 個 榜單類型&#xff1a;日榜 本期熱點趨勢總結 本期GitHub熱榜呈現三大技術熱點&#xff1a;AI智能體開發、架構工程化和開發者工具革新。JetBrains Koog、DeepC…

在 vue-vben-admin(v5 版本)中,使用 ECharts 圖表(豆包版)

在 vue-vben-admin&#xff08;v5版本&#xff09;中&#xff0c;使用 ECharts 圖表的方式已通過框架封裝的 vben/plugins/echarts 模塊簡化&#xff0c;結合官方示例&#xff0c;具體使用步驟如下&#xff1a; 1. 核心組件與工具導入 框架提供了封裝后的 EchartsUI 組件&#…

本地 Ai 離線視頻去水印字幕!支持字幕、動靜態水印去除!

這款功能強大的AI視頻處理工具&#xff0c;能夠有效地去除視頻中的靜態水印、動態水印以及字幕。 針對不同類型的水印和字幕&#xff0c;提供了多種去除方式&#xff0c;操作簡單&#xff0c;效果顯著。 首先【打開視頻】&#xff0c;然后在識別模式里面選擇識別模式&#xf…

1個工具管好15+網盤(批量轉存/分享實測)工具實測:批量轉存 + 自動換號 + 資源監控 賬號添加失敗 / 轉存中斷?這樣解決(含功能詳解)

電腦里裝了N個網盤客戶端&#xff1a;百度網盤存工作文件、阿里云盤放家庭照片、夸克網盤塞學習資料&#xff0c;還有迅雷、天翼云盤散落在各處——每次找文件要在5個軟件間反復切換&#xff0c;手動轉存10個文件得點幾十次鼠標&#xff0c;網盤多了反倒成了“數字負擔”。直到…

2025-09-04 CSS2——常見選擇器

文章目錄1 元素選擇器2 id 選擇器3 class 選擇器4 通用選擇器5 子元素選擇器6 后代選擇器7 相鄰兄弟選擇器8 后續兄弟選擇器9 偽類選擇器10 偽元素選擇器11 屬性選擇器11.1 [attribute]11.2 [attribute"value"]11.3 [attribute~"value"]與[attribute*"…

計算機網絡:概述層---OSI參考模型

&#x1f310; OSI七層參考模型詳解&#xff1a;從物理層到應用層的完整剖析 &#x1f4c5; 更新時間&#xff1a;2025年9月3日 &#x1f3f7;? 標簽&#xff1a;OSI模型 | 網絡協議 | 七層模型 | 計算機網絡 | 網絡架構 | 協議棧 | 王道考研 摘要: 本文將用最通俗易懂的語言&…

JVM相關 2|Java 垃圾回收機制(GC算法、GC收集器如G1、CMS)的必會知識點匯總

目錄&#xff1a;&#x1f9e0; 一、GC基礎概念1. 什么是垃圾回收&#xff08;Garbage Collection, GC&#xff09;&#xff1f;2. 判斷對象是否為垃圾的方法&#x1f9e9; 二、GC核心算法1. 標記-清除算法&#xff08;Mark-Sweep&#xff09;2. 標記-整理算法&#xff08;Mark…

04 - 【HTML】- 常用標簽(下篇)

表格標簽 1 表格 table 在HTML中&#xff0c;表格是通過<table>標簽來創建的&#xff0c;它允許在html中以行和列的形式組織數據。HTML提供了一套完整的標簽來創建功能豐富的表格。 2 表格的 結構 3 表格table代碼結構 4 表格結構解析 <thead></thead>&…

nVisual從入門到精通—應用實例

五、應用實例 5.1 數據中心的規劃設計 5.1.1 規劃設計流程5.1.2 創建模型庫 5.1.2.1 設備模型庫 設備模型庫基于組織內實際使用的設備型號進行構建&#xff0c;主要包含以下對象類型&#xff1a;機柜、網絡設備、板卡、組合模型。 設備屬性字段&#xff1a;除系統保留字段&…

代碼可讀性的詳細入門

&#x1f3e0;個人主頁&#xff1a;塵覺主頁 文章目錄前言一、可讀性的重要性二、用名字表達代碼含義三、避免名字歧義四、良好的代碼風格五、注釋的價值六、如何編寫注釋七、提高控制流的可讀性八、拆分長表達式九、變量與可讀性十、抽取函數十一、一次只做一件事十二、用自然…

輪軌法向接觸斑計算

輪軌法向接觸斑計算 &#xff0c;同時輸出 接觸斑面積、長軸 a、短軸 b、最大 Hertz 壓力 pmax 等關鍵指標 算法基于 Hertz 接觸理論&#xff08;適用于單點橢圓接觸&#xff09;&#xff0c;并給出如何擴展到 非 Hertz / 有限元驗證的提示。1 理論回顧&#xff08;Hertz 橢圓…

實習結束,秋招開啟

大家好&#xff0c;依舊是你們的老朋友仰望-星空~~&#xff0c;我又消失了3個月&#xff0c;快四個月了&#x1f604;&#xff0c;不少文章都 落灰了。這段時間其實一直在忙著找實習&#xff0c;然后準備面試題、刷算法、做項目啥的&#xff0c;也是比較忙碌的&#xff0c;也就…

14 C++ STL 容器實戰:stack/list 模擬實現指南 + priority_queue 用法及避坑技巧

stack和queuestack的模擬實現和應用--底層就是順序表從棧的接口中可以看出&#xff0c;棧實際是一種特殊的vector&#xff0c;因此使用vector完全可以模擬實現stack。#include<vector> namespace Stack { template<class T> class stack { public:stack() {}void p…

Linux基礎指令(入門必備2.0)

創作初心&#xff1a;在加深個人對知識系統理解的同時希望可以幫助到更多需要的同學 &#x1f604;柯一夢的專欄系列 &#x1f680;柯一夢的Gitee主頁 &#x1f6e0;?柯一夢主頁詳情 座右銘&#xff1a;心向深耕&#xff0c;不問階序&#xff1b;汗沃其根&#xff0c;花自滿枝…

《失落之魂》M站評分僅40?國產動作類游戲究竟何去何從?

前段時間頻頻預熱的國產動作游戲《失落之魂》已正式發售&#xff0c;外媒Push Square發布了該作的階段性評測。評測指出&#xff0c;盡管《失落之魂》在規模上已接近3A級&#xff0c;但能感受到其獨立制作的根基。這款游戲于2016年通過索尼“中國之星計劃”獲得支持&#xff0c…

一個專為地圖制圖和數據可視化設計的在線配色網站,可以助你制作漂亮的地圖!

ColorBrewer 是一個專為地圖制圖和數據可視化設計的在線配色工具&#xff0c;由賓夕法尼亞州立大學地理學教授 Cynthia Brewer 及其團隊開發 。 它提供了科學、美觀且考慮周全的配色方案&#xff0c;旨在幫助用戶&#xff08;無論是科研人員、設計師還是GIS分析師&#xff09;…