Best wake word for Wyoming Satellite

OpenWakeWord does not really work well enough to be used.

I tried setting threshold to 0.9 but it still trigger with nothing that even sounds like the “hey jarvey”. First trigger here is correct, second one is just from noise.

root@wyomingsat:/root # journalctl -u wyoming-openwakeword.service -f | grep -Ev "e-0|probability=0.0"
Jun 08 18:50:27 wyomingsat run[680]: DEBUG:root:client=18909135308, wake_word=hey_jarvis_v0.1, probability=0.4745495617389679
Jun 08 18:50:27 wyomingsat run[680]: DEBUG:root:client=18909135308, wake_word=hey_jarvis_v0.1, probability=0.11370817571878433
Jun 08 18:50:27 wyomingsat run[680]: DEBUG:root:client=18909135308, wake_word=hey_jarvis_v0.1, probability=0.38993534445762634
Jun 08 18:50:28 wyomingsat run[680]: DEBUG:root:client=18909135308, wake_word=hey_jarvis_v0.1, probability=0.1919974386692047
Jun 08 18:50:28 wyomingsat run[680]: DEBUG:root:client=18909135308, wake_word=hey_jarvis_v0.1, probability=0.8562726974487305
Jun 08 18:50:28 wyomingsat run[680]: DEBUG:root:client=18909135308, wake_word=hey_jarvis_v0.1, probability=0.9158890247344971
Jun 08 18:50:28 wyomingsat run[680]: DEBUG:root:Triggered hey_jarvis_v0.1 (client=18909135308)
Jun 08 18:50:32 wyomingsat run[680]: DEBUG:root:client=18909135308, wake_word=hey_jarvis_v0.1, probability=0.9808450937271118
Jun 08 18:50:32 wyomingsat run[680]: DEBUG:root:Triggered hey_jarvis_v0.1 (client=18909135308)
Jun 08 18:50:32 wyomingsat run[680]: DEBUG:root:client=18909135308, wake_word=hey_jarvis_v0.1, probability=0.47050485014915466
Jun 08 18:50:43 wyomingsat run[680]: DEBUG:root:client=18909135308, wake_word=hey_jarvis_v0.1, probability=0.11112593859434128
Jun 08 18:50:43 wyomingsat run[680]: DEBUG:root:client=18909135308, wake_word=hey_jarvis_v0.1, probability=0.3374835252761841
. . . 
Jun 09 14:01:18 wyomingsat run[14123]: DEBUG:root:client=76859367958065, wake_word=hey_jarvis_v0.1, probability=0.2757260799407959
Jun 09 14:01:18 wyomingsat run[14123]: DEBUG:root:client=76859367958065, wake_word=hey_jarvis_v0.1, probability=0.37688085436820984
Jun 09 14:01:18 wyomingsat run[14123]: DEBUG:root:client=76859367958065, wake_word=hey_jarvis_v0.1, probability=0.3833185136318207
Jun 09 14:01:18 wyomingsat run[14123]: DEBUG:root:client=76859367958065, wake_word=hey_jarvis_v0.1, probability=0.9745965003967285
Jun 09 14:01:18 wyomingsat run[14123]: DEBUG:root:Triggered hey_jarvis_v0.1 (client=76859367958065)
Jun 09 14:03:04 wyomingsat run[14123]: DEBUG:root:client=76859367958065, wake_word=hey_jarvis_v0.1, probability=0.13853298127651215
Jun 09 14:03:04 wyomingsat run[14123]: DEBUG:root:client=76859367958065, wake_word=hey_jarvis_v0.1, probability=0.40313640236854553
Jun 09 14:03:04 wyomingsat run[14123]: DEBUG:root:client=76859367958065, wake_word=hey_jarvis_v0.1, probability=0.28094610571861267

Since I have the satellite on a Pi 4, I don’t really mind to have something more CPU intensive, but nothing there looks like even close to Alexa reliability.

Is there something I am missing?

My conf

root@wyomingsat:/etc/systemd/system # cat wyoming-openwakeword.service
[Unit]
Description=Wyoming openWakeWord

[Service]
Type=simple
ExecStart=/root/wyoming-openwakeword/script/run \
  --uri 'tcp://0.0.0.0:10400' \
  --debug \
#  --log-format='%(levelname)s:%(name)s:%(message)s' \
  --debug-probability \
  --preload-model 'hey_jarvis_v0.1' \
#  --custom-model-dir /root/wyoming-openwakeword/custom/home-assistant-wakewords-collection/en/hey_kitt
  --threshold 0.90
WorkingDirectory=/root/wyoming-openwakeword
Restart=always
RestartSec=1

[Install]
WantedBy=default.target
root@wyomingsat:/etc/systemd/system # cat wyoming-satellite.service
[Unit]
Description=Wyoming Satellite
Wants=network-online.target
After=network-online.target
Requires=wyoming-openwakeword.service
Requires=4mic_leds.service

[Service]
Type=simple
ExecStart=/root/wyoming-satellite/script/run \
  --name 'wyomingsat' \
  --debug \
  --uri 'tcp://0.0.0.0:10700' \
  --wake-uri 'tcp://127.0.0.1:10400' \
  --event-uri 'tcp://127.0.0.1:10500' \
  --mic-command 'arecord -D plughw:CARD=seeed4micvoicec,DEV=0 -r 16000 -c 1 -f S16_LE -t raw' \
  --mic-command-channels 1 \
  --snd-command 'aplay -D plughw:CARD=UACDemoV10,DEV=0 -r 22050 -c 1 -f S16_LE -t raw' \
  --mic-auto-gain 31 \
  --mic-noise-suppression 2 \
  --wake-word-name 'hey_jarvis_v0.1' \
#  --wake-command-channels 4 \
#  --wake-refractory-seconds 2 \
  --awake-wav /root/beep-07a.wav \
  --done-wav /root/beep-07a.wav

WorkingDirectory=/root/wyoming-satellite
Restart=always
RestartSec=1

[Install]
WantedBy=default.target

OK I am gonna try porcupine 1, I will share the results

Snowboy with a trained wakeword recognizes you almost always, but gives a lot of false positives. It is not suitable for places where there is a lot of talking or music.
It would be interesting to test the microwakeword v2 if it is adapted for a satellite.

Oh, I didn’t see Voice Chapter 7 - Supercharged wake words and timers - Home Assistant
looks promising, thanks

I trained my own wake word. I only get a couple false detections a day and thats with TV and radio playing.
I added the following line to my open ai prompt that greaty reduced the annoyance of false detections.
If a request seems like it may be an accidental prompt,or makes no sense, do nothing and respond with “Cancelled”

That’s a good hint, I will def add it.

I also tried to train a custom wake word, but looks like predefined ones works better. I followed the tutorial, but since you work with text, and not your real voice, I cannot see how can that be better.

Did you adjust any settings, or just go wth default?
The first 2 sliders I set all the way up and teh last I set around 1850. I experimented with that last slider alot and around 1850 seems to be the best. The wake word I trained was Dimerzel. An unusual name, so I figured it would work better.
If Alexa on an echo dot would be a 10, I give this an 8.5

Porcupine hotword is very good in terms of sensitivity, but its error rate is high, and it is unstable. My account was deleted after a period of use

thanks for your input, I am gonna wait for microwakeword v2, looking forward

Well, I don’t think microwakeword is for raspberrypi, it’s for esp32

How does your keyword perform in environments with lots of ambient sound? For example, music is playing and we wake it up. I’m using a Google home mini and the “ok google” keyword works great in this environment. And I’m looking for a solution with the same quality on raspberrypi

In chapter seven they say “It was made for ESPHome, but it is available standalone and under the Apache 2.0 open source license. No one will ever have to pay for wake words ever again.”

I assume it will be available for ARM as well

1 Like

It performs Ok but I have to speak up in those situations. Once the wake word is recognized, I have an automation to mute the TV/Music so the command can be easily understood.

1 Like

What system are you using (hardware and software)?