cmusphinx/pocketsphinx
A small speech recognizer
PocketSphinx – 轻量级、离线语音识别器
是什么 – PocketSphinx 是由卡内基梅隆大学开发的开源连续语音识别器。它实现了用于大词汇量、说话人无关语音识别的经典隐马尔可夫模型(HMM)解码,但有意保持小巧且快速,以便在低功耗设备(如树莓派、嵌入式 Linux、Windows)上运行。代码库使用 C 语言编写,同时提供可选的 Python 绑定。
为何重要 – 与许多需要 GPU 或云 API 的现代神经网络识别器不同,PocketSphinx 完全离线运行,体积极小(仅几兆字节)。这使其非常适合隐私敏感或资源受限的应用场景,例如语音控制的物联网设备、机器人,或需要设备端语音转文本的爱好者项目。
如何获取 – 该项目使用 CMake 构建 C 库和 pocketsphinx 命令行工具。在基于 Debian 的 Linux 系统上,可通过 apt 安装可选的音频处理依赖项(ffmpeg、portaudio、sox 等)。克隆仓库后,可执行以下命令:
# 构建 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 check 或 ctest)。文档可本地构建(C API 使用 cmake --build build --target docs,Python 文档使用 make -C docs html)。GitHub Actions 上的持续集成工作流负责发布和 API 文档更新。
许可证 – 请参阅仓库中的 LICENSE 文件;PocketSphinx 采用 BSD 风格许可证,允许自由使用和分发。
PocketSphinx 是一个真实且积极维护的语音识别库,完全属于 AI/ML 领域,专注于高效、离线推理,而非大型神经网络模型。
相关
- 项目
- 项目
- 项目
- 项目
- 项目