python开源的语音唤醒,能够指定关键词
时间: 2025-06-09 17:55:16 AIGC 浏览: 47
<think>好的,用户想了解Python开源的语音唤醒工具,特别是能够指定关键词的。首先,我需要确定用户的需求。语音唤醒通常是指通过语音指令激活设备,比如“Hey Siri”或“OK Google”。用户可能希望在自己的项目中实现类似的功能,可能需要自定义唤醒词,比如设置自己的关键词而不是预设的。
接下来,我需要回忆有哪些Python库支持语音唤醒。常见的可能有Snowboy,不过我记得它已经不再维护了,但可能还有人在用。然后是Porcupine,这个库好像支持自定义关键词,而且有Python绑定。还有SpeechRecognition库,但可能更多用于语音识别而不是唤醒。Vosk也是一个语音识别库,可能支持关键词检测。另外,TensorFlow或PyTorch的自定义模型可能也是一种方式,但用户可能希望更现成的解决方案。
需要验证每个库的当前状态。比如Snowboy虽然开源,但GitHub上已经存档,可能兼容性问题。Porcupine由Picovoice开发,应该还在维护,支持多平台和多种编程语言,包括Python。它允许创建自定义唤醒词,但可能需要在线生成模型文件,或者使用预训练的词汇。Vosk是离线的语音识别库,可能支持关键词识别,但需要确认具体功能。
另外,用户可能需要考虑安装的难易程度。比如Porcupine需要安装特定的依赖,或者可能需要申请API key。而Vosk可能更容易安装,直接通过pip安装。还有计算资源的问题,比如是否需要GPU加速,或者是否能在树莓派等设备上运行。
用户可能希望一个简单易用的例子,比如几行代码就能实现唤醒功能。所以需要给出每个库的示例代码片段,说明如何设置关键词。同时要指出各个库的优缺点,比如是否需要付费,是否支持离线使用,支持的平台等。
可能还需要提到自定义训练的关键词,比如如果用户想使用非预置的关键词,是否需要自己训练模型,或者通过在线服务生成。比如Porcupine允许在控制台创建自定义唤醒词,但可能需要注册账户,生成模型文件后下载使用。
另外,需要注意许可证问题,有些库可能商业使用需要付费,比如Porcupine的社区版是免费的,但可能有功能限制。而Vosk是Apache License,可以免费使用。
总结下来,可能的回答结构是先介绍几个主要库,每个的特点、安装方法、示例代码,以及优缺点比较。最后给出选择建议,根据用户的具体需求,比如是否需要离线、自定义程度、易用性等。</think>以下是Python开源语音唤醒工具的介绍及实现步骤(支持自定义关键词):
1. **Porcupine** (推荐)
```python
from pvporcupine import Porcupine
# 需先注册Picovoice账号获取API key
porcupine = Porcupine(
access_key='YOUR_ACCESS_KEY',
keyword_paths=['自定义关键词文件路径.ppn'] # 支持同时检测多个关键词
)
audio_stream = 获取音频流()
while True:
pcm = audio_stream.read(porcupine.frame_length)
keyword_index = porcupine.process(pcm)
if keyword_index >= 0:
print("检测到唤醒词!")
```
✅ 优点:
- 支持中文/英文关键词
- 离线运行
- 低延迟(~0.1秒响应)
- 提供免费版(每天最多生成3个自定义词)
❌ 缺点:
- 需注册获取API key
- 商业使用需付费
2. **Vosk** + 关键词检测
```python
from vosk import Model, KaldiRecognizer
import json
model = Model("vosk-model-small-cn-0.22") # 中文小模型
rec = KaldiRecognizer(model, 16000)
while True:
data = 音频输入流.read(4000)
if rec.AcceptWaveform(data):
result = json.loads(rec.Result())
if "关键词" in result['text']:
print("唤醒成功!")
```
✅ 优点:
- 完全开源免费
- 支持中文识别
- 可自定义逻辑检测关键词
❌ 缺点:
- 需要自行实现唤醒逻辑
- 延迟较高(约0.5-1秒)
3. **Snowboy** (传统方案)
```python
import snowboydecoder
def detected_callback():
print("唤醒成功!")
detector = snowboydecoder.HotwordDetector(
"resources/keyword.pmdl", # 需自行训练模型
sensitivity=0.5)
detector.start(detected_callback)
```
✅ 优点:
- 成熟稳定
- 支持自定义模型训练
❌ 缺点:
- 已停止维护
- 仅支持Linux/macOS
- 训练需Linux环境
**自定义关键词训练指南**:
1. **Porcupine**:访问[picovoice控制台](https://console.picovoice.ai/)在线生成
- 输入中文拼音或英文单词
- 下载生成的.ppn文件
2. **Snowboy**(需Ubuntu):
```bash
git clone https://github.com/Kitt-AI/snowboy
cd snowboy/examples/Python3
python3 generate_pmdl.py -r1=录音1.wav -r2=录音2.wav -r3=录音3.wav -lang=zh -n=关键词.pmdl
```
**选择建议**:
- 优先选Porcupine(现代方案)
- 快速原型开发用Vosk
- 树莓派项目考虑Snowboy
**性能优化技巧**:
1. 使用16kHz单声道音频
2. 关键词长度建议2-4个音节
3. 调整灵敏度参数平衡误触率
4. 配合pyaudio处理音频输入
5. 使用线程隔离音频处理逻辑
**完整示例代码**(Porcupine):
```python
import pyaudio
from pvporcupine import Porcupine
porcupine = Porcupine(
access_key="your_key",
keyword_paths=["hey-xiaoqi_zh_linux_v3_0_0.ppn"]
)
pa = pyaudio.PyAudio()
audio_stream = pa.open(
rate=porcupine.sample_rate,
channels=1,
format=pyaudio.paInt16,
input=True,
frames_per_buffer=porcupine.frame_length
)
try:
while True:
pcm = audio_stream.read(porcupine.frame_length)
pcm = struct.unpack_from("h" * porcupine.frame_length, pcm)
if porcupine.process(pcm) >= 0:
print("唤醒成功!")
finally:
audio_stream.close()
porcupine.delete()
```
建议从Porcupine开始尝试,其提供了最佳的准确率与性能平衡。若需要完全开源方案,可考虑Vosk配合自定义逻辑实现。
阅读全文
相关推荐




















