Mycroft Precise - Rhasspy Config Problem

Hello, everybody,

because Snowboy and Porcupine give me too much false positive detection, I tried Mycroft Precise. The setup on Windows (Windows subsystem for Linux WSL) worked well, as well as the training with lots of information for the not-wake-word.

Now I moved the two files “hey_pico.pb” and “hey_pico.pb.params” into the /de folder where Rhasspy 2.4.19 lives.
But I fail to configure Rhasspy for Precise following the Rhasspy Docs. As soon as I define “system”: “precise” Rhasspy will not start anymore.
With “system”: “snowboy” Rhasspy starts fine with the analogue config profile below. So I assume that there is no formatting error. Can anyone tell me where the problem is?

Additionally, I don’t understand the following sentence from the Rhasspy documentation:
…and set wake.precise.model to the name of the .pb file.

Thanks in advance for any kind of input! :blue_heart:

The configuration looks like the following:

"wake": {
    "system": "precise",
    "precise": {
      "model": "hey_pico.pb",
      "sensitivity": 0.5,
      "trigger_level": 3,
      "chunk_size": 2048
    "porcupine": {
        "keyword_path": "porcupine/hey_pico_raspberrypi.ppn",
        "sensitivity": "0.65"
    "snowboy": {
        "audio_gain": "0.90",
        "model": "snowboy/hey_pico/33_hey_pico_tone_mod_full_2x.pmdl",
        "sensitivity": "0.42"
"rhasspy": {
  "listen_on_start": true

Version of Rhasspy: 2.4.19
Installed Rhasspy: Docker
Hardware: Rpi 4
Operating system: Raspbian Buster

After training 80 wake words against some GB of non-wake words I would like to see if the detection rate is really as good as testing with Precise claims (99.9%).

I have now narrowed down the error further by retrieving the log via Portainer when Rhasspy tries to start with percise in the profile.

The log for Rhasspy from Portainer looks like following. I think the line
ModuleNotFoundError: No module named 'precise_runner’
sounds like the cause of my problems.

DEBUG:RhasspyCore:Profile files will be written to /profiles/de,
DEBUG:root:Loading default profile settings from /usr/share/rhasspy/profiles/defaults.json,
DEBUG:WebSocketObserver: -> started,
DEBUG:DialogueManager: -> started,
DEBUG:DialogueManager:started -> loading_mqtt,
DEBUG:DialogueManager:Loading MQTT first,
DEBUG:DialogueManager:Loading…will time out after 30 second(s),
DEBUG:HermesMqtt: -> started,
DEBUG:HermesMqtt:started -> connecting,
DEBUG:HermesMqtt:Logging in as Johannes,
DEBUG:HermesMqtt:Connecting to MQTT broker IP_HIDDEN:PORT_HIDDEN,
DEBUG:DialogueManager:loading_mqtt -> loading,
DEBUG:DialogueManager:Loading actors,
DEBUG:HermesMqtt:Connection successful.,
INFO:HermesMqtt:Connected to IP_HIDDEN:PORT_HIDDEN,
DEBUG:HermesMqtt:connecting -> connected,
Traceback (most recent call last):,
File “/usr/share/rhasspy/rhasspy/”, line 175, in on_receive,
self._state_method(message, sender),
File “/usr/share/rhasspy/rhasspy/”, line 293, in in_loading_mqtt,
File “/usr/share/rhasspy/rhasspy/”, line 236, in transition,
getattr(self, transition_method)(from_state),
File “/usr/share/rhasspy/rhasspy/”, line 301, in to_loading,
File “/usr/share/rhasspy/rhasspy/”, line 852, in load_actors,
self._wake = self.createActor(self.wake_class),
File “/usr/share/rhasspy/rhasspy/”, line 194, in createActor,
child_actor = cls().start(),
File “/usr/share/rhasspy/rhasspy/”, line 512, in init,
from precise_runner import ReadWriteStream,
ModuleNotFoundError: No module named ‘precise_runner’,
WARNING:DialogueManager:Actor timeout! Still waiting on [] Loading anyway…,
DEBUG:DialogueManager:loading -> ready,
INFO:DialogueManager:Automatically listening for wake word,
DEBUG:DialogueManager:ready -> asleep,
Traceback (most recent call last):,
File “/usr/share/rhasspy/rhasspy/”, line 175, in on_receive,
self._state_method(message, sender),
File “/usr/share/rhasspy/rhasspy/”, line 335, in in_loading,
File “/usr/share/rhasspy/rhasspy/”, line 236, in transition,
getattr(self, transition_method)(from_state),
File “/usr/share/rhasspy/rhasspy/”, line 358, in to_ready,
self.send(self.wake, ListenForWakeWord()),
File “/usr/share/rhasspy/rhasspy/”, line 235, in wake,
assert self._wake is not None,
DEBUG:InboxActor: -> stopped,
Traceback (most recent call last):,
File “”, line 1319, in ,
File “/usr/lib/python3.6/asyncio/”, line 484, in run_until_complete,
return future.result(),
File “”, line 168, in start_rhasspy,
await core.start(observer=observer),
File “/usr/share/rhasspy/rhasspy/”, line 144, in start,
await sys.async_listen(timeout),
File “/usr/share/rhasspy/rhasspy/”, line 296, in async_listen,
await asyncio.wait_for(self.async_receive_event.wait(), timeout),
File “/usr/lib/python3.6/asyncio/”, line 362, in wait_for,
raise futures.TimeoutError(),
DEBUG:main:Namespace(host=‘’, log_level=‘DEBUG’, port=12101, profile=‘de’, set=[], ssl=None, system_profiles=’/usr/share/rhasspy/profiles’, user_profiles=’/profiles’),

@synesthesiam Is Mycroft Precise still supported at all? Of all the possible wake word models I like this one best (despite the hurdle of getting training started) because you have a lot of configuration options and no online constraints.

Precise is not currently included in the 2.4 Docker image, but I am planning to have it in the 2.5 image. It will have first class support alongside the other wake word systems :slight_smile:

One more reason to look forward to version 2.5! Yay! :heart_eyes:
Out of joy I have documented and shared my (not quite trivial) way how I created the wakeword with Precise. The good thing is that you can eradicate all upcoming problems of a wrong activation by training. Maybe it will help someone who is also not satisfied with Snowboy.

1 Like