Snowboy 是一款高度可定制的唤醒词检测引擎,可以用于实时嵌入式系统,并且始终监听(即使离线)。当前,它可以运行在 Raspberry Pi、(Ubuntu)Linux 和 Mac OS X 系统上。
一些热门的唤醒词包括,Amazon Echo 上的“Alexa”,Android 设备上的“OK Google” 和 iPhone 上的“Hey Siri”。这些唤醒词用于,发起一个完整的语音交互界面。除了此,唤醒词还可以用于其他用途,比如执行简单的命令和控制动作。
在一个棘手(hacky)的解决方案中,它可以运行完整的自动语音识别(ASR,Automatic Speech Recognition)来执行热词检测。在这种情况下,设备将在自动语音识别转录中观察特定的触发词。转录中观察特定的触发词。 另外,当使用基于云的解决方案时,它也不会保护您的隐私。幸运的是,Snowboy 被创造出来,解决这些问题。
Snowboy 具有以下的特性:
当前,Snowboy 可以支持:
为了使用 Snowboy,我们需要:
如,从https://snowboy.kitt.ai/hotword/351,可以获取一个中文的“小白”模型。但是下载的时候,需要自己录入自己的语音。
您可以下载预先打包好的 Snowboy 二进制文件,及其 Python 封装:
或者自行从 GitHub 下载并编译:Snowboy
在这里,我们使用 PortAudio 作为音频输入/输出的跨平台支持。我们还使用 sox 作为快速实用程序,来检查麦克风设置是否正确。因此,我们需要先安装这个软件,使用麦克风。
1.安装 Sox
Linux 系统执行:
sudo apt-get install python-pyaudio python3-pyaudio sox
Mac OS 系统执行:
brew install portaudio sox
2.安装 PortAudio 的 Python 绑定:
pip install pyaudio
3.要检查是否可以通过麦克风进行录制,请打开终端并运行:
rec temp.wav
解码器(decoder)包含了以下的内容:
├── README.md
├── _snowboydetect.so
├── demo.py
├── demo2.py
├── light.py
├── requirements.txt
├── resources
│ ├── ding.wav
│ ├── dong.wav
│ ├── common.res
│ └── snowboy.umdl
├── snowboydecoder.py
├── snowboydetect.py
└── version
_snowboydetect.so
是一个使用 SWIG 编译的动态链接库。它依赖于您的系统的 Python 2 库。所有与 Snowboy 相关的库都在此文件中静态链接。
snowboydetect.py
是一个由 SWIG 生成的 Python 封装文件。因为它很难阅读,我们创建了另一个高级封装:snowboydecoder.py
。
您应该已经从 https://snowboy.kitt.ai 获得了经过训练的模型文件(例如snowboy.pmdl),或者您可以简单地使用 resources/snowboy.umdl 中的通用模型。
该 DEMO 可以在任何设备上运行。但是我们建议您:在带有扬声器输出的笔记本电脑/台式机上运行它,因为当您的唤醒词被触发时,DEMO 会播放Ding声音。
1.为了运行 snowboydecoder.py
文件中的 __main__
函数的 demo,请在终端中运行以下命令:
python demo.py snowboy.pmdl
这里的 snowboy.pmdl
是你从 https://snowboy.kitt.ai 下载的训练模型。
2.当提示(prompt)时,向麦克风说话,看看 Snowboy 是否检测到你的魔术短语。
演示非常简单。 以下是演示的代码:
import snowboydecoder
import sys
import signal
interrupted = False
def signal_handler(signal, frame):
global interrupted
interrupted = True
def interrupt_callback():
global interrupted
return interrupted
if len(sys.argv) == 1:
print("Error: need to specify model name")
print("Usage: python demo.py your.model")
sys.exit(-1)
model = sys.argv[1]
signal.signal(signal.SIGINT, signal_handler)
detector = snowboydecoder.HotwordDetector(model, sensitivity=0.5)
print('Listening... Press Ctrl+C to exit')
detector.start(detected_callback=snowboydecoder.ding_callback,
interrupt_check=interrupt_callback,
sleep_time=0.03)
detector.terminate()
主程序员在 detector.start()
里循环。每 sleep_time=0.03
秒,将会执行下面的函数:
detected_callback
函数。interrupt_check
函数:如果它返回True,则断开主循环并返回。在这里,我们为 detected_callback
分配了一个默认的 snowboydecoder.ding_callback
,以便每次听到你的唤醒词时,电脑都会播放一个声音。
观光\评论区