[TUTORIEL] - Gladys et la reconnaissance vocale

recovocale
tutoriel

#1

[TUTORIEL] - Gladys et la reconnaissance vocale

Bonjour à tous !

Suite aux très nombreux problèmes que beaucoup d’entre nous ont rencontrés avec le module Gladys-voice qui permet l’intégration de la reconnaissance vocale dans Gladys, j’ai décidé de réunir dans ce tutoriel toutes les informations éparpillées sur le forum qui sont nécessaires à la bonne installation de celui-ci.

Le README.md de Gladys-voice sur GitHub n’étant plus à jour concernant la partie Google Cloud Console (due aux nombreuses évolutions faites par Google sur la plateforme) une partie de ce tutoriel y est entièrement dédiée.

Ce tutoriel s’adresse à tout ceux qui souhaitent pourvoir parler à Gladys pour lui demander, par exemple, d’allumer la lumière du salon ou la température extérieure.

Mise en place et configuration du micro


La configuration du micro est une étape cruciale dans l’installation de Gladys-voice, ne poursuivez pas l’installation si vous n’avez pas pu valider le bon fonctionnement de votre micro car vous ne saurez pas identifier la raison pour laquelle le module ne marche pas.

Prérequis logiciel : (cliquez pour déplier)

Micro PlayStation Eyes

1. Mise à jour des paquets :

sudo apt-get update

2. Installation de PulseAudio :

Exécutez les commandes suivante :

sudo apt-get install sox libsox-fmt-all libatlas-base-dev mpg321 pulseaudio

sudo apt-get install gstreamer0.10-pulseaudio libao4 libasound2-plugins libgconfmm-2.6-1c2 libglademm-2.4-1c2a libpulse-dev libpulse-mainloop-glib0 libpulse-mainloop-glib0-dbg libpulse0 libpulse0-dbg libsox-fmt-pulse paman paprefs pavucontrol pavumeter pulseaudio pulseaudio-dbg pulseaudio-esound-compat pulseaudio-esound-compat-dbg pulseaudio-module-bluetooth pulseaudio-module-gconf pulseaudio-module-jack pulseaudio-module-lirc pulseaudio-module-lirc-dbg pulseaudio-module-x11 pulseaudio-module-zeroconf pulseaudio-module-zeroconf-dbg pulseaudio-utils oss-compat -y


Micro USB ordinnaire

1. Mise à jour des paquets :

sudo apt-get update

2. Installation de mpg321 :

Exécutez la commande suivante :

sudo apt-get install sox libsox-fmt-all libatlas-base-dev mpg321

Micro Kinect

1. Mise à jour des paquets et installation de mpg321 :

sudo apt-get update

sudo apt-get install sox libsox-fmt-all libatlas-base-dev mpg321

3. Détection du micro :

Une fois branché, exécutez la commande suivante :

lsusb

Vous devriez voir quelque chose comme ça :

https://community.gladysassistant.com/uploads/default/original/1X/9b973e7f3a94ffcb395ce672ec2bd1a8958fc39a.png

(Vous devriez avoir une ligne supplémentaire Microsoft Corp. Xbox NUI Audio également).

Lancez ensuite la commande suivante :

git clone http://git.ao2.it/kinect-audio-setup.git/

Une fois le programme télchargé, naviguez dans le dossier kinect-audio-setup

cd kinect-audio-setup

…et installez le programme :

sudo make install

Ensuite on va avoir besoin de portable 7zip :

sudo apt-get install p7zip-full

Pour pouvoir lancer les commandes suivantes :

sudo ./kinect_fetch_fw /lib/firmware/kinect

sudo kinect_upload_fw /lib/firmware/kinect/UACFirmware

Voilà ! votre Kinect est prêt à recevoir des ordres !

Pour vérifier qu’il est bien détecté en tant que périphérique d’entrée, lancez la commande suivante :

arecord -l

Vous devriez avoir la ligne suivante :

https://community.gladysassistant.com/uploads/default/original/1X/e196a8266942eaaf329d3c4f1ce6fe71e7120a1f.png


Prérequis matériel :

Branchez votre micro USB

ATTENTION : Après l’installation si vous lancez gladys-voice sans avoir branché votre micro, ça aura pour effet de faire rebooter gladys-voice en boucle !

Nous allons ensuite vérifier à deux reprise qu’il est correctement reconnu par votre Raspberry Pi

D’abord une vérification simple au niveau des ports USB,
Exécutez la commande : lsusb

Vous devriez voir ici un ‘Device’ supplémentaire, le nom de votre micro devrait apparaître.

Micro pas branché

Micro branché

Ensuite on vérifie que votre périphérique est bien reconnu comme un micro,
Exécutez la commande : arecord -l

(cliquez pour déplier)


Partie à faire **UNIQUEMENT** si votre micro possède sa propre sortie audio

BEGIN

Tapez la commande :

sudo nano /usr/share/alsa/alsa.conf

Et remplacez

defaults.ctl.card 0
defaults.pcm.card 0

par

defaults.ctl.card X
defaults.pcm.card X

Ou X doit être remplacé par le numéro figurant après card dans la commande précédente (arecord -l).
Généralement card 1

END

Ensuite il faut créer le fichier .asoundrc qui permet de définir les cartes son utilisables par le Raspberry Pi en tapant la commande :

sudo nano ~/.asoundrc

et on y met :

/!\ où, à nouveau, les parties hw:1,0 et card 1 sont à ajuster avec vos valeurs. /!\
Dans hw:1,0 le pemier chiffre désigne votre soundcard (card 0, card 1 ou card 2), le second désigne le device (device 0 ou device 1), à identifier ici :

(cliquez pour déplier)

.asoundrc pour micro USB avec haut parleur sortie JACK
pcm.!default {
         type asym
         playback.pcm {
                 type plug
                 slave.pcm "hw:0,0"
         }
         capture.pcm {
                 type plug
                 slave.pcm "hw:1,0"
         } 
 }

 ctl.!default {
        type hw
        card 1
}

.asoundrc pour micro USB avec sortie audio embarquée
pcm.!default {
             type asym
             playback.pcm {
                     type plug
                     slave.pcm "hw:1,0"
             }
             capture.pcm {
                     type plug
                     slave.pcm "hw:1,0"
             } 
     }
    
     ctl.!default {
            type hw
            card 1
    }

.asoundrc pour micro PlayStation Eyes (gestion 4 micros) et sortie audio JACK
pcm.array {
    type plug
    slave.pcm "hw:1,0"
}

pcm.array_gain {
    type softvol
    slave {
        pcm "array"
    }
    control {
        name "Mic Gain"
        count 2
    }
    min_dB -10.0
    max_dB 5.0
}

pcm.cap {
    type plug
    slave {
        pcm "array_gain"
        channels 4
    }
    route_policy sum
}

pcm.!default {
    type asym

    ### Playback object ###
    playback.pcm {
        type plug
        slave.pcm "hw:0,1"
    }

    ### Capture object ###
    capture.pcm {
        type plug
        slave.pcm "cap"
    }
}

ctl.!default {
    type hw
    card 0
}

ctl.cap {
    type hw
    card 1
}

Maintenant que notre micro est bien reconnu, nous allons ajuster son niveau d’enregistrement et le volume de sortie audio avec la commande : alsamixer

Servez-vous des flèches HAUT/BAS de votre clavier pour monter ou baisser le volume de sortie audio d’abord.

Puis faites TABULATION pour ajuster le volume d’enregistrement du micro.

Une TABULATION supplémentaire vous donnera une vue d’ensemble.

Quittez avec ECHAP

Vérification du bon fonctionnement du micro


Maintenant que notre micro est complètement configuré nous allons nous assurer qu’il fonctionne à merveille !

Nous allons faire un test d’enregistrement et nous réécouter :slight_smile:

Dans /home/pi tapez la commande : arecord test.wav
Laissez passer quelques secondes, tapotez sur votre micro puis stoppez l’enregistrement avec CTRL + C

Ensuite pour réécouter l’enregistrement, faites simplement : aplay test.wav

Si tout s’est bien passé jusqu’ici, vous devriez vous entendre tapoter sur votre micro :smiley:

Vous pouvez sourire et vous féliciter tout marche et vous allez pourvoir entrer dans le vif du sujet :
GLADYS-VOICE !

Installation de Gladys-Voice


Nous avons donc un micro qui fonctionne ! Génial nous allons pouvoir bientôt demander à Gladys la météo à la voix !

Commençons par télécharger les sources du projet, placez-vous dans le répertoire de votre choix, cela n’a pas d’importance, chez moi c’est /home/pi pour que tout soit plus facile :slight_smile:

Exécutez ensuite la commande :

git clone https://github.com/GladysProject/gladys-voice

Le téléchargement des sources va alors s’effectuer et vous créer un dossier gladys-voice dans votre répertoire courant.

Placez-vous dans ce nouveau dossier : cd gladys-voice

Et installez les dépendances : npm install

Cette étape est cruciale, il est important de bien la laisser se dérouler jusqu’à la fin.
Vous pourriez obtenir en cours d’exécution une erreur du type : "Error 404 when tried download…"
Des sources (fichier .o) seront alors directement téléchargés et compilés sur le Pi.

Après une interminable attente vous pourrez passer à la suite :slight_smile:

Sauf si vous êtes l’heureux propriétaire d’un Raspberry Pi de première génération Model B et B+ ou Pi Zero / Zero W :

C’est bêtes là tournent sur ARMv6 et e module grpc est pré-compilé pour fonctionner avec du ARMv7, il faut forcer le rebuild du module avec la commande suivante dans le répertoire /gladys-voice

npm rebuild --build-from-source grpc

Une fois fait vous pourrez continuer ! Fait couler un café, c’est long… très long… :wink:

Configuration de Google Cloud Console


Cette partie du tutoriel est EXTRÊMEMENT importante ! Sans un compte Google Cloud Console correctement configuré il vous sera impossible d’envoyer des requêtes à l’API Google Speech et donc d’effectuer la reconnaissance vocale.

INFORMATION IMPORTANTE : Pour utiliser certaines APIs un compte de facturation est nécessaire, de ce fait vous devrez renseigner vos codes de carte bleue, rassurez-vous, aucun débit ne sera effectué. Votre CB est demandée uniquement en prévision d’un éventuel changement d’offre Gratuite vers Payante, ce qui dans notre cas ne devrait pas avoir lieu puisque l’offre gratuite suffit amplement à notre besoin.

Voici donc la marche à suivre :

Rendez-vous à l’adresse : Google Cloud Console
Rendez-vous sur l’onglet FACTURATION

Créez un compte de facturation :

Nommez-le :

Suivez les instructions de configuration :

Créez ensuite un projet et sélectionnez-le

Activez maintenant la Speech API, via le menu BIBLIOTHÈQUE

Cliquez sur “Activer” :

Lors de l’activation on vous demandera d’y associer un compte de facturation, vous devrez alors sélectionner le compte précédemment créé.

Maintenant que l’API Speech est activée et la facturation associée nous allons pouvoir générer notre fichier JSON qui autorisera Gladys à y accéder.

Dans le menu IDENTIFIANTS :

Cliquez sur Créer des identifiants et choisissez Clé de compte de service

Créez un nouveau compte de service
Renseignez un nom (par ex : gladys) puis choisissez le rôle Propriétaire
Entrez un Id de compte de service (par ex : gladys)
Sélectionnez le format JSON et cliquez sur Créer

La création déclenchera le téléchargement de votre fichier JSON

/!\ Conservez bien ce fichier c’est votre unique copie /!\

Configuration de Gladys-Voice


Notre compte Google Cloud Console est maintenant correctement configuré nous pouvons attaquer la configuration de Gladys-voice

Poussez sur votre Raspberry Pi le fichier JSON précédemment téléchargé, vous pouvez le renommer pour que ce soit plus simple (chez moi par ex : gladys-speech.json), dans le dossier gladys-voice/data/

Vous pouvez par exemple le pousser avec FileZilla :
Hôte : votre IP gladys | Identifiant : pi | Mot de passe : raspberry | Port : 22

Profitez-en pour récupérer le fichier config.js dans le dossier gladys-voice que nous allons devoir éditer

ou éditez-le directement avec la commande :

sudo nano config.js

Modifiez les lignes comme suit :

Votre Project Id : à récupérer sur le tableau de bord Google Cloud Console
Votre fichier JSON : entrez le nom de votre fichier JSON
Votre IP Gladys : URL de Gladys (ne rentrez pas l’adresse HTTPS, conservez l’HTTP et le port 8080 même si vous avez activé le SSL)
Votre Token Gladys : à générer sur Gladys dans ParamètresSécurité

Sauvegardez vos modifications (avec CTRL + O puis CTRL + X si vous avez utilisé la commande sudo nano citée plus haut)
Et/ou poussez votre fichier dans le dossier gladys-voice si vous l’aviez récupéré avec FileZilla.

Modification de Sonus


Cherchez le fichier index.js dans gladys-voice/node_modules/sonus/ et modifiez les lignes ci-dessous avec un sudo nano index.js

Remplacez :

// defaults
opts.models = models
opts.resource = opts.resource || 'node_modules/snowboy/resources/common.res'
opts.audioGain = opts.audioGain || 2.0
opts.language = opts.language || 'en-US' //https://cloud.google.com/speech/docs/languages

Avec vos propres chemins, il peuvent être différents selon votre installation, chez moi ça donne :

opts.models = models
opts.resource = opts.resource || '/home/pi/gladys-voice/data/common.res'
opts.audioGain = opts.audioGain || 2.0
opts.language = opts.language || 'fr-FR' //https://cloud.google.com/speech/docs/languages

Une fois la modification effectuée, sauvegardez le fichier.

Démarrage de Gladys-Voice


Dans le dossier gladys-voice, exécutez la commande :

pm2 start app.js --name gladys-voice

Dans les logs pm2 (pm2 logs), vous devriez observer les lignes suivantes :

Vérification et utilisation de Gladys-Voice


Vérifions maintenant que notre reconnaissance vocale fonctionne correctement.
Prenez votre micro et dites “Gladys

Si tout marche, vous entendrez le son de confirmation d’écoute et la console vous affichera :

Vous pourrez alors lui poser votre question, par exemple : “Quelle est la météo ?” ou “Réveille-moi demain à 8h00

Vous verrez apparaître vos demandes et les réponses dans les logs pm2.

Si vous êtes ici sans message d’erreur,

BRAVO !

Vous avez installé et configuré Gladys-Voice avec brio et allez donc pouvoir vous amuser à lui poser des questions !

/!\ Note

Suite au nombre grandissant de messages postés sur ce tutoriel, il est désormais fermé afin de garantir une meilleure lisibilité de celui-ci.

Si toutefois vous avez un problème après avoir réalisé ce tutoriel et que vous ne trouvez pas de solution dans les commentaires ci-dessous, n’y même sur le forum, je vous demanderais de créer un nouveau sujet afin que quelqu’un puisse vous aider :slight_smile:


[RÉFÉRENTIEL] - Les tutoriels
Branchement en USB du JABRA 410 sur RASPBERRY 3
[TUTORIEL] Installation Kinect pour la reconnaissance vocale
[RÉSOLU] - Erreur Gladys voice
[resolu] Gladys ne répond pas
Changer sortie son du module speak
Communication avec Gladys
Voicers et speak modules matériels
[Résolu] Installation gladys-voice, pb snowboy
[RÉSOLU] - Carte son USB UGreen
[RÉSOLU] - Suite de mon installation ; RFLink et Gladys-Voice
Paramétrage sortie haut parleur et micro via carte son USB
Plantronics Calist P420 Compatible
Paramétrage sortie haut parleur et micro via carte son USB
[Résolu]Gladys-voice sur VirtualBox
[Résolu] Module Météo Brain KO
Utilisation d'un micro pour commande vocal
[RESOLU] Installation respeaker 4
(RÉSOLU) Gladys ne répond pas
Des conseils pour une installation domotique complète?
[TUTORIEL] Installation Kinect pour la reconnaissance vocale
Problème installation Micro Playstation Eye pour reconnaissance vocale
Problème reboot après installation speak
(RÉSOLU) Gladys ne répond pas
Bonjour à tous ! Présentation d'un nouveau noob ;)
#2

Bonjour ! Merci pour ce super tuto !

Je rajouterais une petite partie pour ceux qui utilise comme micro la cam Eyes de la playstation. Par défault Alsa ne semble pas fonctionner avec ce périphérique. Pour ma part, j’ai du passer par Pulse Audio et effectuer les étapes suivantes pour pouvoir avoir des tests de micro fonctionnels.

1 - Installer Pulse

sudo apt-get install gstreamer0.10-pulseaudio libao4 libasound2-plugins libgconfmm-2.6-1c2 libglademm-2.4-1c2a libpulse-dev libpulse-mainloop-glib0 libpulse-mainloop-glib0-dbg libpulse0 libpulse0-dbg libsox-fmt-pulse paman paprefs pavucontrol pavumeter pulseaudio pulseaudio-dbg pulseaudio-esound-compat pulseaudio-esound-compat-dbg pulseaudio-module-bluetooth pulseaudio-module-gconf pulseaudio-module-jack pulseaudio-module-lirc pulseaudio-module-lirc-dbg pulseaudio-module-x11 pulseaudio-module-zeroconf pulseaudio-module-zeroconf-dbg pulseaudio-utils oss-compat -y

2 - Editer le fichier de configuration de pulse
sudo nano /etc/pulse/default.pa
Dé-commenter la ligne “load-module module-alsa-source device=hw:1,0”

3 - Faire le test son
Normalement, lorsque vous exécuter alsamixer, vous devriez voir les micros de disponibles et non plus la bad réponse “cannot load mixer controls: Invalid argument”.

Je test la suite désormais, mais déjà, le test son est positif ce qui n’était pas le cas avant !

EDIT : Tout fonctionne !


#3

Bien vu ! Je pourrai l’ajouter au tuto :slight_smile:


#4

Bravo pour ce super tuto ! je vais peut-etre m’y mettre (avec un kinect, histoire de galérer un peu =_= )


#5

mon fichier est vide et quand je veux le sauver je ne sais pas quel nom lui donner


#6

Le nom de ce fichier de conf c’est .asoundrc :slight_smile:


#7

C’est normal qu’il soit vide s’il n’y a jamais eu de configuration.
En effet, comme l’a dit @kusi il faut le sauvegarder avec le nom .asoundrc


#8

Bon je mettais precipiter…

Dans mon fichier Alsace j ai ça

GNU nano 2.2.6 File: /usr/share/alsa/alsa.conf

ALSA library configuration file

pre-load the configuration files

@hooks [
{
func load
files [
{ @func concat strings [
{ @func datadir }
“/alsa.conf.d/”
]
}
“/etc/asound.conf” “~/.asoundrc”
] errors false
}
]

load card-specific configuration files (on request)

GNU nano 2.2.6 File: /usr/share/alsa/alsa.conf

# ALSA library configuration file

pre-load the configuration files

@hooks [
{
func load
files [
{
@func concat
strings [
{ @func datadir }
“/alsa.conf.d/”
]
}
“/etc/asound.conf”
“~/.asoundrc”
]
errors false
}
]

load card-specific configuration files (on request)

cards.@hooks [

{

ALSA library configuration file

files [

                    {

pre-load the configuration filesunc concat strings [

@hooks [ { @func datadir }
{ “/cards/aliases.conf”
func load ]
files [ }
] {
} @func concat { strings [
func load_for_all_cards { @func datadir }
files [ “/alsa.conf.d/”
{ ]
} @func concat
“/etc/asound.conf” “~/.asoundrc” { @func datadir }
] “/cards/”


#9

[email protected]:~ $ arecord -l
**** List of CAPTURE Hardware Devices ****
ALSA lib control.c:953:(snd_ctl_open_noupdate) Invalid CTL hw:0
arecord: device_list:277: control open (0): No such file or directory
ALSA lib control.c:953:(snd_ctl_open_noupdate) Invalid CTL hw:1
arecord: device_list:277: control open (1): No such file or directory

[email protected]:~ $ lsusb
Bus 001 Device 004: ID 046d:08d9 Logitech, Inc. QuickCam IM/Connect
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

J’ai tout casser je crois :thinking:


#10

Le lsusb est bon mais le arecord -l a l’air mal en point ouais ^^
Comment t’en est arrivé là :open_mouth:


#11

Salut à tous :D, étant novice j’aurais besoin de votre aide car lorsque je suis le début du tutoriel (lors de la configuration du micro) après le raspberry ne détecte plus mon haut parleur branché en Jack 3.5mm. J’ai un peu chipoté et j’ai remarqué que si je fais cela:

sudo nano /usr/share/alsa/alsa.conf
Et remplacez
defaults.ctl.card 0
defaults.pcm.card 0
par
defaults.ctl.card X
defaults.pcm.card X

ou que je crée ce fichier: sudo nano ~/.asoundrc
c’est là que survient mon problème.

Merci d’avance pour votre aide :slight_smile:


#12

Salut !

Dans ton fichier .asoundrc il faut indiquer à alsa de passer par la sortie du raspi pour ton haut parleur, et par la carte usb pour le micro.
Ca doit donner un truc comme ça :

pcm.!default {
     type asym
     playback.pcm {
             type plug
             slave.pcm "hw:0,0" #le bcm2835
     }
     capture.pcm {
             type plug
             slave.pcm "hw:X,Y" #ton micro usb, à modifier avec tes valeurs
     } 
 }

ctl.!default {
    type hw
    card 1
}

#13

Ha OK :slight_smile: Merci beaucoup !!


#14

Bon j ai Resolution ce probleme en installant des driver pour webcam. Du coup il reconnaît le microphone


#15

Merci pour ce super tuto!
Une précision cependant: je pense que le micro que vous avez utilisé est du type dictaphone, ce qui veut dire qu’il est aussi le périphérique de lecture.
Donc si on utilise un micro simple et que la lecture se fait via un HP branché en jack par ex, il faut configurer alsa.conf avec defaut.ctl.card 1 et defaut.pcm.card 0.
De meme, dans le fichier .asoundrc, il faut avoir:
playback.pcm {
type plug
slave.pcm “hw:0,0”

Dites moi si je fais erreur. Mais chez moi, ca marche comme cela.


#16

J’ai encore une petite question car lors de la configuration de Sonus je n’ai visiblement pas le même chemin d’accès que vous mais je ne sais pas comment trouver le mien.
Merci d’avance !


#17

Hello

Super tuto

Qu’en est-il de la qualité / performance du micro pour le RPI ?


#18

@pyb tu as parfaitement raison ! Je voulais justement me pencher sur les différents cas d’utilisation et éditer mon titi avec les config adéquates ! :+1:

@Ceksi tu parles du chemin ‘resources’ il faut que tu mettes le chemin complet vers le fichier common.res de ton dossier gladys-voire

@Jean-Philippe qu’entends tu par là ? Cela dépends directement du micro utilisé ?


#19

Alors le chemin que j’ai indiqué (/home/pi/gladys-voice/data/common.res) me semble être bon pourtant le raspberry ne reconnait pas le mot gladys alors que mon micro fonctionne correctement.

Lorsque je fais cette commande : [email protected]:~/gladys-voice $ pm2 start app.js --name gladys-voice , j’obtiens cela:

[PM2] Applying action restartProcessId on app [gladys-voice](ids: 1)
[PM2] gladys-voice
[PM2] Process successfully started
┌──────────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ watching │
├──────────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────────┤
│ gladys │ 0 │ fork │ 1403 │ online │ 0 │ 2D │ 0% │ 86.9 MB │ disabled │
│ gladys-voice │ 1 │ fork │ 2181 │ online │ 90 │ 0s │ 80% │ 14.8 MB │ disabled │
└──────────────┴────┴──────┴──────┴────────┴─────────┴────────┴

Je suis à peu près sûr que mon micro fonctionne correctement, je l’ai testé et on entend assez distinctement lorsque je dis gladys. Pour info je dispose de ce micro là https://www.amazon.fr/gp/product/B01142EPO4/ref=oh_aui_detailpage_o05_s00?ie=UTF8&psc=1.


#20

J’avais cru comprendre qu’un micro spécial raspberry pi avait été utilisé par plusieurs utilisateur du forum, donc je me demandais si ce tuto prenait comme postulat que c’était le micro recommandé :slight_smile:

Car mon Kinect me pose des soucis de perte de “connexion” intempestive, et puis il est un peu gros.
Donc un micro plus intégré me plairait d’avantage…