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