====== 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:
sudo alsactl -f /etc/voicecard/wm8960_asound.state store
sudo reboot
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
==== Installazione DeepSpeech (pre addestrato) ====
DeepSpeech è il motore STT di Mozilla\\
Scaricare ed estrarre questo modello basato su DeepSpeech:\\
https://coqui.ai/italian/jaco-assistant/v0.0.1
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
# copiare in questa cartella il modello tflite e lo scorer scaricati
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: (assicurarsi che le path siano corrette)
...
"deepspeech": {
"model" :"/home/pi/deepspeech/model.tflite",
"scorer" :"/home/pi/deepspeech/kenlm_it.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**
===== Addestramento manuale di una rete neurale =====
**ATTENZIONE**\\
Prosegui solo se non vuoi usare il modello già addestrato e vuoi addestrare manualmente una rete neurale DeepSpeech.\\
Requisiti: PC Desktop con scheda grafica nvidia
Assicurarsi che il sistema operativo supporti CUDA 10.0.0. Non usare versioni più recenti di cuda.
(Testato con Ubuntu 18.04)
Verificare se i driver nvidia sono installati:
nvidia-smi
Questo comando dovrebbe mostrare una tabella con alcune proprietà della gpu
Installare Cuda 10.0.0, potrebbe essere necessario disinstallare i driver nvidia e reinstallarli dopo cuda\\
https://developer.nvidia.com/cuda-downloads\\
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: ===
Ho preso un tool di Mozilla-Italia che semplifica l'addestramento, ne ho risolto alcuni bug
cd $HOME
git clone https://github.com/danieltinazzi/DeepSpeech-Italian-Model
cd DeepSpeech-Italian-Model/DeepSpeech
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 il processo occupa troppa memoria della gpu potrebbe essere necessario ridurre il BATCH_SIZE, esempio:
docker run -e "BATCH_SIZE=32" -e "TRANSFER_LEARNING=1" --rm --gpus all --mount type=bind,src=$HOME/data,dst=/mnt -it deepspeech/it