跳转到内容

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。

  • task_stack_in_psram (可选, boolean): 如果为 true,则在 PSRAM 中而非内部 RAM 中分配推理任务栈。需要 PSRAM 组件。默认为 false。

  • 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。

      • 指向本地模型 JSON 文件的完整路径。 例如 /config/models/okay_nabu.json。

    • probability_cutoff (可选, percentage): 唤醒词检测的概率截止值。 如果唤醒词的概率低于此值,则不会检测到唤醒词。 值越大,误接受的数量越少,但误拒绝的数量越多。

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

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

  • on_wake_word_detected (可选, Automation): 检测到唤醒词时执行的自动化。 模型清单中的 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。

      • 指向本地模型 JSON 文件的完整路径。 例如 /config/models/vad.json。

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

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

probability_cutoff 和 sliding_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",
"trained_languages": ["en"],
"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 版本。