Assistente vocale Mycroft

Installazione

Scaricare https://mycroft.ai/to/picroft-image

Estrarre lo zip

Flashare il file .img sulla sd del raspberry (si può usare balena etcher)

Aprire terminale nella partizione rootfs della scheda sd:

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Aggiungere in fondo al file le credenziali della rete wifi:

network={
ssid="nome rete"
psk="password"
}

Salvare e chiudere

Mettere la scheda sd nel raspberry e avviarlo

Connettersi via ssh al raspberry:

ssh pi@192.168.0.x

La password di default è “mycroft”

Saltare la configurazione guidata

Fare il pairing del device su https://account.mycroft.ai/devices o su un server locale

Al termine dell'installazione delle skill, chiudere con ctrl+c

Aggiornamento della configurazione
Dal terminale del raspberry:

cd ~
rm .mycroft/mycroft.conf
rm .mycroft_cli.conf
sudo apt update -y
sudo apt upgrade -y
sudo apt autoremove -y
pip install --upgrade pip
cd mycroft-core
pip install --upgrade .

Impostare lingua italiana

nano .config/mycroft/mycroft.conf

Aggiungere:

{
...
"lang": "it-it",
"system_unit": "metric",
"time_format": "full",
"date_format": "DMY"
// TODO aggiungere "lang": "it-it" al componente tts
}

Installazione della scheda audio

Scheda audio modello ReSpeaker 2 Mics Pi HAT (seeedstudio o keyestudio)

Inserire la scheda respeaker 2-mic nella socket del raspberry

Collegare un altoparlante all'uscita speaker della scheda

Dal terminale del raspberry:

deactivate
git clone https://github.com/respeaker/seeed-voicecard
cd seeed-voicecard
sudo ./install.sh

Disattivare la scheda audio integrata:

sudo nano /etc/modprobe.d/raspi-blacklist.conf

Scrivere in fondo al file:

blacklist snd_bcm2835

Chiudere e salvare

Impostare il sample-rate utilizzato da mycroft

sudo nano /etc/pulse/daemon.conf

Scrivere in fondo al file:

default-sample-rate = 48000
alternate-sample-rate = 44100

Chiudere e salvare

sudo reboot

Test scheda audio

Dal terminale del raspberry

mycroft-stop
systemctl --user stop pulseaudio
arecord -f cd -Dhw:0 test.wav
// Registrare audio, poi premere ctrl+c
aplay -Dhw:0 test.wav
// Verificare che venga riprodotto l'audio registrato

Regolazione del mixer

Backup della configurazione iniziale:

cd /etc/voicecard
sudo cp wm8960_asound.state wm8960_asound.state.save
alsamixer

Premere f6 e selezionare seed-2mic-voicecard

Premere f5 per mostrare anche il livello del microfono

Sistemare i volumi (principalmente playback e capture) usando le frecce

Rendere le modifiche permanenti con: <code> sudo alsactl -f /etc/voicecard/wm8960_asound.state store sudo reboot </code>

Aprire alsamixer e verificare che le modifiche non siano state cancellate
Nota: il volume di master viene regolato direttamente da mycroft

Skill homeassistant

Dal terminale del raspberry:

pip install quantulum3
mycroft-msm install homeassistant
cd ~/mycroft-core/skills/homeassistant.mycroftai
git pull

Creare un long lived access token da home assistant

Andare su https://home.mycroft.ai/skills (o server locale) e inserire ip di home assistant e token

Addestramento di una rete neurale

ATTENZIONE
Usa questa parte di guida solo se vuoi addestrare manualmente una rete neurale DeepSpeech.
Se vuoi usare la rete neurale DeepSpeech italiana già addestrata, salta questa parte.
A breve caricherò una versione addestrata della rete neurale aggiornata con il nuovo dataset CommonVoice di mozilla.

Requisiti: PC linux con scheda grafica nvidia

Verificare se i driver nvidia sono installati:

nvidia-smi

Questo comando dovrebbe mostrare una tabella con alcune proprietà della gpu

Installare docker e nvidia-docker: seguire una guida specifica per il proprio sistema operativo
https://docs.docker.com/engine/install/
https://github.com/NVIDIA/nvidia-docker
Prima di proseguire è consigliato fare un test per assicurarsi che docker riesca a vedere la gpu

Scaricare il dataset più recente di CommonVoice
https://commonvoice.mozilla.org/it/datasets

Dovrebbe essere un file chiamato it.tar.gz
Posizionate l'archivio nella home e lanciate questi comandi:

cd $HOME
mkdir -p data/sources
chmod a+rwx -R data
mv it.tar.gz data/sources
chmod a+r data/sources/it.tar.gz

Creare l'immagine Docker:

cd $HOME
git clone MozillaItalia/DeepSpeech-Italian-Model.git
cd DeepSpeech-Italian-Model/DeepSpeech

Nella versione di DeepSpeech che stiamo usand sono presenti alcuni bug. Possiamo correggerli cambiando il file “generatebasedockerfile.sh” con una versione modificata che trovate qui: https://github.com/danieltinazzi/DeepSpeech-Italian-Model/blob/master/DeepSpeech/generate_base_dockerfile.sh

chmod +x generate_base_dockerfile.sh
./generate_base_dockerfile.sh
docker build . -f Dockerfile.train -t deepspeech/base:0.9.3
docker build . -f Dockerfile_it.train -t deepspeech/it

Avviare l'addestramento

docker run -e "TRANSFER_LEARNING=1" --rm --gpus all --mount type=bind,src=$HOME/data,dst=/mnt -it deepspeech/it

Se non avete un supercomputer potrebbe essere necessario modificare il BATCH_SIZE

Funzionante sul mio laptop con gpu 4gb:

docker run -e "BATCH_SIZE=32" -e "TRANSFER_LEARNING=1" --rm --gpus all --mount type=bind,src=$HOME/data,dst=/mnt -it deepspeech/it

Work in progress.

Installazione DeepSpeech (pre addestrato)

DeepSpeech è il motore STT di Mozilla
Dal terminale del raspberry:

sudo apt update
sudo apt install gfortran libatlas-base-dev libpcap-dev libpq-dev
pip install deepspeech==0.9.3 scipy av
mkdir deepspeech
cd deepspeech
curl -LO https://github.com/MozillaItalia/DeepSpeech-Italian-Model/releases/download/2020.08.07/transfer_model_tflite_it.tar.xz
tar xvf transfer_model_tflite_it.tar.xz
rm transfer_model_tflite_it.tar.xz
git clone https://github.com/MainRo/deepspeech-server
cd deepspeech-server
pip install .
cp config.sample.json config.json
nano config.json

Aggiungere a config.json:

...
"deepspeech": {
"model" :"/home/pi/deepspeech/output_graph.tflite",
"scorer" :"/home/pi/deepspeech/scorer"
},
...

sudo nano .config/mycroft/mycroft.conf

Aggiungere a mycroft.conf:

...
"stt": {
"deepspeech_server": {
"uri": "http://localhost:8080/stt"
},
"module": "deepspeech_server"
},
...

Creare il servizio deepspeech-server

sudo nano /etc/systemd/system/deepspeech-server.service

Scrivere nel file:

[Unit]
Description=Deepspeech server
[Service]
User=pi
Type=simple
ExecStart=/home/pi/mycroft-core/.venv/bin/deepspeech-server --config /home/pi/deepspeech/deepspeech-server/config.j$
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target

Attivare il servizio:

sudo systemctl enable deepspeech-server
sudo systemctl start deepspeech-server

Work in progress