Snowboy — 设备的“耳朵”:热词唤醒引擎
📖 一、项目简介
Snowboy 是由 KITT.AI 开发的轻量级语音唤醒引擎,它的核心目标是: 👉 让设备在低功耗、低延迟、离线的条件下,随时监听你的自定义“唤醒词”。
你可以把 Snowboy 想象成设备的“耳朵”,它不会一直处理所有语音,而是安静等待你说出 “芝麻开门” 或 “你好小八” 这样的专属指令,一旦捕捉到,就会激活后续的语音处理模块(比如 EasyVoice、Dolphin ASR)。
🌟 二、核心特性
-
🔒 本地化运行:完全离线,数据不上传云端,保障隐私。
-
🧩 自定义唤醒词:可训练专属的
.pmdl
/.umdl
模型文件。 -
⚡ 低延迟、低功耗:即使在树莓派、嵌入式设备上也能流畅运行。
-
🌍 跨平台支持:支持 Linux、Windows、macOS、树莓派。
-
🎛️ 多模型并行:同时支持多个唤醒词识别。
🎯 三、应用场景
-
智能家居:用一句话开启/关闭灯光、电视、空调。
-
车载助手:驾驶过程中无需触摸屏幕,直接语音唤醒系统。
-
机器人交互:为机器人配置个性化唤醒词。
-
IoT 场景:智能音箱、会议系统、语音交互终端。
⚙️ 四、本地部署教程
1. 环境准备
安装 Python 和音频依赖:
sudo apt-get update
sudo apt-get install python3 python3-pip portaudio19-dev
pip3 install pyaudio
2. 下载源码
git clone https://github.com/Kitt-AI/snowboy.git
cd snowboy
3. 编译核心模块
cd swig/Python3
make
4. 测试运行
python3 demo.py resources/models/snowboy.umdl
如果能在控制台看到 检测结果,说明 Snowboy 已正常工作。
5. 使用自定义唤醒词
-
前往 Snowboy 自定义唤醒训练平台https://snowboy.hahack.com/,生成
.pmdl
文件。 -
替换 demo 脚本中的模型路径即可:
detector = snowboydecoder.HotwordDetector("resources/models/my_word.pmdl", sensitivity=0.5)
🐳 五、容器化部署教程
在实际应用中,我们更推荐用 Docker 来部署 Snowboy,这样能避免依赖环境冲突,也方便迁移和上线。
1. Dockerfile
FROM python:3.8-slim
WORKDIR /app
ENV PYTHONPATH=/app/swig/Python:$PYTHONPATH
ENV PYTHONUNBUFFERED=1
# 1. 使用国内 apt 源(清华)
RUN echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free" > /etc/apt/sources.list && \
echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free" >> /etc/apt/sources.list && \
echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free" >> /etc/apt/sources.list
# 2. 安装系统依赖和编译工具
RUN apt-get update && apt-get install -y --fix-missing \
build-essential \
python3-dev \
swig \
libatlas-base-dev \
portaudio19-dev \
libffi-dev \
sox \
libsox-fmt-all \
&& rm -rf /var/lib/apt/lists/*
# 3. 复制项目文件
COPY . /app/
# 4. 编译 Snowboy SWIG Python 模块
WORKDIR /app/swig/Python
RUN make
# 5. 回到工作目录
WORKDIR /app
# 6. 升级 pip 并安装 Python 包
RUN pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple && \
pip install flask numpy webrtcvad pyaudio -i https://pypi.tuna.tsinghua.edu.cn/simple --verbose
# 7. 创建静态目录
RUN mkdir -p static
# 8. 暴露端口
EXPOSE 5001
# 9. 启动命令
CMD ["python3", "web_service.py"]
2. docker-compose.yml
version: '3'
services:
snowboy:
build: .
container_name: snowboy-hotword
ports:
- "5001:5001"
volumes:
- ./resources:/app/resources
- ./static:/app/static
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
# 可选:限制资源使用
# deploy:
# resources:
# limits:
# cpus: '0.50'
# memory: 512M
3. 一键构建并启动
docker-compose up -d
启动后,Snowboy 将在容器内运行,并通过宿主机挂载的 models 文件夹加载你自定义的唤醒词。
日志可在
./logs
下查看。
🔗 六、与其他模块的衔接
-
前置(Snowboy):捕捉唤醒词,激活语音监听。
-
中间(Dolphin ASR):实时语音识别,转写为文字。
-
后置(EasyVoice):进行文本转语音,实现和用户的语音沟通。
Snowboy 只负责“第一声”,真正的语音交互需要结合 Dolphin ASR + EasyVoice 才能完成。
🚀 七、总结
Snowboy 是一个极其轻量、灵活的 语音唤醒模块,适合作为语音交互系统的入口:
-
离线运行 → 保障隐私
-
轻量快速 → 嵌入式设备友好
-
容器化部署 → 一键启动,快速落地
后续你可以把它与 EasyVoice、Dolphin ASR 结合,形成一个完整的 智能语音交互链路。
⚠️ 注意 Snowboy 官方已停止维护,但社区依然活跃,可以长期用于本地化项目”,尽管 Kitt.AI 停止了官方支持,Snowboy 依然因其开源特性和社区贡献保持活力,值得探索.
更多推荐
所有评论(0)