cmusphinx/pocketsphinx

A small speech recognizer

PocketSphinx – 轻量级、离线语音识别器

是什么 – PocketSphinx 是由卡内基梅隆大学开发的开源连续语音识别器。它实现了用于大词汇量、说话人无关语音识别的经典隐马尔可夫模型(HMM)解码,但有意保持小巧且快速,以便在低功耗设备(如树莓派、嵌入式 Linux、Windows)上运行。代码库使用 C 语言编写,同时提供可选的 Python 绑定。

为何重要 – 与许多需要 GPU 或云 API 的现代神经网络识别器不同,PocketSphinx 完全离线运行,体积极小(仅几兆字节)。这使其非常适合隐私敏感或资源受限的应用场景,例如语音控制的物联网设备、机器人,或需要设备端语音转文本的爱好者项目。

如何获取 – 该项目使用 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 领域,专注于高效、离线推理,而非大型神经网络模型。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目