cmusphinx/pocketsphinx

A small speech recognizer

PocketSphinx – 輕量級、離線語音辨識器

是什麼 – PocketSphinx 是由卡內基梅隆大學開發的開源連續語音辨識器。它實作了用於大詞彙量、說話者無關語音辨識的經典隱馬可夫模型(HMM)解碼,但刻意保持小巧且快速,以便在低功耗裝置(如樹莓派、嵌入式 Linux、Windows)上運行。程式碼庫使用 C 語言撰寫,並提供可選的 Python 繫結。

為何重要 – 與許多需要 GPU 或雲端 API 的現代神經網路辨識器不同,PocketSphinx 完全離線運作,體積極小(僅數 MB)。這使其非常適合隱私敏感或資源受限的應用場景,例如語音控制的物聯網裝置、機器人,或需要裝置端語音轉文字的愛好者專案。

如何取得 – 此專案使用 CMake 建構 C 庫與 pocketsphinx 命令列工具。在基於 Debian 的 Linux 系統上,可透過 apt 安裝可選的音訊處理相依性(ffmpegportaudiosox 等)。克隆倉儲後,可執行以下指令:

# 建構 C 庫
cmake -S . -B build
cmake --build build
sudo cmake --build build --target install   # 或使用 -DCMAKE_INSTALL_PREFIX 指定自訂安裝路徑

對於 Python,建立虛擬環境後,從頂層目錄執行 pip install . 即可。

如何執行pocketsphinx 可執行檔讀取 16 位單聲道 PCM 音訊(來自檔案或標準輸入),並將辨識結果以行分隔的 JSON 格式輸出。主要子命令包括:

  • live – 流式處理音訊,偵測語音段,並為每個段輸出一個 JSON 物件(b 開始時間,d 持續時間,p 認知度,t 轉錄文字,w 詞級細節)。
  • single – 將每個輸入檔案視為一個完整語句,回傳一個 JSON 物件。
  • align – 強制將給定音訊檔案與提供的轉錄文字對齊,適用於產生詞語或音素的時間戳。
  • soxflags – 輸出將任意音訊格式轉換為所需 PCM 流所需的 sox 參數,支援如 sox audio.mp3 $(pocketsphinx soxflags) | pocketsphinx - 的管道處理。

程式設計 – 倉儲在 examples/ 目錄中提供 C 與 Python 的範例程式。C API 使用 Doxygen 文件化(由 CMake 自動建構),Python API 則托管於 https://pocketsphinx.readthedocs.io。Python 中的典型用法如下:

import pocketsphinx as ps
config = ps.Decoder.default_config()
config.set_string('-hmm', '/path/to/acoustic/model')
config.set_string('-lm', '/path/to/language/model')
config.set_string('-dict', '/path/to/dictionary')
decoder = ps.Decoder(config)
decoder.start_utt()
with open('speech.wav', 'rb') as f:
    decoder.process_raw(f.read(), False, True)
decoder.end_utt()
print('Result:', decoder.hyp().hypstr)

開發與測試 – 專案包含回歸/單元測試套件(make checkctest)。文件可本地建構(C API 使用 cmake --build build --target docs,Python 文件使用 make -C docs html)。GitHub Actions 上的持續整合工作流程負責發行與 API 文件更新。

授權 – 請參閱倉儲中的 LICENSE 檔案;PocketSphinx 以 BSD 風格授權,允許自由使用與分發。


PocketSphinx 是一個真實且積極維護的語音辨識庫,完全屬於 AI/ML 領域,專注於高效、離線推論,而非大型神經網路模型。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案