Merge pull request #4 from imonlinux/imonlinux-patch-1
Add tutorial for install and config with reSpeaker
This commit is contained in:
@@ -0,0 +1,226 @@
|
|||||||
|
# Linux Voice Assistant on 2‑Mic Linux — Installation & Configuration Guide
|
||||||
|
# Created using ChatGPT 5 with the following prompt:
|
||||||
|
# Using the following github document as a guide
|
||||||
|
# https://github.com/rhasspy/wyoming-satellite/blob/master/docs/tutorial_2mic.md,
|
||||||
|
# take the attached bash history of commands and create a similar document
|
||||||
|
# detailing the installation and configuration of this linux-voice-assistant project.
|
||||||
|
|
||||||
|
> Modeled after the Wyoming Satellite two‑mic tutorial, adapted from actual shell history.
|
||||||
|
|
||||||
|
This guide reproduces a working setup of the **linux-voice-assistant** project with **Wyoming OpenWakeWord** on a Linux host with a 2‑mic HAT (e.g., seeed-2mic-voicecard). It assumes a fresh system with sudo access.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
- A Linux system (Debian/Ubuntu/Raspberry Pi OS or compatible)
|
||||||
|
- Python 3.11+ recommended
|
||||||
|
- A 2‑mic sound card
|
||||||
|
- Network access to your Home Assistant instance
|
||||||
|
|
||||||
|
## 1. Install system packages
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt update
|
||||||
|
sudo apt upgrade
|
||||||
|
sudo apt install libportaudio2 build-essential git libmpv-dev mpv python3.11-dev
|
||||||
|
sudo reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 2. Get the code
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/imonlinux/linux-voice-assistant.git
|
||||||
|
git clone https://github.com/rhasspy/wyoming-openwakeword.git
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 3. Wyoming OpenWakeWord (OWW)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp ./linux-voice-assistant/wyoming-openwakeword/requirements.txt ./wyoming-openwakeword/requirements.txt
|
||||||
|
cd wyoming-openwakeword/
|
||||||
|
script/setup
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 4. Configure audio devices
|
||||||
|
|
||||||
|
Find your input/output device names and update the linux-voice-assistant/service/linux-voice-assistant.service file match sound card details:
|
||||||
|
```bash
|
||||||
|
arecord -l
|
||||||
|
aplay -l
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 5. Systemd services
|
||||||
|
|
||||||
|
Copy the 2 service files into /etc/systemd/system/:
|
||||||
|
```bash
|
||||||
|
sudo cp ./service/linux-voice-assistant.service /etc/systemd/system/linux-voice-assistant.service
|
||||||
|
sudo cp ./service/wyoming-openwakeword.service /etc/systemd/system/wyoming-openwakeword.service
|
||||||
|
```
|
||||||
|
Start new services and confirm services are running:
|
||||||
|
```bash
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
sudo systemctl enable --now linux-voice-assistant
|
||||||
|
sudo systemctl status linux-voice-assistant wyoming-openwakeword --no-pager -l
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 6. Connect to Home Assistant
|
||||||
|
|
||||||
|
1. In Home Assistant, go to "Settings" -> "Device & services"
|
||||||
|
2. Click the "Add integration" button
|
||||||
|
3. Choose "ESPHome" and then "Set up another instance of ESPHome"
|
||||||
|
4. Enter the IP address of your voice satellite with port 6053
|
||||||
|
5. Click "Submit"
|
||||||
|
|
||||||
|
|
||||||
|
## 7. Verification
|
||||||
|
|
||||||
|
- Expect logs like `Connected to Home Assistant`
|
||||||
|
- Look for `[OWW] Detection: name=...` followed by re-arming/cycling
|
||||||
|
- Ask: *“What time is it?”* and confirm TTS reply
|
||||||
|
|
||||||
|
|
||||||
|
## 8. Change OWW detection model
|
||||||
|
|
||||||
|
Edit the linux-voice-assistant.service file and change the OWW configuration argument for --wake-word-name.
|
||||||
|
Included OWW models include:
|
||||||
|
|
||||||
|
```text
|
||||||
|
alexa_v0.1.tflite
|
||||||
|
embedding_model.tflite
|
||||||
|
hey_jarvis_v0.1.tflite
|
||||||
|
hey_mycroft_v0.1.tflite
|
||||||
|
hey_rhasspy_v0.1.tflite
|
||||||
|
melspectrogram.tflite
|
||||||
|
ok_nabu_v0.1.tflite
|
||||||
|
```
|
||||||
|
|
||||||
|
Additional community provided OWW models available from this repository:
|
||||||
|
https://github.com/fwartner/home-assistant-wakewords-collection
|
||||||
|
|
||||||
|
Service file as provided using OWW 'ok_nabu':
|
||||||
|
```bash
|
||||||
|
sudo systemctl edit --force --full linux-voice-assistant.service
|
||||||
|
```
|
||||||
|
|
||||||
|
```text
|
||||||
|
[Unit]
|
||||||
|
Description=Linux Voice Assistant
|
||||||
|
Requires=wyoming-openwakeword.service
|
||||||
|
After=sound.target network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/home/pi/linux-voice-assistant
|
||||||
|
ExecStart=/home/pi/linux-voice-assistant/script/run \
|
||||||
|
--name 'Linux Satellite' \
|
||||||
|
--audio-input-device seeed-2mic-voicecard \
|
||||||
|
--audio-output-device alsa/hw:2,0 \
|
||||||
|
--wake-uri 'tcp://127.0.0.1:10400' \
|
||||||
|
--wake-word-name 'ok_nabu'
|
||||||
|
Restart=always
|
||||||
|
RestartSec=2
|
||||||
|
Environment=PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
Service file using OWW 'alexa':
|
||||||
|
```bash
|
||||||
|
sudo systemctl edit --force --full linux-voice-assistant.service
|
||||||
|
```
|
||||||
|
|
||||||
|
```text
|
||||||
|
[Unit]
|
||||||
|
Description=Linux Voice Assistant
|
||||||
|
Requires=wyoming-openwakeword.service
|
||||||
|
After=sound.target network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/home/pi/linux-voice-assistant
|
||||||
|
ExecStart=/home/pi/linux-voice-assistant/script/run \
|
||||||
|
--name 'Linux Satellite' \
|
||||||
|
--audio-input-device seeed-2mic-voicecard \
|
||||||
|
--audio-output-device alsa/hw:2,0 \
|
||||||
|
--wake-uri 'tcp://127.0.0.1:10400' \
|
||||||
|
--wake-word-name 'alexa'
|
||||||
|
Restart=always
|
||||||
|
RestartSec=2
|
||||||
|
Environment=PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
Reload systemd with updated linux-voice-assistant.service file and restart linux-voice-assistant.service and confirm successful run:
|
||||||
|
```bash
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
sudo systemctl restart linux-voice-assistant.service
|
||||||
|
sudo systemctl status linux-voice-assistant wyoming-openwakeword --no-pager -l
|
||||||
|
```
|
||||||
|
|
||||||
|
## 9. Revert to MicroWakeWord
|
||||||
|
|
||||||
|
Edit the linux-voice-assistant.service file and remove the OWW configuration arguments:
|
||||||
|
Service file with OWW:
|
||||||
|
```bash
|
||||||
|
sudo systemctl edit --force --full linux-voice-assistant.service
|
||||||
|
```
|
||||||
|
|
||||||
|
```text
|
||||||
|
[Unit]
|
||||||
|
Description=Linux Voice Assistant
|
||||||
|
Requires=wyoming-openwakeword.service
|
||||||
|
After=sound.target network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/home/pi/linux-voice-assistant
|
||||||
|
ExecStart=/home/pi/linux-voice-assistant/script/run \
|
||||||
|
--name 'Linux Satellite' \
|
||||||
|
--audio-input-device seeed-2mic-voicecard \
|
||||||
|
--audio-output-device alsa/hw:2,0 \
|
||||||
|
--wake-uri 'tcp://127.0.0.1:10400' \
|
||||||
|
--wake-word-name 'ok_nabu'
|
||||||
|
Restart=always
|
||||||
|
RestartSec=2
|
||||||
|
Environment=PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
Service file without OWW:
|
||||||
|
```text
|
||||||
|
[Unit]
|
||||||
|
Description=Linux Voice Assistant
|
||||||
|
Requires=wyoming-openwakeword.service
|
||||||
|
After=sound.target network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/home/pi/linux-voice-assistant
|
||||||
|
ExecStart=/home/pi/linux-voice-assistant/script/run \
|
||||||
|
--name 'Linux Satellite' \
|
||||||
|
--audio-input-device seeed-2mic-voicecard \
|
||||||
|
--audio-output-device alsa/hw:2,0
|
||||||
|
Restart=always
|
||||||
|
RestartSec=2
|
||||||
|
Environment=PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
Reload systemd with updated linux-voice-assistant.service file and restart linux-voice-assistant.service and confirm successful run:
|
||||||
|
```bash
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
sudo systemctl restart linux-voice-assistant.service
|
||||||
|
sudo systemctl status linux-voice-assistant wyoming-openwakeword --no-pager -l
|
||||||
|
```
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Wyoming openWakeWord
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/home/pi/wyoming-openwakeword/script/run --uri 'tcp://127.0.0.1:10400'
|
||||||
|
WorkingDirectory=/home/pi/wyoming-openwakeword
|
||||||
|
Restart=always
|
||||||
|
RestartSec=1
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
Reference in New Issue
Block a user