通过KITT.AI.
Discussion Group (或者发送邮件给 snowboy-discussion@kitt.ai)
(讨论组自2016年9月以来是新的,因为我们每天都会收到很多消息,请在这里发送普遍的问题。关于错误,请使用Github问题标签.)
版本:1.2.0(3/25/2017)
Snowboy现在为我们带来了解放双手的体验通过运行在Raspberry Pi上的Alexa AVS sample app!有关性能以及如何使用其他唤醒词模型,请参阅下面更多的信息.
性能
唤醒检测的性能通常依赖于实际的环境,例如,它是否与高质量麦克风一起使用,是否在街道上,在厨房中,还是有背景噪音等等. 所以我们觉得最好在使用者真实的环境中进行评估。为了评估的目的,我们准备了一个可以安装和运行在除盒子以外设备上的Android应用程序:SnowboyAlexaDemo.apk (如果您之前安装了此应用程序,请先卸载它) .
个人模型
- 创建您的个人唤醒词模型通过我们的 website 或者 hotword API
- 将Alexa AVS sample app(安装后)的唤醒词模型替换为您的个人模型
# Please replace YOUR_PERSONAL_MODEL.pmdl with the personal model you just
# created, and $ALEXA_AVS_SAMPLE_APP_PATH with the actual path where you
# cloned the Alexa AVS sample app repository.
cp YOUR_PERSONAL_MODEL.pmdl $ALEXA_AVS_SAMPLE_APP_PATH/samples/wakeWordAgent/ext/resources/alexa.umdl
- 在Alexa AVS sample app code中设置 'APPLY_FRONTEND' 为 'false' 和更新 'SENSITIVITY',并重新编译
# Please replace $ALEXA_AVS_SAMPLE_APP_PATH with the actual path where you
# cloned the Alexa AVS sample app repository.
cd $ALEXA_AVS_SAMPLE_APP_PATH/samples/wakeWordAgent/src/
# Modify KittAiSnowboyWakeWordEngine.cpp and update SENSITIVITY at line 28.
# Modify KittAiSnowboyWakeWordEngine.cpp and set APPLY_FRONTEND to false at
# line 30.
make
- 运行这个唤醒词为 'kitt_ai' 的引擎
通用模型
- 用您的通用模型替换Alexa AVS sample app(安装后)中的唤醒词模型
# Please replace YOUR_UNIVERSAL_MODEL.umdl with the personal model you just
# created, and $ALEXA_AVS_SAMPLE_APP_PATH with the actual path where you
# cloned the Alexa AVS sample app repository.
cp YOUR_UNIVERSAL_MODEL.umdl $ALEXA_AVS_SAMPLE_APP_PATH/samples/wakeWordAgent/ext/resources/alexa.umdl
- 在Alexa AVS sample app code 中更新 'SENSITIVITY', 并重新编译
# Please replace $ALEXA_AVS_SAMPLE_APP_PATH with the actual path where you
# cloned the Alexa AVS sample app repository.
cd $ALEXA_AVS_SAMPLE_APP_PATH/samples/wakeWordAgent/src/
# Modify KittAiSnowboyWakeWordEngine.cpp and update SENSITIVITY at line 28.
make
- 运行这个唤醒词设置为 'kitt_ai' 的引擎!
Snowboy现在通过 https://snowboy.kitt.ai/api/v1/train/
端口提供 唤醒词服务, 请查看Full Documentation和示例Python/Bash script(非常欢迎贡献其他的语言).
作为一个快速开始,POST
下面代码到https://snowboy.kitt.ai/api/v1/train:
{
"name": "a word",
"language": "en",
"age_group": "10_19",
"gender": "F",
"microphone": "mic type",
"token": "<your auth token>",
"voice_samples": [
{wave: "<base64 encoded wave data>"},
{wave: "<base64 encoded wave data>"},
{wave: "<base64 encoded wave data>"}
]
}
然后你会获得一个训练完成的个人模型!
Snowboy是一款可定制的唤醒词检测引擎,可为您创建像 "OK Google" 或 "Alexa" 等自己的唤醒词. 它由深层神经网络驱动,具有以下特性:
-
高度可定制:您可以自由定义自己的魔术短语 - 让它成为“open sesame”,“garage door open”或 “hello dreamhouse”,你自己命名它。
-
总是在监听 但保护您的个人隐私:snowboy不使用互联网,不会将您的声音传播到云端.
-
轻量级和嵌入式的:它甚至可以在Raspberry Pi上运行,并且在最弱的Pi(单核700MHz ARMv6) 上占用少于10%的CPU.
-
Apache授权的!
目前Snowboy支持(查看lib文件夹):
- 所有版本的Raspberry Pi(Raspbian基于Debian Jessie 8.0)
- 64位Mac OS X
- 64位Ubuntu(12.04和14.04)
- iOS版
- Android的
- Pine64(Debian Jessie 8.5,3.10.102 BSP2)
- Nvidia Jetson TX1(使用上面的Pine64包)
- Nvidia Jetson TX2(使用上面的Pine64包)
- 英特尔Edison(Ubilinux基于Debian Wheezy 7.8)
- 三星Artik(搭载Fedora 25为ARMv7)
- ARM64(aarch64,Ubuntu 16.04)
它是以C ++库的形式提供并被swig封装成能在多种操作系统和语言上使用。我们欢迎新语言的封装 - 请随时发送你们的请求!
目前我们已经现实封装的有:
- Java / Android
- Go(thanks to @brentnd)
- Node(thanks to @evancohen和@ nekuz0r)
- Perl(thanks to @iboguslavsky)
- Python
- iOS / Swift3(thanks to @grimlockrocks)
- iOS / Object-C(thanks to @patrickjquinn)
如果您想要支持其他硬件或操作系统,请将您的请求发送至snowboy@kitt.ai
注意:Snowboy还不支持Windows .请在* nix平台上编译Snowboy.
黑客:免费
- 个人使用
- 社区支持
商业:请通过snowboy@kitt.ai与我们联系
- 个人使用
- 商业许可证
- 技术支持
我们提供预训练的通用模型为了测试的目的。当您测试那些模型时,请记住他们可能没有为您的特定设备或环境进行过优化.
以下是模型列表和您必须使用的参数:
- resources/ snowboy.umdl:唤醒词为“snowboy”的通用模型。将SetSensitivity设置为0.5以获得更好的性能.
- resources/ alexa.umdl:唤醒词为“Alexa”的通用模型。将SetSensitivity设置为0.5,最好将ApplyFrontend (仅适用于Raspberry Pi)设置为true。这种模式是压抑的.
- resources/ alexa / alexa_02092017.umdl:唤醒词为“Alexa”的通用模型。这个仍然在优化中。 将SetSensitivity设置为0.15。
- resources/ alexa / alexa-avs-sample-app/alexa.umdl:这个是为Alexa AVS sample app 优化过的唤醒词为“Alexa”的通用模型,将SetSensitivity设置为0.6,并将ApplyFrontend(仅适用于Raspberry Pi)设置为true。 当ApplyFrontend设置为true时,这是迄今为止我们公开发布的最好的“Alexa”的模型。
Snowboy可以以本机node模块的形式预编译:64位Ubuntu,MacOS X和Raspberry Pi(Raspbian 8.0+)。为了快速安装运行:
npm install --save snowboy
有关示例用法,请参阅examples/Node文件夹。根据您使用的脚本,可能需要安装依赖关系库例如fs,wav或node-record-lpcm16。
- 64 bit Ubuntu 12.04 / 14.04
- MacOS X
- Raspberry Pi with Raspbian 8.0, all versions (1/2/3/Zero)
- Pine64 (Debian Jessie 8.5 (3.10.102)), Nvidia Jetson TX1 and Nvidia Jetson TX2 (download)
- Intel Edison (Ubilinux based on Debian Wheezy 7.8) (download)
如果您要根据自己的环境/语言编译版本,请继续阅读.
要运行demo,您可能需要以下内容,具体取决于您使用的示例和您正在使用的平台:
- SoX(音频转换)
- PortAudio或PyAudio(音频录音)
- SWIG 3.0.10或以上(针对不同语言/平台编译Snowboy)
- ATLAS或OpenBLAS(矩阵计算)
在下面您还可以找到在Mac OS X,Ubuntu或Raspberry Pi上安装依赖关系所需的确切命令.
'brew' 安装 'swig','sox','portaudio' 和绑定了 'pyaudio'的Python:
brew install swig portaudio sox
pip install pyaudio
如果您没有安装Homebrew,请在这里here下载。如果没有pip,可以在这里here安装.
确保您可以用麦克风录制音频:
rec t.wav
首先 'apt-get' 安装 'swig','sox','portaudio'和绑定了 'pyaudio' 的 Python:
sudo apt-get install swig3.0 python-pyaudio python3-pyaudio sox
pip install pyaudio
然后安装 'atlas' 矩阵计算库:
sudo apt-get install libatlas-base-dev
确保您可以用麦克风录制音频:
rec t.wav
如果您需要额外设置您的音频(特别是Raspberry Pi),请参阅full documentation.
为Linux和Raspberry Pi编译node插件并需要安装以下依赖项:
sudo apt-get install libmagic-dev libatlas-base-dev
然后编译插件,从snowboy存储库的根目录运行以下内容:
npm install
node-pre-gyp clean configure build
# Make sure you have JDK installed.
cd swig/Java
make
SWIG将生成一个包含转换成Java封装器的'java'目录和一个包含JNI库的'jniLibs'目录.
去运行Java示例脚本: cd examples/Java make run
cd swig/Python
make
SWIG将生成一个_snowboydetect.so文件和一个简单(但难以阅读)的python 封装snowboydetect.py。我们已经提供了一个更高级的python封装snowboydecoder.py
如果不能make,请自由适配swig/Python 中的Makefile到您自己的系统设置.
cd examples/Go
go get github.com/Kitt-AI/snowboy/swig/Go
go build -o snowboy main.go
./snowboy ../../resources/snowboy.umdl ../../resources/snowboy.wav
期望输出:
Snowboy detecting keyword in ../../resources/snowboy.wav
Snowboy detected keyword 1
更多,请阅读 'examples/Go/readme.md'.
cd swig/Perl
make
Perl示例包括使用KITT.AI RESTful API培训个人唤醒词,在检测到唤醒之后添加Google Speech API等。要运行示例,请执行以下操作
cd examples/Perl
# Install cpanm, if you don't already have it.
curl -L https://cpanmin.us | perl - --sudo App::cpanminus
# Install the dependencies. Note, on Linux you will have to install the
# PortAudio package first, using e.g.:
# apt-get install portaudio19-dev
sudo cpanm --installdeps .
# Run the unit test.
./snowboy_unit_test.pl
# Run the personal model training example.
./snowboy_RESTful_train.pl <API_TOKEN> <Hotword> <Language>
# Run the Snowboy Google Speech API example. By default it uses the Snowboy
# universal hotword.
./snowboy_googlevoice.pl <Google_API_Key> [Hotword_Model]
在Objective-C中使用Snowboy库不需要一个封装. 它与Objective-C中使用C ++库基本相同. 我们为iOS设备编写了一个 "fat" 静态库,请参阅这里的库lib/ios/libsnowboy-detect.a
.
在Objective-C中初始化Snowboy检测器:
snowboy::SnowboyDetect* snowboyDetector = new snowboy::SnowboyDetect(
std::string([[[NSBundle mainBundle]pathForResource:@"common" ofType:@"res"] UTF8String]),
std::string([[[NSBundle mainBundle]pathForResource:@"snowboy" ofType:@"umdl"] UTF8String]));
snowboyDetector->SetSensitivity("0.45"); // Sensitivity for each hotword
snowboyDetector->SetAudioGain(2.0); // Audio gain for detection
在Objective-C中运行唤醒词检测:
int result = snowboyDetector->RunDetection(buffer[0], bufferSize); // buffer[0] is a float array
您可能需要按照一定的频率调用RunDetection(),从而控制CPU使用率和检测延迟.
感谢@patrickjquinn和@grimlockrocks,我们现在有了在Objective-C和Swift3中使用Snowboy的例子。看看下面的例子examples/iOS/
和下面的截图!
完整的README和教程在Android README,这里是一个截图:
我们准备了一个可以安装并运行的Android应用程序:SnowboyAlexaDemo.apk(如果您之前安装了此应用程序,请先卸载它们).
进到 'examples/Python' 文件夹并打开你的python控制台:
In [1]: import snowboydecoder
In [2]: def detected_callback():
....: print "hotword detected"
....:
In [3]: detector = snowboydecoder.HotwordDetector("resources/snowboy.umdl", sensitivity=0.5, audio_gain=1)
In [4]: detector.start(detected_callback)
然后对你的麦克风说"snowboy",看看是否Snowboy检测到你.
这个 'snowboy.umdl' 文件是一个 "通用" 模型,可以检测不同的人说 "snowboy" . 如果你想要其他的唤醒词,请去snowboy.kitt.ai录音,训练和下载你自己的个人模型(一个.pmdl文件).
当 'sensitiviy' 设置越高,唤醒越容易触发. 但是你也可能会收到更多的误唤醒.
'audio_gain' 控制是否增加(> 1)或降低(<1)输入音量.
提供两个演示文件 'demo.py' , 'demo2.py' 以显示更多的用法.
注意:如果您看到以下错误:
TypeError: __init__() got an unexpected keyword argument 'model_str'
您可能正在使用旧版本的SWIG. 请升级SWIG. 我们已经使用SWIG 3.0.7和3.0.8测试通过.
v1.2.0, 3/25/2017
- 为Alexa AVS sample app添加更好的Alexa模型
- 新的解码器,适用于像Alexa这样的简短的词条
v1.1.1, 3/24/2017
- 添加Android演示
- 添加了iOS演示
- 增加了三星Artik支持
- 添加Go支持
- 增加了英特尔爱迪生支持
- 增加了Pine64的支持
- 增加了Perl支持
- 添加了更强大的“Alexa”模型(umdl)
- 通过/api/v1/train终端提供Hotword即服务。
- 解码器没有改变
v1.1.0, 9/20/2016
- 添加了Node的库
- 增加了对Python3的支持
- 增加了通用模型 alexa.umdl
- 更新通用模型snowboy.umdl,使其在嘈杂的环境中工作
v1.0.4, 7/13/2016
- 更新通用snowboy.umdl模型,使其更加健壮
- 各种改进加快检测
- Bug修复
v1.0.3, 6/4/2016
- 更新的通用snowboy.umdl模型,使其在非语音环境中更加强大
- 修正使用float作为输入数据时的错误
- 为Android ARMV7架构增加了库支持
- 为iOS添加了库
v1.0.2, 5/24/2016
- 更新通用snowboy.umdl模型
- 添加C ++示例,文档将在下一个版本中
v1.0.1, 5/16/2016
- VAD现在返回-2为静音,-1为错误,0为语音,大于0为触发了唤醒
- 添加了Raspberry Pi的静态库,以防人们想自己编译而不是使用二进制版本
v1.0.0, 5/10/2016
- 初始发行