Code Monkey home page Code Monkey logo

rhasspy's Introduction

Rhasspy Voice Assistant

Rhasspy 2.5 logo

Rhasspy (ˈɹæspi) is an open source, fully offline set of voice assistant services for many human languages that works well with:

You specify voice commands in a template language:

[LightState]
states = (on | off)
turn (<states>){state} [the] light

and Rhasspy will produce JSON events that can trigger action in home automation software, such as a Node-RED flow:

{
    "text": "turn on the light",
    "intent": {
        "name": "LightState"
    },
    "slots": {
        "state": "on"
    }
}

Rhasspy is optimized for:

Learn More

Web Interface

Rhasspy comes with a snazzy web interface that lets you configure, program, and test your voice assistant remotely from your web browser. All of the web UI's functionality is exposed in a comprehensive HTTP API.

Test page in web interface

Getting Started

Ready to try Rhasspy? Follow the steps below or check out the Getting Started Guide.

  1. Make sure you have the necessary hardware
  2. Choose an installation method
  3. Access the web interface to download a profile
  4. Author your custom voice commands and train Rhasspy
  5. Connect Rhasspy to other software like Home Assistant or a Node-RED flow by:

Getting Help

If you have problems, please stop by the Rhasspy community site or open a GitHub issue.

Supported Languages

Rhasspy supports the following languages:

Services

As of version 2.5, Rhasspy is composed of independent services that coordinate over MQTT using a superset of the Hermes protocol.

Rhasspy services

You can easily extend or replace functionality in Rhasspy by using the appropriate messages. Many of these messages can be also sent and received over the HTTP API and the Websocket API.

Intended Audience

Rhasspy is intended for savvy amateurs or advanced users that want to have a private voice interface to their chosen home automation software. There are many other voice assistants, but none (to my knowledge) that:

  1. Can function completely disconnected from the Internet
  2. Are entirely free/open source with a permissive license
  3. Work well with freely available home automation software

If you feel comfortable sending your voice commands through the Internet for someone else to process, or are not comfortable customizing software to handle intents, I recommend taking a look at Mycroft.

Contributing

Community contributions are welcomed! There are many different ways to contribute, both as a developer and a non-developer.

Open source


Development Status

The various repositories also have their own issue tracker to follow and discuss development of these specific components. Here's the status of all repositories:

Repository Tests Open issues Open pull requests
rhasspy Tests Open issues Open pull requests
rhasspy-asr Tests Open issues Open pull requests
rhasspy-asr-deepspeech Tests Open issues Open pull requests
rhasspy-asr-deepspeech-hermes Tests Open issues Open pull requests
rhasspy-asr-kaldi Tests Open issues Open pull requests
rhasspy-asr-kaldi-hermes Tests Open issues Open pull requests
rhasspy-asr-pocketsphinx Tests Open issues Open pull requests
rhasspy-asr-pocketsphinx-hermes Tests Open issues Open pull requests
rhasspy-client Tests Open issues Open pull requests
rhasspy-dialogue-hermes Tests Open issues Open pull requests
rhasspy-fuzzywuzzy Tests Open issues Open pull requests
rhasspy-fuzzywuzzy-hermes Tests Open issues Open pull requests
rhasspy-hermes Tests Open issues Open pull requests
rhasspy-hermes-app Tests Open issues Open pull requests
rhasspy-homeassistant-hermes Tests Open issues Open pull requests
rhasspy-microphone-cli-hermes Tests Open issues Open pull requests
rhasspy-microphone-pyaudio-hermes Tests Open issues Open pull requests
rhasspy-nlu Tests Open issues Open pull requests
rhasspy-nlu-hermes Tests Open issues Open pull requests
rhasspy-profile Tests Open issues Open pull requests
rhasspy-python-template Tests Open issues Open pull requests
rhasspy-rasa-nlu-hermes Tests Open issues Open pull requests
rhasspy-remote-http-hermes Tests Open issues Open pull requests
rhasspy-server-hermes Tests Open issues Open pull requests
rhasspy-silence Tests Open issues Open pull requests
rhasspy-snips-nlu Tests Open issues Open pull requests
rhasspy-snips-nlu-hermes Tests Open issues Open pull requests
rhasspy-speakers-cli-hermes Tests Open issues Open pull requests
rhasspy-supervisor Tests Open issues Open pull requests
rhasspy-tag-action Tests Open issues Open pull requests
rhasspy-tts-cli-hermes Tests Open issues Open pull requests
rhasspy-update-repo-action Tests Open issues Open pull requests
rhasspy-wake-pocketsphinx-hermes Tests Open issues Open pull requests
rhasspy-wake-porcupine-hermes Tests Open issues Open pull requests
rhasspy-wake-precise-hermes Tests Open issues Open pull requests
rhasspy-wake-raven Tests Open issues Open pull requests
rhasspy-wake-raven-hermes Tests Open issues Open pull requests
rhasspy-wake-snowboy-hermes Tests Open issues Open pull requests

rhasspy's People

Contributors

0x326 avatar adamaze avatar balloob avatar btriller avatar chrisb85 avatar coduinix avatar dpippenger avatar drhirn avatar freethesmoke avatar gartensofa avatar h3xx avatar h4de5 avatar jasonhildebrand avatar kamilcuk avatar koenvervloesem avatar maxbachmann avatar montydrei avatar mrgngautier avatar nullent1ty avatar romkabouter avatar samjongenelen avatar solhuebner avatar synesthesiam avatar tjiho avatar wpettersson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rhasspy's Issues

Failed to restart Rhasspy when started as systemd service

Hello,

When Rhasspy is configured to start as systemd service like 2.4, the supervisor failed.

It failed to start because in his configuration file ( /.config/rhasspy/profiles/fr/supervisord.conf ) , there is this line for each module :
stdout_logfile = /dev/stdout

When we change this line by :
stdout_logfile=/home/cedcox/rhasspy.log

Rhasspy starts well.

I did not test with docker, i don't use it.

More informations here :
https://community.rhasspy.org/t/making-rhasspy-2-5-venv-run-as-a-service-on-pi-zero/858

Thanks for help,

Regards,

[Feature Request] Bring back confirmation for training and restart

In 2.4 it would always ask me if I want to train now or later when I saved words, sentences. This is now gone and it trains directly instead. I really liked that feature because I could make changes in multiple places and then train only once, now I have to wait for training to finish for every change I make.

Restarting rhasspy is the same thing, once I click save in the settings tab it restarts. Most of the time that is useful but I actually managed to freeze my whole system by accidentally saving (and therefore restarting) while training was still running. Also I might want to just make a change, look at the advanced settings to see what it does and then undo the change again, or edit it further in the advanced settings, so having to restart two or more times in between is kinda annoying.

On a sidenote, some settings display a small red icon next to them after I change them (I am guessing to restart) but it restarts anyway once i click save, either the icon is not necessary or it wasn't intended to restart with every save.

Daenara

DialogManager not respecting the text field when asked to end a session.

When publishing to hermes/dialogueManager/endSession it looks like the text field defined in the spec isn't respected (i.e., doesn't lead to a TTS message).

Looks like the dataclass that's sinkholing this is here.

If no-one else wants to I can open a PR for this at some point, seems like a good way to get more familiar with the codebase.

WISH: HTTP api support multiple siteId for /api/text-to-speech

Actually, if we want to announce something in the house with all Rhasspy devices, we can send multiple requests to /api/text-to-speech?siteId=site1 then to site2 etc.

Problem is that each request wait for each device to have finished saying, so we have several seconds between each devices, the more devices /long sentence the more gap.

Would it be possible to use /api/text-to-speech?siteId=site1,site2,site3 to have all devices saying the sentence at same time ?

Thks

tiny issue in the documentation for venv

the documentation reads :

sudo apt-get install \
       python3 python3-dev python3-setuptools python3-pip python3-venv \
       git build-essential libatlas-base-dev swig portaudio19-dev
       supervisor mosquitto sox alsa-utils libgfortran4 \
       espeak flite libttspico-utils \
       perl curl patchelf ca-certificates

A backslash is missing on the third line ie:
git build-essential libatlas-base-dev swig portaudio19-dev <<<<<< HERE

The command becomes

sudo apt-get install \
       python3 python3-dev python3-setuptools python3-pip python3-venv \
       git build-essential libatlas-base-dev swig portaudio19-dev \
       supervisor mosquitto sox alsa-utils libgfortran4 \
       espeak flite libttspico-utils \
       perl curl patchelf ca-certificates

Device is not passed to aplay invocation for aplay sound system

It looks like the aplay invocation drops the device that's specified (for the USB speakers I'm using).

In my profile I have:

 "sounds": {
        "aplay": {
            "device": "plughw:3,0"
        },
        "system": "aplay"
    }

However this results in no sound being emitted, unlike 2.4 where these settings worked. Looking at the logs we see: rhasspyspeakers_cli_hermes: ['aplay', '-q', '-t', 'wav'], device isn't getting added.

It's due to a typo here (aplay vs arecord config parsing). I set my settings for ouput in the arecord section and it worked.

wrapper script get-rhasspy.sh error

With the script get-rhasspy.sh I have found a problem when executing it:
get-rhasspy.sh: 112: get-rhasspy.sh: Syntax error: "}" unexpected (expecting "then")

Inconsistent permissions of files in profile directory?

I'm running the 2.5 prerelease Docker container and I noticed that some of the files in my profile directory have no permissions for group and other, while most files have read permissions for group and other:

pi@rhasspy:~ $ ls -lah .config/rhasspy/profiles/en/                                                                                                                                                               
total 44M
drwxr-xr-x 3 root root 4.0K Mar  8 10:23 .
drwxr-xr-x 3 root root 4.0K Mar  7 14:48 ..
drwxr-xr-x 2 root root 4.0K Mar  7 19:16 acoustic_model
-rw-r--r-- 1 root root 3.1M Mar  7 19:16 base_dictionary.txt
-rw------- 1 root root  516 Mar  7 19:18 dictionary.txt
-rw-r--r-- 1 root root 2.1K Mar  8 10:23 docker-compose.yml
-rw-r--r-- 1 root root  40M Mar  7 19:16 g2p.fst
-rw-r--r-- 1 root root  14K Mar  7 19:18 intent.json
-rw------- 1 root root 5.2K Mar  7 19:18 language_model.txt
-rw-r--r-- 1 root root  473 Mar  8 10:23 profile.json
-rw-r--r-- 1 root root 2.2K Mar  8 10:23 supervisord.conf
-rw-r--r-- 1 root root 558K Mar  8 10:34 supervisord.log
-rw-r--r-- 1 root root    4 Mar  8 10:23 supervisord.pid
-rw-r--r-- 1 root root    0 Mar  7 19:18 unknown_words.txt

I don't know if this will result in a problem, but is this difference intentional?

Missing tzdata package in Docker image

Hello,
Is it possible to add tzdata in the rhasspy-voltron Docker image?
That would help to pass -e TZ=xxxxx in order to have Rhasspy logs showing the right timezone.

Wake/recorded/error sounds no longer play

I'm testing the new 2.5-pre version. I set up a master and satellite according to the Getting Started Guide using an external MQTT server, and the wake/recorded sounds were working well until your recent commit (1047c57) to move the feedback sounds to the dialogue system.

The Getting Started Guide says that I should enable Dialogue Management and set it to "Rhasspy" on the master and leave it disabled on the satellite when using MQTT. However, the guide reverses that if using the remote HTTP server method.

I found that if I used the remote HTTP server method, sounds worked. But it seemed like the external MQTT method was performing slightly faster for me.

Is this a bug or do I just need to reconfigure something now that you've moved the sounds to be handled by the dialogue system?

Unable to add the custom words

2 issues:

  1. When i guess a new word and try adding it through "Save Custom words", it does not add to the block below
  2. When I manually add the words and pronunciation as provided by the "Guess word", I get below errors. I have tried adding a custom wake words, and I suspect due to below it gives wake word "xxx" not found in the dictionary

Command 'fstcompile --keep_isymbols --keep_osymbols --isymbols=/tmp/tmpynenbyw9/isymbols.txt --osymbols=/tmp/tmpynenbyw9/osymbols.txt /tmp/tmpynenbyw9/graph.fst.txt "/tmp/tmpynenbyw9/graph.fst.fst"' returned non-zero exit status 127.

Also, here are the screenshots of 2.5 Pre version where there is no option to directly add the words like it is possible in 2.4.19. Even though the words can be "pronounced", they need to be manually added

image

Slots creation

Hello,
I have a problem creating slots.
I installed the docker version 2.5.0-pre. everything works normally. Profil : fr
When I want to create a slot nothing happens when I save. when I come back to the slots page it's empty. nothing is saved
Thanks for your help.
Have a good day
Best regards

Custom command not called

I posted this a while ago in the pre release forum topic but I thought actually creating an issue might be better. After migrating to 2.5 (both pre and release) my custom command script is not called anymore. I have it set up the same way as I did in 2.4 in my profile folder, the script is executable and I can run it from within the docker (after manually installing pip). I do not get any error in the rhasspy log but I can tell that my script does not run because I have my own log that should get a new entry in my log as soon as the script is called (directly after the imports).

Here are my settings:
image
I also tried without the curly brackets around the profile dir.

Here is what the log says when I recognize the intent with handle checked:
image

I also did tests in "productive" mode, meaning using a wakeword and then asking the question in case the checkbox is broken but the result was the same.

I do know that I can use mqtt directly but I try to be as modular as possible so I want to support every option available and also, since i just came from 2.4 I do not have a mqtt script written yet.

Daenara

Missing 2 required positional arguments: 'confidence' and 'raw_value'

Installed latest version:
Ideas ?
[ERROR:2020-04-02 16:25:57,676] rhasspyserver_hermes: on_message Traceback (most recent call last): File "/usr/lib/rhasspy-voltron/rhasspy-server-hermes/rhasspyserver_hermes/__init__.py", line 910, in on_message topic, payload, self.subscribed_types File "/usr/lib/rhasspy-voltron/rhasspy-hermes/rhasspyhermes/client.py", line 259, in parse_mqtt_message message = message_type.from_dict(json_payload) File "/usr/lib/rhasspy-voltron/rhasspy-hermes/rhasspyhermes/nlu.py", line 92, in from_dict message.slots = [Slot.from_dict(s) for s in slot_dicts] File "/usr/lib/rhasspy-voltron/rhasspy-hermes/rhasspyhermes/nlu.py", line 92, in <listcomp> message.slots = [Slot.from_dict(s) for s in slot_dicts] File "/usr/lib/rhasspy-voltron/rhasspy-hermes/rhasspyhermes/intent.py", line 82, in from_dict slot = Slot(**object_dict) TypeError: __init__() missing 2 required positional arguments: 'confidence' and 'raw_value' [ERROR:2020-04-02 16:25:57,606] rhasspyserver_hermes: on_message Traceback (most recent call last): File "/usr/lib/rhasspy-voltron/rhasspy-server-hermes/rhasspyserver_hermes/__init__.py", line 910, in on_message topic, payload, self.subscribed_types File "/usr/lib/rhasspy-voltron/rhasspy-hermes/rhasspyhermes/client.py", line 259, in parse_mqtt_message message = message_type.from_dict(json_payload) File "/usr/lib/rhasspy-voltron/rhasspy-hermes/rhasspyhermes/nlu.py", line 92, in from_dict message.slots = [Slot.from_dict(s) for s in slot_dicts] File "/usr/lib/rhasspy-voltron/rhasspy-hermes/rhasspyhermes/nlu.py", line 92, in <listcomp> message.slots = [Slot.from_dict(s) for s in slot_dicts] File "/usr/lib/rhasspy-voltron/rhasspy-hermes/rhasspyhermes/intent.py", line 82, in from_dict slot = Slot(**object_dict) TypeError: __init__() missing 2 required positional arguments: 'confidence' and 'raw_value'

wake word precise does not work

Hello,

even without a currently working log i can at least test if the wake words are recognized. After detecting the wake words the wake wav is played.
A stop wav or error wav is not heard systematically. Sometimes (rarely) several stop wavs follow follow in a row - a strange bug.

Anyway, porcupine works great - the wake word reacts and a wake sound is played. But with Snowboy and Precise I had no success - here I don't get any feedback from the wake word.

[Feature Request] Rework words tab

In 2.4 the words tab had the option to (sometimes) have the pronunciation read aloud, that is something that I think is really missing in 2.5. I personally can't actually imagine how it would pronounce a word with just what is written there, hearing it aloud would really help.

For example right now i am struggling because every time I say a sentence ending in "es" like "Wie spät ist es" it recognizes it as "Wie spät wird das Wetter" because it sees me pronouncing "es" as "das". I tried adding an entry for "es" with how I would think it should be pronounced by the system "s" but it did not help and I have no idea how it wants me to pronounce it now.

Also missing in my opinion is a button to have a guessed word added to the dictionary. I can't copy the output of the pronunciation so in addition of having to guess if it is the right one I would have to type it in manually.

M idea would be something like this:
image
(ignore the terribly drawn speaker icon in that)

That would allow each word already in there to be read out and changed if it doesn't sound right as well as a way to add new words after listening to them to pick the correct one.

Home Assistant intent handling is expecting intent response in wrong format

When you use Home Assistant as intent handler and set it to send intents to Home Assistant it doesn't process possible text response.

The response is processed with:
tts_text = response_dict.get("speech", {}).get("text", "")

But an example response form Home Assistant looks like this:
{'card': {}, 'speech': {'plain': {'extra_data': None, 'speech': 'text to speak'}}}

So it will never get the text from the response.

Also see: https://developers.home-assistant.io/docs/intent_firing

WebSocket API doesn't catch intents on base, only on satellite

I have this Node-RED flow gettime-flow.json to handle the GetTime intent.

Last time I tried this flow, this was with a basic setup of one Rhasspy machine and this worked: it could recognize the GetTime intent and reply.

Now I'm testing the same flow on a base/satellite MQTT setup:

  • Base: no audio, intent recognition enabled
  • Satellite: audio, Hermes MQTT to communicate with the base

If I enter the master's WebSocket URL in the websocket in node and I talk to the satellite, the websocket in node doesn't get the recognized intents. Only if I use the satellite's WebSocket URL and talk to the satellite, the recognized intents are coming in.

Of course for this to work I also need the siteID, which is missing (see #30), but this flow doesn't even get the recognized intent.

FileNotFoundError: [Errno 2] No such file or directory: 'profiles/defaults.json'

I installed rhasspy-voltron in a virtual environment, following the installation instructions, then I entered the virtual environment and ran rhasspy-voltron:

source .venv/bin/activate
./bin/rhasspy-voltron --profile en

This fails with:

Starting up...
DEBUG:__main__:Namespace(debug=True, docker_compose='', local_mqtt_port=12183, profile='en', supervisord_conf='supervisord.conf', system_profiles=PosixPath('profiles'), user_profiles=PosixPath('/home/pi/.config/rhasspy/profiles'))
DEBUG:__main__:Loading profile en
Traceback (most recent call last):
  File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/pi/rhasspy-voltron/rhasspy-supervisor/rhasspysupervisor/__main__.py", line 91, in <module>
    main()
  File "/home/pi/rhasspy-voltron/rhasspy-supervisor/rhasspysupervisor/__main__.py", line 69, in main
    profile = Profile(args.profile, args.system_profiles, args.user_profiles)
  File "/home/pi/rhasspy-voltron/rhasspy-profile/rhasspyprofile/__init__.py", line 46, in __init__
    self.load_profile()
  File "/home/pi/rhasspy-voltron/rhasspy-profile/rhasspyprofile/__init__.py", line 82, in load_profile
    with open(defaults_path, "r") as defaults_file:
FileNotFoundError: [Errno 2] No such file or directory: 'profiles/defaults.json'

Also reported on the forum.

Intent JSON has additional key - 'Kind' Its affecting HA (Version 2.5-pre)

I created a fairly simple sentence. The intents are properly detected. However, the generated JSON now generates a dict for the slot instead of a direct value. meaning has an extra key/value pair Kind:Unknown. This key "Kind" is being sent out along with the proper slot values - state in this case. However, since HA is not expecting this "kind" value, the automation in HA fails. Is this something introduce in past couple of days? I remember this was not the case few days earlier.

This is currently deviated from the 2.4.19. If this is a the new standard, please let us know so that we could change at the HA side

[ControlFan]
turn the fan (on|off|swing) {state}

{
"entities": [
{
"end": 15,
"entity": "state",
"kind": "Unknown",
"raw_end": 15,
"raw_start": 13,
"raw_value": "on",
"source": "state",
"start": 13,
"unit": "",
"value": "on"
}
],
"intent": {
"confidence": 0.9,
"name": "ControlFan"
},
"raw_text": "fan on",
"raw_tokens": [
"fan",
"on"
],
"recognize_seconds": 0.048003378000203156,
"slots": {
"state": "on"
},
"speech_confidence": 1,
"text": "turn the fan on",
"tokens": [
"turn",
"the",
"fan",
"on"
],
"wakewordId": ""
}

log is not available

Log is almost never displayed under Chrome and not under Firefox, the window "Rhasspy Log" remains empty. Only rarely a log is displayed, I did not fully understand the system. I think, if you have Rhasspy open in your browser and restart it via docker you will see a stream. But I was not able to repeat this in a reproducible way.

If you try to stream the log over a websocket (ws://IP:PORT/api/events/log), it stops at the status "Opening". This is the case for the following 2 extensions under Chrome: Simple Websocket Client, Browser Websocket Client

I also had problems with audio recording and playback - I couldn't get either of them to work. Unfortunately I cannot say more without log.

Missing pip

I had this problem with a pretty recent pre release and it is still happening in the release. I get a docker without pip installed.

I use a raspberry pi 4 with raspbian buster on it. In the dockerfile pip is installed in various places but my guess is that I fall into the balenalib/raspberry-pi-debian-python:3.7-buster-build as build-armv6 category and that for some reason does not include pip (anymore).

I looked up their dockerfiles and in the one just called raspberry-pi there is no mention of pip whereas it is explicitly installed in the raspberry-pi3 dockerfile they have.

Could you please add pip into that docker image so I don't have to install it manually each time?

Also I am not sure if that image contains the python setup tools but I did not test for that because so far I am not using them.

Daenara

siteid missing

Just tried to make a demonstration video for rhasspy 2.5 in venv and got stuck.
The latest version doesn't emit a site id in the json on the websocket /api/events/intent anymore - I though see the id in the console log.

This breaks a lot of setups. Any possibility to get this back?

2.5.0-pre docker: failed to register layer: no space left on device.

Hi,

I tried the docker install of 2.5.0-pre.
Before attempting to install I have a 32GB partition with 24GB free and the installation gets partway through installation before filling the disk and giving the error
docker: failed to register layer: no space left on device.

How much space is required for this install?

intents send to HA unreliably

Hi,
I have a situation where the the intents from Rhasspy are not reliably sent to HA.
Scenario 1: HA is running, Rhasspy is running - when all the certs are setup - the intent sending works and all the relevant automation triggers are activated.
Scenario 2: When HA is restarted, Rhasspy was still running, the Rhasspy connects to HA MQTT just fine, I could even see messages in hermes/intent/intentName. But HA never registers the input. Only after repeadely adding and removing the certs in Rhasspyt does this work. I am unable to replicate a consistent scenario
Scneario 3: When HA is running, Rhasspy is restarted. It works most of the time, but sometimes, it just fails. The MQTT connection is all fine and I would see all the message been sent over.

The above scenarios occur randomly and hence frustrating. The only error I see is below, it temporarily gets resolved when the path to certs are given. and later removed :-)

Sometimes even when I get the below error, the intents are sent to HA properly. thatswhy I stated in the subject very unreliable

[DEBUG:2020-04-04 13:41:30,906] rhasspyhomeassistant_hermes: https://localhost:8123/api/events/rhasspy_FanControl
[ERROR:2020-04-04 13:41:31,099] asyncio: SSL error in data received
protocol: <asyncio.sslproto.SSLProtocol object at 0xb5266150>
transport: <_SelectorSocketTransport fd=13 read=polling write=<idle, bufsize=0>>
Traceback (most recent call last):
  File "/usr/lib/python3.7/asyncio/sslproto.py", line 526, in data_received
    ssldata, appdata = self._sslpipe.feed_ssldata(data)
  File "/usr/lib/python3.7/asyncio/sslproto.py", line 207, in feed_ssldata
    self._sslobj.unwrap()
  File "/usr/lib/python3.7/ssl.py", line 767, in unwrap
    return self._sslobj.shutdown()
ssl.SSLError: [SSL: KRB5_S_INIT] application data after close notify (_ssl.c:2609)

Websocket Error

As soon as I add websocket connection from NodeRed I get this:

[ERROR:2020-03-27 23:58:34,434] rhasspyserver_hermes: BadRequest(400)
Traceback (most recent call last):
File "/usr/lib/rhasspy-voltron/.venv/lib/python3.7/site-packages/quart/app.py", line 1940, in full_dispatch_websocket
result = await self.preprocess_websocket(websocket_context)
File "/usr/lib/rhasspy-voltron/.venv/lib/python3.7/site-packages/quart/app.py", line 1968, in preprocess_websocket
result = await function()
File "/usr/lib/rhasspy-voltron/.venv/lib/python3.7/site-packages/quart_cors/init.py", line 297, in _apply_websocket_cors
abort(400)
File "/usr/lib/rhasspy-voltron/.venv/lib/python3.7/site-packages/quart/exceptions.py", line 199, in abort
raise error
quart.exceptions.BadRequest: BadRequest(400)
[ERROR:2020-03-27 23:58:31,429] rhasspyserver_hermes: BadRequest(400)
Traceback (most recent call last):
File "/usr/lib/rhasspy-voltron/.venv/lib/python3.7/site-packages/quart/app.py", line 1940, in full_dispatch_websocket
result = await self.preprocess_websocket(websocket_context)
File "/usr/lib/rhasspy-voltron/.venv/lib/python3.7/site-packages/quart/app.py", line 1968, in preprocess_websocket
result = await function()
File "/usr/lib/rhasspy-voltron/.venv/lib/python3.7/site-packages/quart_cors/init.py", line 297, in _apply_websocket_cors
abort(400)

disable audio playing did not work

For a test I've tried to disable the 'Audio Playing' first with the WEB interface and then by removing the 'sounds' entry within profile.json. Nothing of this worked so that I will still get always the beeps. Installation was a rhasspy-satellite venv.

cannot download Kaldi Profile

Here the error :

[ERROR:2020-03-23 23:27:36,879] rhasspyserver_hermes: NluError(error='Cannot connect to host localhost:5005 ssl:<ssl.SSLContext object at 0x7f8b99fb43a8> [Cannot assign requested address]', context='23d1c8f7-08c0-4e62-ad1a-1ff322173f66', siteId='default', sessionId='23d1c8f7-08c0-4e62-ad1a-1ff322173f66')

 [ERROR:2020-03-23 23:27:36,879] rhasspyserver_hermes: Cannot connect to host localhost:5005 ssl:<ssl.SSLContext object at 0x7f8b99fb43a8> [Cannot assign requested address]

 Traceback (most recent call last):

   File "/usr/lib/rhasspy-voltron/.venv/lib/python3.6/site-packages/quart/app.py", line 1471, in full_dispatch_request
 
     result = await self.dispatch_request(request_context)
 
   File "/usr/lib/rhasspy-voltron/.venv/lib/python3.6/site-packages/quart/app.py", line 1519, in dispatch_request
 
 
     return await handler(**request_.view_args)
 
 
   File "/usr/lib/rhasspy-voltron/rhasspy-server-hermes/rhasspyserver_hermes/__main__.py", line 1145, in api_train
 
     result = await core.train()
 
   File "/usr/lib/rhasspy-voltron/rhasspy-server-hermes/rhasspyserver_hermes/__init__.py", line 391, in train
     raise TrainingFailedException(reason=nlu_response.error)

  rhasspyserver_hermes.TrainingFailedException: Cannot connect to host localhost:5005 ssl:<ssl.SSLContext object at 0x7f8b99fb43a8> [Cannot assign requested address]

picoTTS - voice en-GB

Hi trivial I know...

Trying to use the en-GB voice in picoTTS but get a female American voice. Settings look correct.
Pi 3B+, Buster, Rhasspy installed using Docker.

"text_to_speech": {
    "disable_wake": true,
    "picotts": {
        "language": "en_GB"
    },
    "system": "picotts",
    "wavenet": {
        "samplerate": 22050
    }
},

Keep up the good work!

venv does not work on arch linux (opengram and precise not installed)

I am trying out Rhasspy 2.5 on my manjaro desktop - there is no support for libngram for Arch and Manjaro (https://aur.archlinux.org/packages/opengrm-ngram/ is pretty broken since 2016).
I copied manually with ./install-opengrm.sh ../download/opengrm-1.3.4-amd64.tar.gz ../.venv/tools/ the relevant files from that archive into the tools directory, and added tools and tools/kaldi to the path.

Now, it works - before openfst was always crashing when training.

Shouldn't it be possible to install that automatically? It's downloaded by default - or is there a trick to trigger its installation?

Allow both HTTP and HTTPS

I have a setup with Node-RED and Rhasspy on the same Raspberry Pi, each in their own Docker container. I'd like to let Node-RED and Rhasspy communicate over unencrypted HTTP (WebSockets) because they're on the same machine anyway, while I use Rhasspy's web interface over HTTPS from my laptop.

Currently if I configure Rhasspy to use HTTPS, Node-RED can't communicate with Rhasspy over HTTP on Docker's internal network.

A solution would be that I could configure Rhasspy to:

  • listen on HTTP on port X
  • listen on HTTPS on port Y

And then I only expose port Y in the Docker container to outside, while I still can connect to port X from other containers on the same machine.

Fuzzywuzzy does not recognize intents

Just as the title says, if I select fuzzywuzzy it does not recognize intents. I do not get any error, just IntentNotRecognized. The same intents work fine if I change to fsticuffs instead.

System is a pi4 2gb with raspbian buster and rhasspy in a docker.

I thought about trying to train with fuzzywuzzy selected but for some strange reason I always get a timeout when I try.
[ERROR:2020-06-06 14:58:58,219] rhasspyserver_hermes: Traceback (most recent call last): File "/usr/lib/rhasspy/lib/python3.7/site-packages/quart/app.py", line 1821, in full_dispatch_request result = await self.dispatch_request(request_context) File "/usr/lib/rhasspy/lib/python3.7/site-packages/quart/app.py", line 1869, in dispatch_request return await handler(**request_.view_args) File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspyserver_hermes/__main__.py", line 1215, in api_train result = await core.train() File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspyserver_hermes/__init__.py", line 395, in train timeout_seconds=self.training_timeout_seconds, File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspyserver_hermes/__init__.py", line 898, in publish_wait result_awaitable, timeout=timeout_seconds File "/usr/lib/python3.7/asyncio/tasks.py", line 449, in wait_for raise futures.TimeoutError() concurrent.futures._base.TimeoutError [DEBUG:2020-06-06 14:49:51,563] rhasspyserver_hermes: Handling AsrTrainSuccess (topic=rhasspy/asr/pi-hime/trainSuccess, id=1fdf51f3-05b6-4d35-a44c-ed5622d3a3ca) [DEBUG:2020-06-06 14:48:58,216] rhasspyserver_hermes: Publishing 5221 bytes(s) to rhasspy/nlu/pi-hime/train [DEBUG:2020-06-06 14:48:58,216] rhasspyserver_hermes: -> NluTrain [DEBUG:2020-06-06 14:48:58,209] rhasspyserver_hermes: Publishing 5221 bytes(s) to rhasspy/asr/pi-hime/train [DEBUG:2020-06-06 14:48:58,209] rhasspyserver_hermes: -> AsrTrain [DEBUG:2020-06-06 14:48:58,201] rhasspyserver_hermes: Subscribed to hermes/error/nlu [DEBUG:2020-06-06 14:48:58,200] rhasspyserver_hermes: Subscribed to rhasspy/nlu/pi-hime/trainSuccess [DEBUG:2020-06-06 14:48:58,199] rhasspyserver_hermes: Subscribed to hermes/error/asr [DEBUG:2020-06-06 14:48:58,198] rhasspyserver_hermes: Subscribed to rhasspy/asr/pi-hime/trainSuccess [DEBUG:2020-06-06 14:48:58,197] rhasspyserver_hermes: Finished writing /profiles/de/intent_graph.pickle.gz [DEBUG:2020-06-06 14:48:57,455] rhasspyserver_hermes: Writing /profiles/de/intent_graph.pickle.gz [DEBUG:2020-06-06 14:48:56,550] rhasspynlu.slots: Running program for slot rhasspy_weather_slots/named_times: ['/profiles/de/slot_programs/rhasspy_weather_slots/named_times'] [DEBUG:2020-06-06 14:48:56,437] rhasspynlu.slots: Running program for slot rhasspy/number,2,100,1: ['/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspyprofile/profiles/de/slot_programs/rhasspy/number', '2', '100', '1'] [DEBUG:2020-06-06 14:48:55,911] rhasspynlu.slots: Running program for slot rhasspy_weather_slots/temperatures: ['/profiles/de/slot_programs/rhasspy_weather_slots/temperatures'] [DEBUG:2020-06-06 14:48:55,814] rhasspynlu.slots: Running program for slot rhasspy/number,0,59,1: ['/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspyprofile/profiles/de/slot_programs/rhasspy/number', '0', '59', '1'] [DEBUG:2020-06-06 14:48:55,285] rhasspynlu.slots: Running program for slot rhasspy_weather_slots/items: ['/profiles/de/slot_programs/rhasspy_weather_slots/items'] [DEBUG:2020-06-06 14:48:55,171] rhasspynlu.slots: Running program for slot rhasspy/number,0,31,1: ['/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspyprofile/profiles/de/slot_programs/rhasspy/number', '0', '31', '1'] [DEBUG:2020-06-06 14:48:55,169] rhasspynlu.slots: Loading slot rhasspy/days from /usr/lib/rhasspy/lib/python3.7/site-packages/rhasspyprofile/profiles/de/slots/rhasspy/days [DEBUG:2020-06-06 14:48:55,068] rhasspynlu.slots: Running program for slot rhasspy/number,0,24,1: ['/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspyprofile/profiles/de/slot_programs/rhasspy/number', '0', '24', '1'] [DEBUG:2020-06-06 14:48:54,964] rhasspynlu.slots: Running program for slot rhasspy/number,0,7,1: ['/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspyprofile/profiles/de/slot_programs/rhasspy/number', '0', '7', '1'] [DEBUG:2020-06-06 14:48:54,354] rhasspynlu.slots: Running program for slot rhasspy_weather_slots/named_days: ['/profiles/de/slot_programs/rhasspy_weather_slots/named_days'] [DEBUG:2020-06-06 14:48:54,352] rhasspynlu.slots: Loading slot state_on_off from /profiles/de/slots/state_on_off [DEBUG:2020-06-06 14:48:53,794] rhasspynlu.slots: Running program for slot rhasspy_weather_slots/conditions: ['/profiles/de/slot_programs/rhasspy_weather_slots/conditions'] [DEBUG:2020-06-06 14:48:53,793] rhasspynlu.slots: Loading slot rhasspy/months from /usr/lib/rhasspy/lib/python3.7/site-packages/rhasspyprofile/profiles/de/slots/rhasspy/months [DEBUG:2020-06-06 14:48:53,792] rhasspynlu.slots: Loading slot lights from /profiles/de/slots/lights [DEBUG:2020-06-06 14:48:53,773] rhasspynlu.ini_jsgf: Loaded ini file [DEBUG:2020-06-06 14:48:53,770] rhasspyserver_hermes: Generating intent graph [DEBUG:2020-06-06 14:48:53,768] rhasspyserver_hermes: Loading sentences from [PosixPath('/profiles/de/sentences.ini')] [INFO:2020-06-06 14:48:53,766] rhasspyserver_hermes: Starting training

As soon as I switch back to fsticuffs training works again.

Daenara

Training Download fails

Error log:
[ERROR:2020-03-21 18:21:58,957] rhasspyserver_hermes:
Traceback (most recent call last):
File "/usr/lib/rhasspy-voltron/.venv/lib/python3.6/site-packages/quart/app.py", line 1471, in full_dispatch_request
result = await self.dispatch_request(request_context)
File "/usr/lib/rhasspy-voltron/.venv/lib/python3.6/site-packages/quart/app.py", line 1519, in dispatch_request
return await handler(**request_.view_args)
File "/usr/lib/rhasspy-voltron/rhasspy-server-hermes/rhasspyserver_hermes/main.py", line 1137, in api_train
result = await core.train()
File "/usr/lib/rhasspy-voltron/rhasspy-server-hermes/rhasspyserver_hermes/init.py", line 367, in train
timeout_seconds=self.training_timeout_seconds,
File "/usr/lib/rhasspy-voltron/rhasspy-server-hermes/rhasspyserver_hermes/init.py", line 832, in publish_wait
_, result = await asyncio.wait_for(result_awaitable, timeout_seconds)
File "/usr/lib/python3.6/asyncio/tasks.py", line 362, in wait_for
raise futures.TimeoutError()
concurrent.futures._base.TimeoutError

Network port for docker

Hi,
I have installed the docker container under a VM in proxmox.
If I run it with port 12101 I can connect to the web interface but if I specify something else, in this case 13101, it can't connect. If I then stop it and specify 12101 again it is OK.

Netstat shows the following when I change to 13101

sudo netstat -aop | grep 13101
tcp6 0 0 [::]:13101 [::]:* LISTEN 14561/docker-proxy off (0.00/0/0)

and this for port 12101
sudo netstat -aop | grep 12101
tcp6 0 0 [::]:12101 [::]:* LISTEN 14032/docker-proxy off (0.00/0/0)

snowboy not working

hey there

on the latest docker image snowboy isn t working anymore

31/05/2020
Digest: sha256:ea229eccab38d6d7a112a4feaef47b903664971a5d8fa4750ed6b767728e8ed3
Status: Image is up to date for rhasspy/rhasspy:2.5.0-pre

here's the relevant docker log:

2020-05-30 11:01:37,077 WARN received SIGHUP indicating restart request
2020-05-30 11:01:37,078 INFO waiting for microphone, speakers to die
2020-05-30 11:01:38,096 INFO stopped: speakers (terminated by SIGTERM)
2020-05-30 11:01:38,110 INFO stopped: microphone (terminated by SIGTERM)
2020-05-30 11:01:38,157 CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file. If you intend to run as root, you can set user=root in the config file to avoid this message.
2020-05-30 11:01:38,159 INFO supervisord started with pid 144
2020-05-30 11:01:39,173 INFO spawned: 'microphone' with pid 625
2020-05-30 11:01:39,188 INFO spawned: 'speakers' with pid 626
2020-05-30 11:01:39,204 INFO spawned: 'wake_word' with pid 627
[DEBUG:2020-05-30 11:01:40,110] rhasspyspeakers_cli_hermes: Namespace(debug=True, host='192.168.1.100', list_command='aplay -L', log_format='[%(levelname)s:%(asctime)s] %(name)s: %(message)s', password='EDITED', play_command='aplay -q -t wav', port=1883, site_id=['salon'], tls=False, tls_ca_certs=None, tls_cert_reqs='CERT_REQUIRED', tls_certfile=None, tls_ciphers=None, tls_keyfile=None, tls_version=None, username='EDITED')
[DEBUG:2020-05-30 11:01:40,115] asyncio: Using selector: EpollSelector
[DEBUG:2020-05-30 11:01:40,117] rhasspyspeakers_cli_hermes: Connecting to 192.168.1.100:1883
[DEBUG:2020-05-30 11:01:40,132] asyncio: Using selector: EpollSelector
[DEBUG:2020-05-30 11:01:40,135] rhasspyspeakers_cli_hermes: Connected to MQTT broker
[DEBUG:2020-05-30 11:01:40,137] rhasspyspeakers_cli_hermes: Subscribed to hermes/audioServer/salon/playBytes/#
[DEBUG:2020-05-30 11:01:40,139] rhasspyspeakers_cli_hermes: Subscribed to rhasspy/audioServer/getDevices
[DEBUG:2020-05-30 11:01:40,141] rhasspyspeakers_cli_hermes: Subscribed to hermes/audioServer/toggleOn
[DEBUG:2020-05-30 11:01:40,143] rhasspyspeakers_cli_hermes: Subscribed to hermes/audioServer/toggleOff
[DEBUG:2020-05-30 11:01:40,185] rhasspywake_snowboy_hermes: Namespace(debug=True, host='192.168.1.100', log_format='[%(levelname)s:%(asctime)s] %(name)s: %(message)s', model=[['jarvis.umdl', '0.5,0.5', '1.0', 'True']], model_dir=['/profiles/fr/snowboy'], password='EDITED', port=1883, site_id=['salon'], stdin_audio=False, tls=False, tls_ca_certs=None, tls_cert_reqs='CERT_REQUIRED', tls_certfile=None, tls_ciphers=None, tls_keyfile=None, tls_version=None, udp_audio=[['localhost', '12202', 'salon']], username='EDITED', wakeword_id=None)
2020-05-30 11:01:40,186 INFO success: microphone entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2020-05-30 11:01:40,187 INFO success: speakers entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[DEBUG:2020-05-30 11:01:40,186] rhasspywake_snowboy_hermes: Loading model from jarvis.umdl
[DEBUG:2020-05-30 11:01:40,196] asyncio: Using selector: EpollSelector
2020-05-30 11:01:40,198 INFO success: wake_word entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[DEBUG:2020-05-30 11:01:40,202] rhasspywake_snowboy_hermes: Listening for audio on UDP localhost:12202
Traceback (most recent call last):
File "/usr/lib/rhasspy/bin/rhasspy-wake-snowboy-hermes", line 8, in
sys.exit(main())
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/main.py", line 138, in main
hermes.load_detectors()
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 126, in load_detectors
assert model.model_path.is_file(), f"Missing {model.model_path}"
AssertionError: Missing jarvis.umdl
2020-05-30 11:01:40,375 INFO exited: wake_word (exit status 1; not expected)
[DEBUG:2020-05-30 11:01:40,656] rhasspymicrophone_cli_hermes: Namespace(channels=1, debug=True, host='192.168.1.100', list_command='arecord -L', log_format='[%(levelname)s:%(asctime)s] %(name)s: %(message)s', output_site_id=None, password='EDITED', port=1883, record_command='arecord -q -r 16000 -f S16_LE -c 1 -t raw -D sysdefault:CARD=CameraB409241', sample_rate=16000, sample_width=2, site_id=['salon'], test_command='arecord -q -D {} -r 16000 -f S16_LE -c 1 -t raw', tls=False, tls_ca_certs=None, tls_cert_reqs='CERT_REQUIRED', tls_certfile=None, tls_ciphers=None, tls_keyfile=None, tls_version=None, udp_audio_host='127.0.0.1', udp_audio_port=12202, username='EDITED')
2020-05-30 11:01:40,664 INFO spawned: 'wake_word' with pid 637
[DEBUG:2020-05-30 11:01:40,660] asyncio: Using selector: EpollSelector
[DEBUG:2020-05-30 11:01:40,662] rhasspymicrophone_cli_hermes: Audio will also be sent to UDP 127.0.0.1:12202
[DEBUG:2020-05-30 11:01:40,667] rhasspymicrophone_cli_hermes: ['arecord', '-q', '-r', '16000', '-f', 'S16_LE', '-c', '1', '-t', 'raw', '-D', 'sysdefault:CARD=CameraB409241']
[DEBUG:2020-05-30 11:01:40,669] rhasspymicrophone_cli_hermes: Connecting to 192.168.1.100:1883
[DEBUG:2020-05-30 11:01:40,690] asyncio: Using selector: EpollSelector
[DEBUG:2020-05-30 11:01:40,692] rhasspymicrophone_cli_hermes: Connected to MQTT broker
[DEBUG:2020-05-30 11:01:40,693] rhasspymicrophone_cli_hermes: Recording audio
[DEBUG:2020-05-30 11:01:40,696] rhasspymicrophone_cli_hermes: Subscribed to hermes/audioServer/toggleSummaryOn
[DEBUG:2020-05-30 11:01:40,698] rhasspymicrophone_cli_hermes: Subscribed to hermes/asr/startListening
[DEBUG:2020-05-30 11:01:40,701] rhasspymicrophone_cli_hermes: Subscribed to hermes/asr/stopListening
[DEBUG:2020-05-30 11:01:40,703] rhasspymicrophone_cli_hermes: Subscribed to rhasspy/audioServer/getDevices
[DEBUG:2020-05-30 11:01:40,705] rhasspymicrophone_cli_hermes: Subscribed to hermes/audioServer/toggleSummaryOff
[DEBUG:2020-05-30 11:01:41,472] rhasspywake_snowboy_hermes: Namespace(debug=True, host='192.168.1.100', log_format='[%(levelname)s:%(asctime)s] %(name)s: %(message)s', model=[['jarvis.umdl', '0.5,0.5', '1.0', 'True']], model_dir=['/profiles/fr/snowboy'], password='EDITED', port=1883, site_id=['salon'], stdin_audio=False, tls=False, tls_ca_certs=None, tls_cert_reqs='CERT_REQUIRED', tls_certfile=None, tls_ciphers=None, tls_keyfile=None, tls_version=None, udp_audio=[['localhost', '12202', 'salon']], username='EDITED', wakeword_id=None)
[DEBUG:2020-05-30 11:01:41,474] rhasspywake_snowboy_hermes: Loading model from jarvis.umdl
[DEBUG:2020-05-30 11:01:41,478] asyncio: Using selector: EpollSelector
[DEBUG:2020-05-30 11:01:41,483] rhasspywake_snowboy_hermes: Listening for audio on UDP localhost:12202
Traceback (most recent call last):
File "/usr/lib/rhasspy/bin/rhasspy-wake-snowboy-hermes", line 8, in
sys.exit(main())
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/main.py", line 138, in main
[ERROR:2020-05-30 11:01:41,512] rhasspywake_snowboy_hermes: detection_thread_proc
Traceback (most recent call last):
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 221, in detection_thread_proc
self.load_detectors()
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 126, in load_detectors
assert model.model_path.is_file(), f"Missing {model.model_path}"
AssertionError: Missing jarvis.umdl
hermes.load_detectors()
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 126, in load_detectors
assert model.model_path.is_file(), f"Missing {model.model_path}"
AssertionError: Missing jarvis.umdl
2020-05-30 11:01:41,638 INFO exited: wake_word (exit status 1; not expected)
2020-05-30 11:01:42,646 INFO spawned: 'wake_word' with pid 646
[DEBUG:2020-05-30 11:01:43,646] rhasspywake_snowboy_hermes: Namespace(debug=True, host='192.168.1.100', log_format='[%(levelname)s:%(asctime)s] %(name)s: %(message)s', model=[['jarvis.umdl', '0.5,0.5', '1.0', 'True']], model_dir=['/profiles/fr/snowboy'], password='EDITED', port=1883, site_id=['salon'], stdin_audio=False, tls=False, tls_ca_certs=None, tls_cert_reqs='CERT_REQUIRED', tls_certfile=None, tls_ciphers=None, tls_keyfile=None, tls_version=None, udp_audio=[['localhost', '12202', 'salon']], username='EDITED', wakeword_id=None)
2020-05-30 11:01:43,648 INFO success: wake_word entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[DEBUG:2020-05-30 11:01:43,649] rhasspywake_snowboy_hermes: Loading model from jarvis.umdl
[DEBUG:2020-05-30 11:01:43,653] asyncio: Using selector: EpollSelector
[DEBUG:2020-05-30 11:01:43,657] rhasspywake_snowboy_hermes: Listening for audio on UDP localhost:12202
Traceback (most recent call last):
File "/usr/lib/rhasspy/bin/rhasspy-wake-snowboy-hermes", line 8, in
sys.exit(main())
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/main.py", line 138, in main
[ERROR:2020-05-30 11:01:43,687] rhasspywake_snowboy_hermes: detection_thread_proc
Traceback (most recent call last):
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 221, in detection_thread_proc
self.load_detectors()
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 126, in load_detectors
assert model.model_path.is_file(), f"Missing {model.model_path}"
AssertionError: Missing jarvis.umdl
hermes.load_detectors()
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 126, in load_detectors
assert model.model_path.is_file(), f"Missing {model.model_path}"
AssertionError: Missing jarvis.umdl
2020-05-30 11:01:43,812 INFO exited: wake_word (exit status 1; not expected)
2020-05-30 11:01:44,819 INFO spawned: 'wake_word' with pid 651
[DEBUG:2020-05-30 11:01:45,671] rhasspywake_snowboy_hermes: Namespace(debug=True, host='192.168.1.100', log_format='[%(levelname)s:%(asctime)s] %(name)s: %(message)s', model=[['jarvis.umdl', '0.5,0.5', '1.0', 'True']], model_dir=['/profiles/fr/snowboy'], password='EDITED', port=1883, site_id=['salon'], stdin_audio=False, tls=False, tls_ca_certs=None, tls_cert_reqs='CERT_REQUIRED', tls_certfile=None, tls_ciphers=None, tls_keyfile=None, tls_version=None, udp_audio=[['localhost', '12202', 'salon']], username='EDITED', wakeword_id=None)
[DEBUG:2020-05-30 11:01:45,673] rhasspywake_snowboy_hermes: Loading model from jarvis.umdl
[DEBUG:2020-05-30 11:01:45,678] asyncio: Using selector: EpollSelector
[DEBUG:2020-05-30 11:01:45,684] rhasspywake_snowboy_hermes: Listening for audio on UDP localhost:12202
Traceback (most recent call last):
File "/usr/lib/rhasspy/bin/rhasspy-wake-snowboy-hermes", line 8, in
sys.exit(main())
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/main.py", line 138, in main
[ERROR:2020-05-30 11:01:45,715] rhasspywake_snowboy_hermes: detection_thread_proc
Traceback (most recent call last):
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 221, in detection_thread_proc
self.load_detectors()
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 126, in load_detectors
assert model.model_path.is_file(), f"Missing {model.model_path}"
AssertionError: Missing jarvis.umdl
hermes.load_detectors()
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 126, in load_detectors
assert model.model_path.is_file(), f"Missing {model.model_path}"
AssertionError: Missing jarvis.umdl
2020-05-30 11:01:45,844 INFO success: wake_word entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2020-05-30 11:01:45,844 INFO exited: wake_word (exit status 1; not expected)
2020-05-30 11:01:46,851 INFO spawned: 'wake_word' with pid 656
[DEBUG:2020-05-30 11:01:47,610] rhasspywake_snowboy_hermes: Namespace(debug=True, host='192.168.1.100', log_format='[%(levelname)s:%(asctime)s] %(name)s: %(message)s', model=[['jarvis.umdl', '0.5,0.5', '1.0', 'True']], model_dir=['/profiles/fr/snowboy'], password='EDITED', port=1883, site_id=['salon'], stdin_audio=False, tls=False, tls_ca_certs=None, tls_cert_reqs='CERT_REQUIRED', tls_certfile=None, tls_ciphers=None, tls_keyfile=None, tls_version=None, udp_audio=[['localhost', '12202', 'salon']], username='EDITED', wakeword_id=None)
[DEBUG:2020-05-30 11:01:47,611] rhasspywake_snowboy_hermes: Loading model from jarvis.umdl
[DEBUG:2020-05-30 11:01:47,616] asyncio: Using selector: EpollSelector
[DEBUG:2020-05-30 11:01:47,622] rhasspywake_snowboy_hermes: Listening for audio on UDP localhost:12202
Traceback (most recent call last):
File "/usr/lib/rhasspy/bin/rhasspy-wake-snowboy-hermes", line 8, in
sys.exit(main())
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/main.py", line 138, in main
[ERROR:2020-05-30 11:01:47,652] rhasspywake_snowboy_hermes: detection_thread_proc
Traceback (most recent call last):
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 221, in detection_thread_proc
self.load_detectors()
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 126, in load_detectors
assert model.model_path.is_file(), f"Missing {model.model_path}"
AssertionError: Missing jarvis.umdl
hermes.load_detectors()
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 126, in load_detectors
assert model.model_path.is_file(), f"Missing {model.model_path}"
AssertionError: Missing jarvis.umdl
2020-05-30 11:01:47,777 INFO exited: wake_word (exit status 1; not expected)
2020-05-30 11:01:48,784 INFO spawned: 'wake_word' with pid 661
[DEBUG:2020-05-30 11:01:49,596] rhasspywake_snowboy_hermes: Namespace(debug=True, host='192.168.1.100', log_format='[%(levelname)s:%(asctime)s] %(name)s: %(message)s', model=[['jarvis.umdl', '0.5,0.5', '1.0', 'True']], model_dir=['/profiles/fr/snowboy'], password='EDITED', port=1883, site_id=['salon'], stdin_audio=False, tls=False, tls_ca_certs=None, tls_cert_reqs='CERT_REQUIRED', tls_certfile=None, tls_ciphers=None, tls_keyfile=None, tls_version=None, udp_audio=[['localhost', '12202', 'salon']], username='EDITED', wakeword_id=None)
[DEBUG:2020-05-30 11:01:49,597] rhasspywake_snowboy_hermes: Loading model from jarvis.umdl
[DEBUG:2020-05-30 11:01:49,601] asyncio: Using selector: EpollSelector
[DEBUG:2020-05-30 11:01:49,622] rhasspywake_snowboy_hermes: Listening for audio on UDP localhost:12202
Traceback (most recent call last):
File "/usr/lib/rhasspy/bin/rhasspy-wake-snowboy-hermes", line 8, in
sys.exit(main())
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/main.py", line 138, in main
[ERROR:2020-05-30 11:01:49,636] rhasspywake_snowboy_hermes: detection_thread_proc
Traceback (most recent call last):
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 221, in detection_thread_proc
self.load_detectors()
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 126, in load_detectors
assert model.model_path.is_file(), f"Missing {model.model_path}"
AssertionError: Missing jarvis.umdl
hermes.load_detectors()
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 126, in load_detectors
assert model.model_path.is_file(), f"Missing {model.model_path}"
AssertionError: Missing jarvis.umdl
2020-05-30 11:01:49,758 INFO exited: wake_word (exit status 1; not expected)
2020-05-30 11:01:51,767 INFO spawned: 'wake_word' with pid 666
[DEBUG:2020-05-30 11:01:52,522] rhasspywake_snowboy_hermes: Namespace(debug=True, host='192.168.1.100', log_format='[%(levelname)s:%(asctime)s] %(name)s: %(message)s', model=[['jarvis.umdl', '0.5,0.5', '1.0', 'True']], model_dir=['/profiles/fr/snowboy'], password='EDITED', port=1883, site_id=['salon'], stdin_audio=False, tls=False, tls_ca_certs=None, tls_cert_reqs='CERT_REQUIRED', tls_certfile=None, tls_ciphers=None, tls_keyfile=None, tls_version=None, udp_audio=[['localhost', '12202', 'salon']], username='EDITED', wakeword_id=None)
[DEBUG:2020-05-30 11:01:52,523] rhasspywake_snowboy_hermes: Loading model from jarvis.umdl
[DEBUG:2020-05-30 11:01:52,527] asyncio: Using selector: EpollSelector
[DEBUG:2020-05-30 11:01:52,532] rhasspywake_snowboy_hermes: Listening for audio on UDP localhost:12202
Traceback (most recent call last):
File "/usr/lib/rhasspy/bin/rhasspy-wake-snowboy-hermes", line 8, in
sys.exit(main())
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/main.py", line 138, in main
hermes.load_detectors()
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 126, in load_detectors
assert model.model_path.is_file(), f"Missing {model.model_path}"
AssertionError: Missing jarvis.umdl
[ERROR:2020-05-30 11:01:52,562] rhasspywake_snowboy_hermes: detection_thread_proc
Traceback (most recent call last):
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 221, in detection_thread_proc
self.load_detectors()
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 126, in load_detectors
assert model.model_path.is_file(), f"Missing {model.model_path}"
AssertionError: Missing jarvis.umdl
2020-05-30 11:01:52,685 INFO exited: wake_word (exit status 1; not expected)
2020-05-30 11:01:55,695 INFO spawned: 'wake_word' with pid 671
[DEBUG:2020-05-30 11:01:56,515] rhasspywake_snowboy_hermes: Namespace(debug=True, host='192.168.1.100', log_format='[%(levelname)s:%(asctime)s] %(name)s: %(message)s', model=[['jarvis.umdl', '0.5,0.5', '1.0', 'True']], model_dir=['/profiles/fr/snowboy'], password='EDITED', port=1883, site_id=['salon'], stdin_audio=False, tls=False, tls_ca_certs=None, tls_cert_reqs='CERT_REQUIRED', tls_certfile=None, tls_ciphers=None, tls_keyfile=None, tls_version=None, udp_audio=[['localhost', '12202', 'salon']], username='EDITED', wakeword_id=None)
[DEBUG:2020-05-30 11:01:56,518] rhasspywake_snowboy_hermes: Loading model from jarvis.umdl
[DEBUG:2020-05-30 11:01:56,522] asyncio: Using selector: EpollSelector
[DEBUG:2020-05-30 11:01:56,545] rhasspywake_snowboy_hermes: Listening for audio on UDP localhost:12202
Traceback (most recent call last):
File "/usr/lib/rhasspy/bin/rhasspy-wake-snowboy-hermes", line 8, in
sys.exit(main())
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/main.py", line 138, in main
hermes.load_detectors()
File "/usr/lib/rhasspy/lib/python3.7/site-packages/rhasspywake_snowboy_hermes/init.py", line 126, in load_detectors
assert model.model_path.is_file(), f"Missing {model.model_path}"
AssertionError: Missing jarvis.umdl
2020-05-30 11:01:56,679 INFO exited: wake_word (exit status 1; not expected)
2020-05-30 11:01:57,681 INFO gave up: wake_word entered FATAL state, too many start retries too quickly

Bug Matrixvoice speaker rhasspy speak

Speaker on matrix voice and rhasspy is good configured when i work on wake word i have sound beep_... . wav, but when i want to use tts with picotts or espeak i have an error:

AudioServerException: Command '['aplay', '-q', '-t', 'wav', '-D', 'hw:CARD=MATRIXIOSOUND,DEV=1']' returned non-zero exit status 1.

Pi 3B+, Buster, Rhasspy installed using Docker.

cannot stat 'rhasspy-voltron/rhasspy-server-hermes/web/docs'

What happened?

make install failed with the following error message:

cp: cannot stat '/home/pi/rhasspy-voltron/rhasspy-server-hermes/web/docs': No such file or directory
make: *** [Makefile:153: install-rhasspy] Error 1

Steps to reproduce

  1. Make sure you have a clean repository (that goes for your submodules too!)
    # Heads up: The following commands will DELETE ALL UNCOMMITTED CHANGES!
    git clean -fdx && git reset --hard
    git submodule foreach git clean -fdx
    git submodule foreach git reset --hard
  2. ./configure --enable-in-place RHASSPY_LANGUAGE=de
  3. make
  4. make install

My environment

Device: Raspberry Pi 3B+
OS: Raspbian 10 (buster)
Kernel: Linux 4.19.118-v7+
HEAD at: 8e9943c

My generated Makefile
# Makefile.in
#
# Copyright © 2012, 2013 Brandon Invergo <[email protected]>
#
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.  This file is offered as-is,
# without any warranty.

# List whatever files you want to include in your source distribution here.
# You can include whole directories but note that *everything* under that
# directory will be included
DISTFILES = PKG-INFO Makefile.in configure setup.py install-sh

DESTDIR =
PACKAGE_BUGREPORT = [email protected]
PACKAGE_NAME = rhasspy
PACKAGE_STRING = rhasspy 2.5.0
PACKAGE_TARNAME = rhasspy
PACKAGE_DISTNAME = ${PACKAGE_NAME}-${PACKAGE_VERSION}
PACKAGE_URL =
PACKAGE_VERSION = 2.5.0
PATH_SEPARATOR = :
PYTHON = /usr/bin/python3
VIRTUALENV = yes
SHELL = /bin/bash
MKDIR_P = /bin/mkdir -p
INSTALL = /usr/bin/install -c
INSTALL_PROGRAM = ${INSTALL}
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_SCRIPT = ${INSTALL}
exec_prefix = ${prefix}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
prefix = /home/pi/rhasspy-voltron/.venv
srcdir = /home/pi/rhasspy-voltron
datadir = ${datarootdir}
datarootdir = ${prefix}/share
pkgdatadir = $(datadir)/rhasspy
pkgincludedir = $(includedir)/rhasspy

# -----------------------------------------------------------------------------
# Dependencies
# -----------------------------------------------------------------------------

BUILD_DIR ?= $(srcdir)/build
DOWNLOAD_DIR ?= $(srcdir)/download
DO_DOWNLOAD ?= curl -sSfL -o

DOCKER_ARCH = armv7

ENABLE_OPENGRM = yes
OPENGRM_ARCH = @OPENGRM_ARCH@
OPENGRM_FROM = prebuilt
OPENGRM_PRE_FILE = $(DOWNLOAD_DIR)/opengrm-1.3.4_$(DOCKER_ARCH).tar.gz
OPENGRM_SRC_FILE = $(DOWNLOAD_DIR)/opengrm-ngram-1.3.4.tar.gz
OPENFST_SRC_FILE = $(DOWNLOAD_DIR)/openfst-1.6.9.tar.gz

ENABLE_PHONETISAURUS = yes
PHONETISAURUS_FROM = prebuilt
PHONETISAURUS_PRE_FILE = $(DOWNLOAD_DIR)/phonetisaurus-2019_$(DOCKER_ARCH).tar.gz
PHONETISAURUS_SRC_FILE = $(DOWNLOAD_DIR)/phonetisaurus-2019.tar.gz

ENABLE_PRECISE = yes
PRECISE_ARCH = armv7l
PRECISE_FROM = prebuilt
PRECISE_FILE = $(DOWNLOAD_DIR)/precise-engine_0.3.0_$(DOCKER_ARCH).tar.gz

ENABLE_POCKETSPHINX = yes
POCKETSPHINX_FILE = $(DOWNLOAD_DIR)/pocketsphinx-python.tar.gz

ENABLE_KALDI = yes
KALDI_FROM = prebuilt
KALDI_PRE_FILE = $(DOWNLOAD_DIR)/kaldi-2020_$(DOCKER_ARCH).tar.gz
KALDI_SRC_FILE = $(DOWNLOAD_DIR)/kaldi-2020.tar.gz

ENABLE_JULIUS = no
JULIUS_FROM = prebuilt
JULIUS_PRE_FILE = $(DOWNLOAD_DIR)/julius-4.5_$(DOCKER_ARCH).tar.gz
JULIUS_SRC_FILE = $(DOWNLOAD_DIR)/julius-2019.tar.gz

ENABLE_DEEPSPEECH = no
DEEPSPEECH_ARCH = rpi3
DEEPSPEECH_FROM = prebuilt
DEEPSPEECH_FILE = $(DOWNLOAD_DIR)/native_client.$(DOCKER_ARCH).cpu.linux.0.6.1.tar.xz

ENABLE_KENLM = no
KENLM_FROM = prebuilt
KENLM_PRE_FILE = $(DOWNLOAD_DIR)/kenlm-20200308_$(DOCKER_ARCH).tar.gz
EIGEN_SRC_FILE = $(DOWNLOAD_DIR)/eigen-3.2.8.tar.bz2
KENLM_SRC_FILE = $(DOWNLOAD_DIR)/kenlm-20200308.tar.gz

ENABLE_NANOTTS = yes
NANOTTS_FROM = prebuilt
NANOTTS_PRE_FILE = $(DOWNLOAD_DIR)/nanotts-20200520_$(DOCKER_ARCH).tar.gz
NANOTTS_SRC_FILE = $(DOWNLOAD_DIR)/nanotts-20200520.tar.gz

ENABLE_SNOWBOY = yes
SNOWBOY_FILE = $(DOWNLOAD_DIR)/snowboy-1.3.0.tar.gz

# -----------------------------------------------------------------------------

VENV_DIR = $(DESTDIR)$(prefix)
VENV_PYTHON = $(VENV_DIR)/bin/python
VIRTUALENV_FLAGS ?= --clear

ifeq ($(VIRTUALENV),yes)
  INSTALL_PYTHON=$(VENV_PYTHON)
else # VIRTUALENV == yes
  INSTALL_PYTHON=$(PYTHON)
endif # VIRTUALENV == yes

.PHONY: all install uninstall distclean clean dist check installdirs

all: download-init build-init opengrm phonetisaurus precise pocketsphinx kaldi julius snowboy deepspeech kenlm

.PHONY: install-init install-dependencies install-rhasspy
install: installdirs \
         install-init \
         install-dependencies \
         install-rhasspy

install-init:
ifeq ($(VIRTUALENV),yes)
        "$(PYTHON)" -m venv $(VIRTUALENV_FLAGS) "$(VENV_DIR)" || "$(PYTHON)" -m venv "$(VENV_DIR)"
        "$(VENV_PYTHON)" -m pip install $(PIP_INSTALL_ARGS) --upgrade pip
        "$(VENV_PYTHON)" -m pip install $(PIP_INSTALL_ARGS) wheel || true
        "$(VENV_PYTHON)" -m pip install $(PIP_INSTALL_ARGS) setuptools
endif # VIRTUALENV == yes

.PHONY: install-opengrm install-phonetisaurus install-precise install-pocketsphinx install-kaldi install-julius install-snowboy install-deepspeech install-kenlm
install-dependencies: install-opengrm \
                      install-phonetisaurus \
                      install-precise \
                      install-pocketsphinx \
                      install-kaldi \
                      install-julius \
                      install-snowboy \
                      install-deepspeech \
                      install-kenlm \
                      install-nanotts

install-rhasspy:
        "$(INSTALL_PYTHON)" -m pip install $(PIP_INSTALL_ARGS) "$(srcdir)"
        chmod +x "${srcdir}/rhasspy.sh"
        install -D "${srcdir}/rhasspy.sh" "$(DESTDIR)$(prefix)/bin/rhasspy"
        install -D "--target-directory=$(DESTDIR)$(prefix)/bin" "${srcdir}/bin/rhasspy-voltron" "${srcdir}/bin/voltron-run"
        install -D "--target-directory=$(DESTDIR)$(prefix)/share/rhasspy/etc" "${srcdir}/etc/shflags"
        install -D "--target-directory=$(DESTDIR)$(prefix)/share/rhasspy/wav" "${srcdir}/etc/wav"/*.wav
        install -D "--target-directory=$(DESTDIR)$(prefix)/share/rhasspy" VERSION README.md LICENSE
        cp -fR "${srcdir}/rhasspy-server-hermes/web" "$(DESTDIR)$(prefix)/share/rhasspy/"
        cp -fR "${srcdir}/rhasspy-server-hermes/templates" "$(DESTDIR)$(prefix)/share/rhasspy/"
        cp -fR "${srcdir}/rhasspy-server-hermes/web/docs" "$(DESTDIR)$(prefix)/share/rhasspy/"

# -----------------------------------------------------------------------------

.PHONY: download-init
download-init:
        $(MKDIR_P) "$(DOWNLOAD_DIR)"

.PHONY: build-init
build-init:
        $(MKDIR_P) "$(BUILD_DIR)"

# -----------------------------------------------------------------------------
# Opengrm: languge modeling toolkit
# http://www.opengrm.org/twiki/bin/view/GRM/NGramLibrary
# -----------------------------------------------------------------------------

.PHONY: opengrm
ifeq ($(ENABLE_OPENGRM),yes)
opengrm: $(OPENGRM_PRE_FILE)

install-opengrm: $(OPENGRM_PRE_FILE)
        "$(srcdir)/scripts/install/install-opengrm.sh" "$(OPENGRM_PRE_FILE)" "$(DESTDIR)$(prefix)"

  ifeq ($(OPENGRM_FROM),prebuilt)
$(OPENGRM_PRE_FILE):
        $(DO_DOWNLOAD) "$(OPENGRM_PRE_FILE)" "https://github.com/synesthesiam/prebuilt-apps/releases/download/v1.0/opengrm-1.3.4_$(DOCKER_ARCH).tar.gz"
  else # OPENGRM_FROM
$(OPENGRM_PRE_FILE): $(OPENFST_SRC_FILE) $(OPENGRM_SRC_FILE)
        "$(srcdir)/scripts/build/build-opengrm.sh" "$(OPENGRM_SRC_FILE)" "$(OPENFST_SRC_FILE)" "$(BUILD_DIR)" "$(OPENGRM_PRE_FILE)"
  endif # OPENGRM_FROM
else # ENABLE_OPENGRM
opengrm:

install-opengrm:
endif # ENABLE_OPENGRM

$(OPENFST_SRC_FILE):
        $(DO_DOWNLOAD) "$(OPENFST_SRC_FILE)" 'http://www.openfst.org/twiki/pub/FST/FstDownload/openfst-1.6.9.tar.gz'

$(OPENGRM_SRC_FILE):
        $(DO_DOWNLOAD) "$(OPENGRM_SRC_FILE)" 'http://www.opengrm.org/twiki/pub/GRM/NGramDownload/opengrm-ngram-1.3.4.tar.gz'

# -----------------------------------------------------------------------------
# Phonetisaurus: grapheme to phoneme
# https://github.com/AdolfVonKleist/Phonetisaurus
# -----------------------------------------------------------------------------

.PHONY: phonetisaurus
ifeq ($(ENABLE_PHONETISAURUS),yes)
phonetisaurus: $(PHONETISAURUS_PRE_FILE)

install-phonetisaurus: $(PHONETISAURUS_PRE_FILE)
        "$(srcdir)/scripts/install/install-phonetisaurus.sh" "$(PHONETISAURUS_PRE_FILE)" "$(DESTDIR)$(prefix)"

  ifeq ($(PHONETISAURUS_FROM),prebuilt)
$(PHONETISAURUS_PRE_FILE):
        $(DO_DOWNLOAD) "$(PHONETISAURUS_PRE_FILE)" "https://github.com/synesthesiam/prebuilt-apps/releases/download/v1.0/phonetisaurus-2019_$(DOCKER_ARCH).tar.gz"
  else # PHONETISAURUS_FROM
$(PHONETISAURUS_PRE_FILE): $(OPENFST_SRC_FILE) $(PHONETISAURUS_SRC_FILE)
        "$(srcdir)/scripts/build/build-phonetisaurus.sh" "$(PHONETISAURUS_SRC_FILE)" "$(OPENFST_SRC_FILE)" "$(BUILD_DIR)" "$(PHONETISAURUS_PRE_FILE)"
  endif # PHONETISAURUS_FROM
else # ENABLE_PHONETISAURUS
phonetisaurus:

install-phonetisaurus:
endif # ENABLE_PHONETISAURUS

$(PHONETISAURUS_SRC_FILE):
        $(DO_DOWNLOAD) "$(PHONETISAURUS_SRC_FILE)" 'https://github.com/synesthesiam/prebuilt-apps/raw/master/download/phonetisaurus-2019.tar.gz'

# -----------------------------------------------------------------------------
# Mycroft Precise: wake word detection
# https://github.com/MycroftAI/mycroft-precise
# -----------------------------------------------------------------------------

.PHONY: precise install-precise
ifeq ($(ENABLE_PRECISE),yes)
precise: $(PRECISE_FILE)

install-precise: $(PRECISE_FILE)
        "$(srcdir)/scripts/install/install-precise.sh" "$(PRECISE_FILE)" "$(DESTDIR)$(prefix)"
else # ENABLE_PRECISE
precise:

install-precise:
endif # ENABLE_PRECISE

$(PRECISE_FILE):
        $(DO_DOWNLOAD) "$(PRECISE_FILE)" "https://github.com/MycroftAI/mycroft-precise/releases/download/v0.3.0/precise-engine_0.3.0_$(PRECISE_ARCH).tar.gz"

# -----------------------------------------------------------------------------
# Snowboy: wake word detection
# https://snowboy.kitt.ai
# -----------------------------------------------------------------------------

.PHONY: snowboy install-snowboy
ifeq ($(ENABLE_SNOWBOY),yes)
snowboy: $(SNOWBOY_FILE)

install-snowboy: $(SNOWBOY_FILE)
        "$(INSTALL_PYTHON)" -m pip install $(PIP_INSTALL_ARGS) "$(SNOWBOY_FILE)"
else # ENABLE_SNOWBOY
snowboy:

install-snowboy:
endif # ENABLE_SNOWBOY

$(SNOWBOY_FILE):
        $(DO_DOWNLOAD) "$(SNOWBOY_FILE)" 'https://github.com/Kitt-AI/snowboy/archive/v1.3.0.tar.gz'

# -----------------------------------------------------------------------------
# CMU Pocketsphinx: speech to text
# https://github.com/cmusphinx/pocketsphinx
# -----------------------------------------------------------------------------

.PHONY: pocketsphinx install-pocketsphinx
ifeq ($(ENABLE_POCKETSPHINX),yes)
pocketsphinx: $(POCKETSPHINX_FILE)

install-pocketsphinx: $(POCKETSPHINX_FILE)
        "$(INSTALL_PYTHON)" -m pip install $(PIP_INSTALL_ARGS) "$(POCKETSPHINX_FILE)"
else # ENABLE_POCKETSPHINX
pocketsphinx:

install-pocketsphinx:
endif # ENABLE_POCKETSPHINX

$(POCKETSPHINX_FILE):
        $(DO_DOWNLOAD) "$(POCKETSPHINX_FILE)" 'https://github.com/synesthesiam/pocketsphinx-python/releases/download/v1.0/pocketsphinx-python.tar.gz'

# -----------------------------------------------------------------------------
# Kaldi: speech to text
# https://kaldi-asr.org
# -----------------------------------------------------------------------------

.PHONY: kaldi
ifeq ($(ENABLE_KALDI),yes)
kaldi: $(KALDI_PRE_FILE)

install-kaldi: $(KALDI_PRE_FILE)
        "$(srcdir)/scripts/install/install-kaldi.sh" "$(KALDI_PRE_FILE)" "$(DESTDIR)$(prefix)"

  ifeq ($(KALDI_FROM),prebuilt)
$(KALDI_PRE_FILE):
        $(DO_DOWNLOAD) "$(KALDI_PRE_FILE)" "https://github.com/synesthesiam/prebuilt-apps/releases/download/v1.0/kaldi-2020_$(DOCKER_ARCH).tar.gz"
  else # KALDI_FROM
$(KALDI_PRE_FILE): $(KALDI_SRC_FILE)
        "$(srcdir)/scripts/build/build-kaldi.sh" "$(KALDI_SRC_FILE)" "$(BUILD_DIR)" "$(KALDI_PRE_FILE)"
  endif # KALDI_FROM
else # ENABLE_KALDI
kaldi:

install-kaldi:
endif # ENABLE_KALDI

$(KALDI_SRC_FILE):
        $(DO_DOWNLOAD) "$(KALDI_SRC_FILE)" 'https://github.com/synesthesiam/docker-kaldi/raw/master/download/kaldi-2020.tar.gz'

# -----------------------------------------------------------------------------
# Julius: speech to text
# https://github.com/julius-speech/julius
# -----------------------------------------------------------------------------

.PHONY: julius
ifeq ($(ENABLE_JULIUS),yes)
julius: $(JULIUS_PRE_FILE)

install-julius: $(JULIUS_PRE_FILE)
        "$(srcdir)/scripts/install/install-julius.sh" "$(JULIUS_PRE_FILE)" "$(DESTDIR)$(prefix)"

  ifeq ($(JULIUS_FROM),prebuilt)
$(JULIUS_PRE_FILE):
        $(DO_DOWNLOAD) "$(JULIUS_PRE_FILE)" "https://github.com/synesthesiam/prebuilt-apps/releases/download/v1.0/julius-4.5_$(DOCKER_ARCH).tar.gz"
  else # JULIUS_FROM
$(JULIUS_PRE_FILE): $(JULIUS_SRC_FILE)
        "$(srcdir)/scripts/build/build-julius.sh" "$(JULIUS_SRC_FILE)" "$(BUILD_DIR)" "$(JULIUS_PRE_FILE)"
  endif # JULIUS_FROM
else # ENABLE_JULIUS
julius:

install-julius:
endif # ENABLE_JULIUS

$(JULIUS_SRC_FILE):
        $(DO_DOWNLOAD) "$(JULIUS_SRC_FILE)" 'https://github.com/synesthesiam/prebuilt-apps/raw/master/download/julius-2019.tar.gz'


# -----------------------------------------------------------------------------
# Mozilla DeepSpeech: speech to text
# https://github.com/mozilla/DeepSpeech
# -----------------------------------------------------------------------------

.PHONY: deepspeech install-deepspeech
ifeq ($(ENABLE_DEEPSPEECH),yes)
deepspeech: $(DEEPSPEECH_FILE)

install-deepspeech: $(DEEPSPEECH_FILE)
        "$(srcdir)/scripts/install/install-deepspeech.sh" "$(DEEPSPEECH_FILE)" "$(DESTDIR)$(prefix)"
else # ENABLE_DEEPSPEECH
deepspeech:

install-deepspeech:
endif # ENABLE_DEEPSPEECH

$(DEEPSPEECH_FILE):
        $(DO_DOWNLOAD) "$(DEEPSPEECH_FILE)" "https://github.com/mozilla/DeepSpeech/releases/download/v0.6.1/native_client.$(DEEPSPEECH_ARCH).cpu.linux.tar.xz"

# -----------------------------------------------------------------------------
# KenLM: language modeling toolkit
# https://kheafield.com/code/kenlm/
# -----------------------------------------------------------------------------

.PHONY: kenlm install-kenlm
ifeq ($(ENABLE_KENLM),yes)
kenlm: $(KENLM_PRE_FILE)

  ifeq ($(KENLM_FROM),prebuilt)
$(KENLM_PRE_FILE):
        $(DO_DOWNLOAD) "$(KENLM_PRE_FILE)" "https://github.com/synesthesiam/prebuilt-apps/releases/download/v1.0/kenlm-20200308_$(DOCKER_ARCH).tar.gz"
  else # KENLM_FROM
$(KENLM_PRE_FILE): $(EIGEN_SRC_FILE) $(KENLM_SRC_FILE)
        "$(srcdir)/scripts/build/build-kenlm.sh" "$(KENLM_SRC_FILE)" "$(EIGEN_SRC_FILE)" "$(BUILD_DIR)" "$(KENLM_PRE_FILE)"
  endif # KENLM_FROM

install-kenlm: $(KENLM_PRE_FILE)
        "$(srcdir)/scripts/install/install-kenlm.sh" "$(KENLM_PRE_FILE)" "$(DESTDIR)$(prefix)"
else # ENABLE_KENLM
kenlm:

install-kenlm:
endif # ENABLE_KENLM

$(KENLM_SRC_FILE):
        $(DO_DOWNLOAD) "$(KENLM_SRC_FILE)" 'https://github.com/synesthesiam/prebuilt-apps/raw/master/download/kenlm-20200308.tar.gz'

$(EIGEN_SRC_FILE):
        $(DO_DOWNLOAD) "$(EIGEN_SRC_FILE)" 'https://github.com/synesthesiam/prebuilt-apps/raw/master/download/eigen-3.2.8.tar.bz2'

# -----------------------------------------------------------------------------
# nanoTTS: text to speech
# https://github.com/gmn/nanotts
# -----------------------------------------------------------------------------

.PHONY: nanotts
ifeq ($(ENABLE_NANOTTS),yes)
nanotts: $(NANOTTS_PRE_FILE)

install-nanotts: $(NANOTTS_PRE_FILE)
        "$(srcdir)/scripts/install/install-nanotts.sh" "$(NANOTTS_PRE_FILE)" "$(DESTDIR)$(prefix)"

  ifeq ($(NANOTTS_FROM),prebuilt)
$(NANOTTS_PRE_FILE):
        $(DO_DOWNLOAD) "$(NANOTTS_PRE_FILE)" "https://github.com/synesthesiam/prebuilt-apps/releases/download/v1.0/nanotts-20200520_$(DOCKER_ARCH).tar.gz"
  else # NANOTTS_FROM
$(NANOTTS_PRE_FILE): $(NANOTTS_SRC_FILE)
        "$(srcdir)/scripts/build/build-nanotts.sh" "$(NANOTTS_SRC_FILE)" "$(BUILD_DIR)" "$(NANOTTS_PRE_FILE)"
  endif # NANOTTS_FROM
else # ENABLE_NANOTTS
nanotts:

install-nanotts:
endif # ENABLE_NANOTTS

$(NANOTTS_SRC_FILE):
        $(DO_DOWNLOAD) "$(NANOTTS_SRC_FILE)" 'https://github.com/synesthesiam/prebuilt-apps/raw/master/download/nanotts-20200520.tar.gz'

# -----------------------------------------------------------------------------

uninstall:
ifeq ($(VIRTUALENV),yes)
        rm -rvf "$(VENV_DIR)"
endif


# Delete downloaded binaries and build artifacts
clean:
        "$(PYTHON)" setup.py clean
        rm -rvf "$(BUILD_DIR)"


# Clean up the output of configure
distclean:
        rm -v "$(srcdir)/config.log"
        rm -v "$(srcdir)/config.status"
        rm -rvf "$(srcdir)/autom4te.cache"
        rm -v "$(srcdir)/Makefile"

# You can either use the setup.py sdist command or you can roll your own here
dist:
        "$(PYTHON)" setup.py sdist

# Use the setup.py check command
check:
        "$(PYTHON)" setup.py check

# setup.py might complain if a directory doesn't exist so just in case, make the directory
# here
installdirs:
        $(MKDIR_P) "$(DESTDIR)$(prefix)"

No module named 'rhasspyasr_deepspeech'

I installed Rhasspy-voltron using the docker-installation method and would like to use DeepSpeech as Speech-to-Text-system. However, when restarting, I keep getting:

28.980237596Z ModuleNotFoundError: No module named 'rhasspyasr_deepspeech'
29.009963254Z 2020-05-20 09:57:29,009 INFO exited: speech_to_text (exit status 1; not expected)
32.017108415Z 2020-05-20 09:57:32,016 INFO spawned: 'speech_to_text' with pid 1099
32.434818235Z Traceback (most recent call last):
32.434863893Z   File "/usr/lib/python3.7/runpy.py", line 183, in _run_module_as_main
32.434878762Z     mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
32.434886849Z   File "/usr/lib/python3.7/runpy.py", line 142, in _get_module_details
32.434894134Z     return _get_module_details(pkg_main_name, error)
32.434901244Z   File "/usr/lib/python3.7/runpy.py", line 109, in _get_module_details
32.434908452Z     __import__(pkg_name)
32.434930232Z   File "/usr/lib/rhasspy-voltron/rhasspy-asr-deepspeech-hermes/rhasspyasr_deepspeech_hermes/__init__.py", line 9, in <module>
32.434939170Z     import rhasspyasr_deepspeech
32.434947218Z ModuleNotFoundError: No module named 'rhasspyasr_deepspeech'

And I guess this is because I am not running it inside a virtualenvironment. What would the correct procedure be?

Using speak feature no error feedback in case of error

I'm still trying to figure out why my sound output isn't working.

It is a pity that the user does not get any feedback in case of an error during the sound output.

I only see the error in the logging of the Docker container. A small toast would be awesome.

Intent handler 'command' failed

Trying to use a python script as intent handler with the 2.5.0-pre docker image fails; the same used to work in 2.4.19:

    "handle": {
        "command": {
            "program": "/profiles/handler.py"
        },
        "system": "command"

The log:

rhasspy    | [DEBUG:2020-04-28 20:06:00,670] rhasspyremote_http_hermes: /profiles/handler.py
rhasspy    | [ERROR:2020-04-28 20:06:00,674] rhasspyremote_http_hermes: handle_intent
rhasspy    | Traceback (most recent call last):
rhasspy    |   File "/usr/lib/rhasspy-voltron/rhasspy-remote-http-hermes/rhasspyremote_http_hermes/__init__.py", line 795, in handle_intent
rhasspy    |     stderr=asyncio.subprocess.PIPE,
rhasspy    |   File "/usr/lib/python3.7/asyncio/subprocess.py", line 217, in create_subprocess_exec
rhasspy    |     stderr=stderr, **kwds)
rhasspy    |   File "/usr/lib/python3.7/asyncio/base_events.py", line 1529, in subprocess_exec
rhasspy    |     bufsize, **kwargs)
rhasspy    |   File "/usr/lib/python3.7/asyncio/unix_events.py", line 190, in _make_subprocess_transport
rhasspy    |     **kwargs)
rhasspy    |   File "/usr/lib/python3.7/asyncio/base_subprocess.py", line 37, in __init__
rhasspy    |     stderr=stderr, bufsize=bufsize, **kwargs)
rhasspy    |   File "/usr/lib/python3.7/asyncio/unix_events.py", line 775, in _start
rhasspy    |     universal_newlines=False, bufsize=bufsize, **kwargs)
rhasspy    |   File "/usr/lib/python3.7/subprocess.py", line 800, in __init__
rhasspy    |     restore_signals, start_new_session)
rhasspy    |   File "/usr/lib/python3.7/subprocess.py", line 1551, in _execute_child
rhasspy    |     raise child_exception_type(errno_num, err_msg, err_filename)
rhasspy    | PermissionError: [Errno 13] Permission denied: '/'

Is this a problem in rhasspy-remote-http-hermes/rhasspyremote_http_hermes/__init__.py or is my configuration not correct ... ?

PS: Thanks for that great project.

recognition stops for 30 seconds

I've just pulled the latest docker image (04/01/2020) and asserted that after nearly all positive intent recogitions the ok-beep will be interrupted and the next wake-up can't be done before 30 seconds.
log001.log

Audio Recording stops working when External MQTT is selected

Settings:
MQTT: Internal
Intent Handling: Disabled
Wake Word: Snowboy
Record Audio: PyAudio with Seeed-2mic-voicecard: - (hw:0,0)
Speech To Text: PocketSphinx
Intent Recognition: Fsticuffs
Text To Speech: PicoTTS
Audio Playing: aplay
Dialogue Management: Rhasspy

When MQTT is configured for External the wake word stops functioning and the Record Device list only shows Default Device (instead of Seeed-2mic-voicecard: - (hw:0,0) ).

webhook awake not working with custom siteId

When using default as siteId, I got webhook/awake posted to

"webhooks": {
        "awake": [
            "http://..."
        ]
    }

If I rename siteId to anything other than default, no webhook received.

marytts

error : rhasspyserver_hermes: TtsError(error='file does not start with RIFF id', site_id='default', context='ce2f620e-db31-4d21-9af4-89e6ff81d7c9', session_id='')

Pocketsphinx: No language model is written, even if Rhasspy is trained

My setup:
Raspberry Pi 4 running Raspbian Buster
Rhasspy: pre-pre Version of Rhasppy 2.5
profile: german (de)

My problem:
I would like to use pocketsphinx for Speech to Text. But when I hit the Train-button after adding my intents and sentences to sentences.ini, no language_model.txt-file is written to my profile.
Instead I get the error-message: "name 'language_model' is not defined"

Therefore, Rhasspy does not translate my speech commands to text.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.