Micro Wake Word
ESPHome 实现了来自 microWakeWord 的设备端唤醒词检测框架。 此仓库/库允许你为你的 ESPHome 设备创建自定义唤醒词。
训练过程在 microWakeWord GitHub 仓库 中进行了描述。
# 简写名称micro_wake_word: models: - model: okay_nabu
# Github 简写 URLmicro_wake_word: models: - model: github://esphome/micro-wake-word-models/models/v2/okay_nabu.json-
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 中用不同的模型覆盖。
micro_wake_word.start 操作
Section titled “micro_wake_word.start 操作”启动唤醒词检测。
micro_wake_word.stop 操作
Section titled “micro_wake_word.stop 操作”停止唤醒词检测。
micro_wake_word.enable_model 操作
Section titled “micro_wake_word.enable_model 操作”on_...: then: - micro_wake_word.enable_model: model_id启用指定的模型,以便在组件运行时可以检测到它。
micro_wake_word.disable_model 操作
Section titled “micro_wake_word.disable_model 操作”on_...: then: - micro_wake_word.disable_model: model_id禁用指定的模型,以便在组件运行时不会检测到它。
micro_wake_word.is_running 条件
Section titled “micro_wake_word.is_running 条件”检查组件是否正在运行以检测唤醒词。
micro_wake_word.model_is_enabled 条件
Section titled “micro_wake_word.model_is_enabled 条件”检查给定的模型是否已启用。
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_modelwake_word: on_wake_word_detected: then: - voice_assistant.start: wake_word: !lambda return wake_word;模型 JSON
Section titled “模型 JSON”{ "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 版本。
-