Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#1 Le 11/01/2016, à 19:36

kholo

[Script/bash] [Tutoriel] Reconnaissance vocale et de la parole -p1

Reconnaissance vocale et de la parole
Partie 1 : les bases
je vais coller à la doc et tenter d'aller un peu plus loin
Cela n'est qu'une partie car le travail supplémentaire consiste à adapter les fichiers de dictionnaires et de grammaires pour améliorer PocketSphinx... mais c'est pas gagné !

synopsis
on va utiliser PocketSphinx pour la première partie. L'idée est d'arriver à quelque chose de fonctionnel (comme la doc) et d'aller un petit peu plus loin (programmation de la première couche de compréhension).
Il reste encore des améliorations à faire car, par exemple, si on lance un processus, la reconnaissance est accaparée et, donc, impossible de fermer ce processus avec une commande vocale... mais cela viendra.

Installations
Créez un dossier dans votre dossier personnel pour y mettre les scripts suivants :
donnez un nom à ce script et lancez le.
Il fera l'installation des logiciels et des dictionnaires et fichiers accessoires.

script :

#!/bin/bash
# ----------------------------------------------
nomlogiciel=`basename "$0"`		
# FONCTION :	
VERSION="alpha"
# NOTES DE VERSIONS
# ----------------------------------------------
# à mettre au début d'un fichier bash
PID=$$
FIFO=/tmp/FIFO${PID}
mkfifo ${FIFO}
# ----------------------------------------------
echo "lancement $nomlogiciel..."

# Depuis la doc Ubuntu
# https://doc.ubuntu-fr.org/pocketsphinx

gksudo apt-get install python-pocketsphinx libpocketsphinx1 gstreamer0.10-pocketsphinx python-pyaudio

wget -O lium_french_f0.tar.gz http://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/Archive/French%20F0%20Broadcast%20News%20Acoustic%20Model/lium_french_f0.tar.gz/download
tar -xvzf lium_french_f0.tar.gz
cd lium_french_f0/
gksudo mkdir -p `pkg-config --variable=modeldir pocketsphinx`/hmm/fr_FR/french_f0
gksudo mv * `pkg-config --variable=modeldir pocketsphinx`/hmm/fr_FR/french_f0

wget -O french3g62K.lm.dmp http://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/French%20Language%20Model/french3g62K.lm.dmp/download
gksudo mkdir -p `pkg-config --variable=modeldir pocketsphinx`/lm/fr_FR/
gksudo mv french3g62K.lm.dmp `pkg-config --variable=modeldir pocketsphinx`/lm/fr_FR/

wget -O frenchWords62K.dic http://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/French%20Language%20Model/frenchWords62K.dic/download
gksudo mv frenchWords62K.dic `pkg-config --variable=modeldir pocketsphinx`/lm/fr_FR/

wget -O lium_french_f2.tar.gz http://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/Archive/French%20F2%20Telephone%20Acoustic%20Model/lium_french_f2.tar.gz/download

# Pour tester exécuter cette ligne dans une console
# pocketsphinx_continuous -dict /usr/share/pocketsphinx/model/FR/frenchWords62K.dic -hmm /usr/share/pocketsphinx/model/FR/ -lm /usr/share/pocketsphinx/model/FR/french3g62K.lm.dmp

Les Modules
1. Ecoute
2. Parser-ecoute
3. Traite-parseur
4. Parse_dico

Une fois les fichiers créés, pensez à les rendre exécutable (clic droit sur le fichier / propriétés / permissions / cochez "Autoriser l'exécution du fichier comme un programme").
Puis vous lancerez "ecoute" dans un terminal et "parser-ecoute" dans un autre.

1. Ecoute
c'est pocketsphinx et sa configuration de base (dictionnaire plein… trop même !)
il en ressort un fichier texte que l'on va lire au fur et à mesure qu'il sera écrit

2. Parser-ecoute
On lit ligne par ligne et en continu le fichier issu de la reconnaissance de Ecoute

3. Traite-parseur
le premier traitement des instructions
ici seront les commandes communes et les changements de mode à ajouter plus tard.

4. Parse_dico
deuxième niveau du traitement si le mot ou la phrase n’appartiennent pas à traite-parseur, on va chercher plus loin en fonction du mode de recherche

Les scripts en bash
créez le fichier : ecoute
1. Ecoute
créez le fichier : ecoute
(pas de majuscule ni d'accent ni d'espace ou d’extension)

#!/bin/bash
#*************************************#
#~ NOM : ecoute	
#~ FONCTION :	
#~ VERSION="alpha"
#~ NOTES DE VERSIONS
#
#*************************************#
echo "initialisation"
ps="$(pkg-config --variable=modeldir pocketsphinx)"
	ledict="$ps/lm/fr_FR/frenchWords62K.dic"
	#~ lagramm="$ps/lm/fr_FR/grammaire.gram"
	lehmm="$ps/hmm/fr_FR/french_f0"
	lelm="$ps/lm/fr_FR/french3g62K.lm.dmp"
	lefichier="reconnaissances.txt"

echo "début de la reconnaisance... patientez"
echo "Pour arrêter le serveur faites Ctrl + C dans le terminal"

pocketsphinx_continuous -inmic yes -agc noise -hmm $lehmm -lm $lelm -dict $ledict 2>/dev/null > $lefichier 

echo "serveur arrêté"

exit 0

2. Parser-ecoute
créez le fichier : parser-ecoute
(pas de majuscule ni d'accent ni d'espace ou d’extension)

#!/bin/bash
#*************************************#
# NOM : 		
# FONCTION :	
# VERSION="alpha"
# NOTES DE VERSIONS
#
#*************************************#
# echo "parser-ecoute -----------------" 
file="reconnaissances.txt"

	tail -f -n 1 $file | while read line;do
	   ./traite-parseur "$line"
	done
exit 0

3. Traite-parseur
créez le fichier : traite-parseur
(pas de majuscule ni d'accent ni d'espace ou d’extension)

#!/bin/bash
#*************************************#
# NOM : 		
# FONCTION :	
# VERSION="alpha"
# NOTES DE VERSIONS
#
#*************************************#
# echo "traite-parseur -----------------" 

une_phrase="$1"

# echo "
# *********************************
# *********** MODE TEST ***********
# *********************************"
# une_phrase="000000001: radio"
#* echo "je test l'entrée : "
#* echo "$une_phrase"

# d'abord on traite les commandes de retour de PocketSphinx
case "$une_phrase" in
	"READY....")
		echo "Prêt..."
		exit
		;;
	"Listening...")
		echo "..." #"j'écoute !!!"
		exit
		;;
	"Stopped listening, please wait...")
		echo "..." #"attends !!!"
		exit
		;;
	*)
		
		# retire tout ce qu'il y a avant le ": "
		la_phrase="${une_phrase##*: }"

		# echo "$la_phrase"
esac

# ici on va intercepter les phrases ou mots les plus importants ou répétitifs
case "$la_phrase" in
    "au repos")
        echo "Tranquille"
        ;;
    "au boulot")
        echo "vas y, je te rejoint !"
        ;;
    "quelle heure est -il")
    # "heure")
        echo "je donne l'heure"
        echo $(date)
        exit 1
        ;;
    *)
        echo "dico spécifique $la_phrase"
        ./parse_dico "test" $la_phrase
        # retour=parse_dico "test" $la_phrase

esac

exit

4. Parse_dico
créez le fichier : parse_dico
(pas de majuscule ni d'accent ni d'espace ou d’extension)

#!/bin/bash
#*************************************#
# NOM : 		
# FONCTION :	
# VERSION="alpha"
# NOTES DE VERSIONS
#
#*************************************#
# echo "parse_dico -----------------" 


function mode_test {
	# zenity --info --text="mode test"
	case "$1" in
		"bonjour" )
			echo "bonjour $USER"
			return 1
			exit
			;;
		"musique" )
			vlc &
			return 1
			exit
			;;
		"fermé musique" )
			killall vlc
			return 1
			exit
			;;

		"courrier" )
			thunderbird &
			return 1
			exit
			;;

		"fermé courrier" )
			killall thunderbird
			return 1
			exit
			;;

		"internet" )
			firefox &
			return 1
			exit
			;;

		"fermé internet" )
			killall firefox
			return 1
			exit
			;;

		"fichier" )
			nautilus &
			return 1
			exit
			;;

		"fermé fichier" )
			killall nautilus
			return 1
			exit
			;;

		"radio" )
			vlc "http://streaming.radio.funradio.fr/rtl2-1-44-128" &
			return 1
			exit
			;;

		*)  :
			return 0
			exit			
			;;
	esac	
}
exit 0

Hors ligne

#2 Le 11/01/2016, à 20:09

nam1962

Re : [Script/bash] [Tutoriel] Reconnaissance vocale et de la parole -p1

Je suis le fil !


Almanet doLys de l'open source : mon tuto pour optimiser / finaliser une install
Xubuntu devel - Manjaro unstable - OpenSUSE tumbleweed (GeckoLinux) -Debian Testing Et vous ?
57 convertis  IRL (n'ont pas eu le choix...).
Un jeune site que j'aime bien, le top du T-shirt homme ...bio et éthique en plus : https://goudronblanc.com

Hors ligne

#3 Le 11/01/2016, à 20:22

nam1962

Re : [Script/bash] [Tutoriel] Reconnaissance vocale et de la parole -p1

Joseph Pujol par exemple ?


Almanet doLys de l'open source : mon tuto pour optimiser / finaliser une install
Xubuntu devel - Manjaro unstable - OpenSUSE tumbleweed (GeckoLinux) -Debian Testing Et vous ?
57 convertis  IRL (n'ont pas eu le choix...).
Un jeune site que j'aime bien, le top du T-shirt homme ...bio et éthique en plus : https://goudronblanc.com

Hors ligne

#4 Le 12/01/2016, à 10:01

kholo

Re : [Script/bash] [Tutoriel] Reconnaissance vocale et de la parole -p1

grandtoubab a écrit :

Ça existe de la parole non vocale?

je réponds pour faire avancer le chmilblick
PocketSphinx (ps) fait de la reconnaissance vocale.
le retour est de 3 niveaux :
les retours qui concernent plus le système, le programme.
les infos sur sont état : "READY....", "Listening...", "Stopped listening, please wait..."
et la reconnaissance : des mots ou des phrases.
c'est la première partie.

Ensuite il faut "parser" ces ensembles de mots ou des phrases
et c'est là que commence le travail de reconnaissance de la parole.

Avec des instructions simples, en diminuant et adaptant le dico et la grammaire,
on peut atteindre un niveau supérieur à 90% (pocketsphinx à une fonction pour faire ce calcul)
et, même dans un environnement bruyant.

Dans une discussion naturelle, le contexte influe sur notre façon de comprendre
car on s'attend intuitivement à entendre un certain type d'information.
Si on comprends mal certain mot, on est capable de remplir les trous.
"un peu cmome l'écirture et l'invesrion de ltetre"
dur à lire mais on comprend  ;°)

J'ai bien essayé de réinventer la roue en remontant au dessus de ps (sphinx)
mais ce que ps permet est prodigieux ce qui en fait un mastodonte à maîtriser.

avec mes trois petits scripts
on peut rapidement mettre en place un service de domotique.

Hors ligne

#5 Le 17/01/2016, à 16:04

Xzu Rukneg

Re : [Script/bash] [Tutoriel] Reconnaissance vocale et de la parole -p1

Merci kholo.

Pour ma part je cherche une solution simple pour faire de la dictée numérique uniquement (libre et sous ubuntu).
Deux questions: 1- Pense tu que ce que tu propose permet d'y arriver?
                          2- Connais tu une méthode "plus simple"?

Dernière modification par Xzu Rukneg (Le 17/01/2016, à 16:04)

Hors ligne

#6 Le 19/01/2016, à 11:31

kholo

Re : [Script/bash] [Tutoriel] Reconnaissance vocale et de la parole -p1

Xzu Rukneg a écrit :

Merci kholo.

Pour ma part je cherche une solution simple pour faire de la dictée numérique uniquement (libre et sous ubuntu).
Deux questions: 1- Pense tu que ce que tu propose permet d'y arriver?
                          2- Connais tu une méthode "plus simple"?

la reconnaissance numérique de la parole est au même niveau que celle de l'écriture...
il existe des outils, plutôt en kit !

Dans le gratuit (pas spécialement libre, on cherche juste à ce que cela fonctionne),
c'est PocketSphinx (Ps) qui est devant (c'est mon avis)
ensuite tout tourne autour de Sphinx (vocal, attention il existe un autre Sphinx).
un pdf sur shinx pour voir à quel point ça ne se fait pas tout seul

sphinx sur raspberry pi en java

Donc pour Ps, il existe une vaste plage de réglages possibles à commencer par les fichiers externes
je pense qu'il faudrait mettre un gros coup de balais dans le dico : il y a trop de choses qui emmènent dans le mur lors de la reconnaissance.

il y a aussi un affinage des statistiques liées à la grammaire. Là ça commence à devenir un gros truc à faire quand on s'y met. J'y ai juste mis le nez !

je ne rentre pas trop dans les détails; la démonstration est :
Pour le moment (janvier 2016), on a pas encore d'outils ouverts ou libres qui permettent de travailler efficacement dans la paroles et son flot. Il existe des logiciels payants (les plus connus fonctionnent sous Windows) qui font cela relativement bien.

Pour le libre, pour le moment, il faudra se contenter de phrases simples :
-ouvrir frigo
-sortir bière
-amener ça !
et attendre que quelqu'un construise le robot qui s'exécute !

Hors ligne

#7 Le 16/10/2016, à 08:53

emile 197

Re : [Script/bash] [Tutoriel] Reconnaissance vocale et de la parole -p1

Salut

super travail kholo

comme j'utilise tes scripts  je poste mes travaux

pour alléger la reconnaissance on fait un fichier txt de mots


allume
salon

limière

puis on va faire un tour sur  Sphinx Knowledge Base Tool -- VERSION 3

on clic sur parcourir  on selectionne  notre fichier texte  puis clic sur COMPILE KNOWLEDGE BASE

on telecharge le zip  a decompresser dans le dossier du projet


éditer le script ecoute pour le modifier (nous utilison .dic et .lm)

kholo a écrit :

#!/bin/bash
#*************************************#
#~ NOM : ecoute   
#~ FONCTION :   
#~ VERSION="alpha"
#~ NOTES DE VERSIONS
#
#*************************************#
echo "initialisation"
#ps="$(pkg-config --variable=modeldir pocketsphinx)"
    ledict="$ps 0990.dic"
    #~ lagramm="$ps/lm/fr_FR/grammaire.gram"
    #lehmm="$ps/hmm/fr_FR/french_f0"
    lelm="$ps 0990.lm"
    lefichier="reconnaissances.txt"

echo "début de la reconnaisance... patientez"
echo "Pour arrêter le serveur faites Ctrl + C dans le terminal"

pocketsphinx_continuous -lm $lelm -dict $ledict 2>/dev/null > $lefichier

echo "serveur arrêté"

exit 0

un petit plus

on ajoute une voie a notre projet

avec svoxpico 


pico2wave -l fr-FR -w test.wav "je técoute !";play test.wav;

Dernière modification par emile 197 (Le 16/10/2016, à 08:54)

Hors ligne

#8 Le 17/10/2016, à 12:10

kholo

Re : [Script/bash] [Tutoriel] Reconnaissance vocale et de la parole -p1

ouhhh !!!
je vais regarder tout ça à tête reposée !
merci pour le complément !

edit :
donc j'ai ajouter :

sudo apt-get install libttspico-utils

puis
le test fonctionne !

pico2wave -l fr-FR -w test.wav "je técoute !";play test.wav;

Dernière modification par kholo (Le 17/10/2016, à 17:13)

Hors ligne

#9 Le 04/09/2017, à 14:53

Rémi1995

Re : [Script/bash] [Tutoriel] Reconnaissance vocale et de la parole -p1

Et est-ce que c'est possible d'avoir la même chose pour le français ?? Parce qu'il y a des mauvaises prononciation dans le fichier généré

Hors ligne

#10 Le 04/09/2017, à 17:01

kholo

Re : [Script/bash] [Tutoriel] Reconnaissance vocale et de la parole -p1

alors si tu parles de prononciation c'est de la synthèse vocale, pas de la reconnaissance...
pour ça j'ai un autre script ; parle (pas original mais facile de me souvenir)
ça se passe avec espeak et mbrola

sudo apt install espeak mbrola mbrola-fr*

(j'ai laissé la version pico en commenté dedans)

mkdir $HOME/bin
gedit $HOME/bin/parle

et coller le texte suivant dedans:

#!/bin/bash
nomlogiciel="$(basename "$0")"
# ****************************************
votretexte="$@"
# echo "texte de ${#votretexte} caractères"
# ****************************************
# test la présence d'arguments
erreur=65
if [ ! -n "$1" ] ; then
	leTexte="Usage :... $nomlogiciel suivi du texte à dire"
	$0 "Pour utiliser ce script, taper $nomlogiciel, suivi du texte à dire" &
	zenity --info --title = --text="Usage : \n\n$nomlogiciel texte"
	exit $erreur
fi
#****************************************
#test si trop de caractères (si >= 2^15)
# [ ${#votretexte} -ge 32768 ] && parle 'le texte à dire est trop long' && exit ;

#****************************************
#VERSION pico2wave
#pico2wave -l fr-FR -w test.wav "$votretexte" ; 
#aplay test.wav 
#****************************************

#pico2wave -l fr-FR -w /tmp/pico.wav "$votretexte" && aplay /tmp/pico.wav && rm -f /tmp/pico.wav


# CETTE LIGNE LANCE AVEC PICO2WAV
# pico2wave -l fr-FR -w /tmp/pico.wav "$votretexte" && aplay /tmp/pico.wav
#****************************************
# exit 0

# ****************************************
# VERSION espeak
# Début de la section de configuration
# définition de la voix à utiliser par Mbrola, 
# à adapter selon la voix choisie et son chemin
# ****************************************

# /usr/share/mbrola/voices
# fr1  fr1.txt  fr2  fr2.txt  fr3  fr3.txt  fr4  fr4.txt  fr6  fr6.txt
VOIX='/usr/share/mbrola/voices/fr1' # ATTENTION A L'EMPLACEMENT DES VOIX

# TYPE='mb/mb-fr4' # à décommenter si vous avez téléchargé une voix de femme
TYPE='mb/mb-fr1' # à décommenter si vous avez téléchargé une voix d'homme

# Fin de la section de configuration
# ****************************************
# on teste si la lecture est en cours, pour l'arrêter le cas échéant
##### test pour savoir si la lecture est en route #####
leMbrola="$(ps -A | grep mbrola | awk '{ print $1 }' )"
if [ ! -z $leMbrola ]; then
     kill $leMbrola && sleep 1
else
	espeak -v $TYPE "$votretexte" -s 150 -p 40 "$@" | mbrola $VOIX - -.au | aplay
fi
# ****************************************

exit 0

pour l'appeler faire :

parle "le texte à dire"

Hors ligne

#11 Le 06/09/2017, à 16:12

Rémi1995

Re : [Script/bash] [Tutoriel] Reconnaissance vocale et de la parole -p1

Non non je parlais des phonèmes pour le dico

Hors ligne

#12 Le 06/09/2017, à 16:51

kholo

Re : [Script/bash] [Tutoriel] Reconnaissance vocale et de la parole -p1

voilà, c'est tout le problème avec PS : les dicos
on peut générer un dico de reconnaissance mais il y a toute une procédure pour le rendre utilisable
et c'est très orienté grand breton donc pas beaucoup d'exemples pour le français
la lecture ici et et aussi

Hors ligne