跳转到内容

Micro Wake Word

ESPHome 实现了来自 microWakeWord 的设备端唤醒词检测框架。 此存储库/库允许您为 ESPHome 设备创建自定义唤醒词。

训练过程在 microWakeWord GitHub 存储库 中描述。

# 简写名称
micro_wake_word:
models:
- model: okay_nabu
# GitHub 简写 URL
micro_wake_word:
models:
- model: github://esphome/micro-wake-word-models/models/v2/okay_nabu.json
  • microphone (必需, 麦克风源配置):用于音频输入的 麦克风 设置。

  • stop_after_detection (可选, boolean):检测到唤醒词后是否停止组件。默认为 true

  • models (必需, list):要使用的模型。只有第一个模型在首次启动时默认启用。然后每个模型的启用状态会保存到闪存中或从闪存中恢复。

    • id (可选, ID):用于下面模型动作的可选 ID。

    • model (必需, string):可以是以下之一:

      • 官方 ESPHome 模型存储库 中存在的模型简单名称。 例如 okay_nabu

      • 模型 JSON 文件的 GitHub 简写 URL。 例如 github://esphome/micro-wake-word-models/models/okay_nabu.json@main

      • 模型 JSON 文件的完整 URL。 例如 https://github.com/esphome/micro-wake-word-models/raw/main/models/okay_nabu.json

    • probability_cutoff (可选, percentage):唤醒词检测的概率阈值。 如果唤醒词的概率低于此值,则不会检测到唤醒词。 较大的值会减少错误接受的数量,但会增加错误拒绝的数量。

    • sliding_window_size (可选, int):唤醒词检测的滑动窗口平均大小。较小的值会降低延迟,但可能会增加错误接受的数量。

    • internal (可选, boolean):唤醒词模型是设备内部的,无法在 Home Assistant 中启用/禁用。

  • on_wake_word_detected (可选, 自动化):检测到唤醒词时执行的自动化。 模型清单中的 wake_word 短语作为 std::string 提供给此自动化中的任何动作。

  • vad (可选, model):启用语音活动检测模型以减少非语音声音的错误接受。

    • model (可选, string):可以是以下之一:

      • 模型 JSON 文件的 GitHub 简写 URL。 例如 github://esphome/micro-wake-word-models/models/v2/vad.json@main

      • 模型 JSON 文件的完整 URL。 例如 https://github.com/esphome/micro-wake-word-models/raw/main/models/v2/vad.json

    • probability_cutoff (可选, percentage):语音活动检测的概率阈值。 如果概率低于此值,则不会接受任何唤醒词。 较大的值会减少错误接受的数量,但会增加错误拒绝的数量。

    • sliding_window_size (可选, int):语音活动检测的滑动窗口平均大小。平均概率与 probability_cutoff 比较以确定是否检测到语音活动。

probability_cutoffsliding_window_size 由 JSON 文件提供,但可以在 YAML 中覆盖。默认的 VAD 模型通过 vad 配置变量提供,但可以在 YAML 中覆盖为不同的模型。

启动唤醒词检测。

停止唤醒词检测。

on_...:
then:
- micro_wake_word.enable_model: model_id

启用指定的模型,以便在组件运行时可以检测到它。

on_...:
then:
- micro_wake_word.disable_model: model_id

禁用指定的模型,以便在组件运行时不会检测到它。

检查组件是否正在运行以检测唤醒词。

检查给定的模型是否已启用。

micro_wake_word:
microphone:
microphone: ...
channels: 0
gain_factor: 4
vad:
models:
- model: okay_nabu
id: okay_nabu_model
- model: hey_mycroft
id: hey_mycroft_model
wake_word:
on_wake_word_detected:
then:
- voice_assistant.start:
wake_word: !lambda return wake_word;
{
"type": "micro",
"wake_word": "okay nabu",
"author": "Kevin Ahrendt",
"website": "https://www.kevinahrendt.com/",
"model": "stream_state_internal_quant.tflite",
"version": 2,
"micro": {
"probability_cutoff": 0.97,
"sliding_window_size": 5,
"feature_step_size": 10,
"tensor_arena_size": 22860,
"minimum_esphome_version": "2024.7"
}
}

模型 JSON 文件包含以下字段,除非另有说明,否则都是必需的:

  • type (string):模型的类型。应该始终是 micro

  • wake_word (string):模型训练检测的唤醒词。

  • author (string):训练模型的作者姓名。

  • website (可选 string):作者的网站。

  • model (string):TFLite 训练模型文件的相对或绝对路径或 URL。

  • trained_languages (list of strings):训练时使用的唤醒词样本的主要语言/发音列表。

  • version (int):JSON 架构的版本。当前版本为 2

  • micro (object):microWakeWord 特定配置。

    • probability_cutoff (float):唤醒词检测的概率阈值。 如果唤醒词的概率低于此值,则不会检测到唤醒词。

    • sliding_window_size (int):唤醒词检测的滑动窗口大小。唤醒词对滑动窗口中的所有概率取平均值,而 VAD 模型使用滑动窗口中所有概率的最大值。

    • feature_step_size (int):频谱图特征生成的步长(以毫秒为单位)。

    • tensor_arena_size (int):张量竞技场的最小大小(以字节为单位)。

    • minimum_esphome_version (version):使用此模型所需的最低 ESPHome 版本。