alexylem / jarvis

Jarvis.sh is a simple configurable multi-lang assistant.
http://openjarvis.com
MIT License
806 stars 197 forks source link

[STT] Ajouter KALDI #677

Open Origin4 opened 7 years ago

Origin4 commented 7 years ago

Bonjour Déjà je voudrais remercier toute l'équipe pour avoir realise cet outil vraiment bien fait depuis un moment déjà, je parcoure votre code pour essayer de le connecter à kaldi, mais n'étant pas très fort en shell j'ai du mal , donc je voudrai savoir si c'est possible et comment on peut connecter Jarvis à un autre STT autre que ceux prévue à la base

Merci beaucoup

Oliv4945 commented 7 years ago

Le mieux est de créer un nouveau dossier dans stt_engines et de t'inspirer de ce qui a été fait dans les autres dossiers. Ensuite l'ajouter à cette ligne.

Par contre j'ai un doute sur la faisabilité, je n'ai peut-être pas compris mais j'ai regardé Kaldi récement et ça m'avait l'air d'être un outil de recherche qui ne fait pas de la reconnaissance comme nous l'utilisons mais permet de tester des outils de reconnaissance, et il faut l'entraîner avec de grosses machines et 100 à 300 échantillons différents. Est-ce j'ai mal compris ? As-tu trouvé un fichier de phonèmes ?

Origin4 commented 7 years ago

oui exactement , nous utilisons diffèrent corpus déjà pré établie pour l'entrainer tout les details sont ici : https://github.com/openpaas-ng/openpaas-sp5-lm-preparation par contre Kaldi ASR(pour automatic speech recognition) permet de faire de la reconnaissance http://kaldi-asr.org/doc/about.html

merci beaucoup pour votre aide je me mets au travail et je vous tien au courant

Oliv4945 commented 7 years ago

Arf, je n'avais pas vu: où peut-on trouver les corpus pré établis ? n'hésites pas à demander si tu as des questions, c'est toujours intéressant de tester un nouveau STT

Origin4 commented 7 years ago

merci beaucoup :-) pour les corpus il sont dispo ici : https://github.com/openpaas-ng/openpaas-sp5-lm-preparation#download-corpora normalement sur cette page il ya tous les details pour construire un modele de langage et le faire tourner sous kaldi

physicien commented 7 years ago

@Origin4 Merci pour ta question, j'ai un moment essayer d'implanter Kaldi, mais ne trouvant de corpus francophone j'avais un peu mis de côté ce projet.

Oliv4945 commented 7 years ago

Super ça. Vous avez déjà essayé de faire tourner l'apprentissage sur un corpus ? ça prend combien de temps sur quel type de machine ?

Origin4 commented 7 years ago

pour l'apprentissage ce n'est pas moi qui m'en occupe mais c'est vrai que ça prend beaucoup de temps même parfois des jours (les corpus sont vraiment conséquents)

aussi là je bloque sur un souci : je me suis inspiré du code pour wit pour faire le mien mais la variable Audiofile est toujours vide, je n'arrive pas a récupérer le flux audio du coup je reçois de mon stt un json avec un champ" hypothèses " vide alors que le même code marche pour les autres STT

voici mon code

_LinSTT_transcribe () {
json=`curl -T $audiofile http://localhost:8888/client/dynamic/recognize
    $verbose && jv_debug "DEBUG: $json"
    echo $json | perl -lne 'print $1 if m{"hypotheses" : "([^"]*)"}' > $forder}

LinSTT_STT () { 
    LISTEN $audiofile || return $?
    _LinSTT_transcribe &
    jv_spinner $!
}

voici le Fichier json {"status": 0, "hypotheses": [{"utterance": ""}], "id": "337fab0b-ee95-451d-a126-66314cf0036b"}

le fichier json avec un test d'un fichier wav qui dit "salut"

{"status": 0, "hypotheses": [{"utterance": "salut"}], "id": "a866695a-17e2-4fd6-9a12-39c298d9e3a8"}

JARVIS fait bien appel a la fonction LinSTT qui fait aussi appel a la fonction _LinSTT_transcribe juste que le fichier Audiofile est vide a chaque fois

est ce que vous voyez d'où vien le souci ou avez-vous sinon un autre moyen pour récupérer le flux audio??

Oliv4945 commented 7 years ago

@Origin4

Plusieurs idées.

  1. Est-ce que ton micro fonctionne ? Si tu fais rec test.wav est-ce que tu t'entends bien avec play test.wav ?
  2. Si oui que donne le résultat de curl -T temp.wav http://localhost:8888/client/dynamic/recognize ?
  3. Si ça va bien on peut chercher le problème dans Jarvis. Que donne jarvis -nv ?
  4. Une fois ta phrase énoncée, que donne play /dev/shm/jarvis-record.wav ?
  5. Ensuite, que donne curl -T /dev/shm/jarvis-record.wav http://localhost:8888/client/dynamic/recognize
  6. Enfin, si tu ajoutes echo $audiofile dans LinSTT_STT () ?

Sinon, vu que nous sommes dans l'open-source...est-il possible d'avoir accès aux résultats de l'apprentissage ? :p

Et j'ai vu que tu as essayé de mettre les quotes `, c'est très bien mais pour faire plusieurs lignes d'un coup il suffit d'en mettre 3 à la suite, édites ton message si je ne suis pas clair, je l'ai remis en forme.

Origin4 commented 7 years ago

Merci beaucoup pour rec et play ça marche sans soucis et j'ai fait un curl avec le fichier teste de wit qui dit salut curl -/home/ravah/jarvis/stt_engines/wit/test wav "http://local host : 8888/client/dynamic/recognize" et j'ai de bons résultats {"status": 0, "hypothèses": [{"utterance": "salut"}], "id": "à866695 à-17e s 2-4 fd6-9à12-39c298d9e3à8"} par contre le fichier /dev/shm/jarvis-record.wav est complètement vide ,donc le souci viendrait-il de là ? sinon pour les résultats de l'apprentissage, comme je suis juste stagiaire dans ma boîte "LINAGORA" je vais demander à mon responsable s'il peut les mettre à votre disposition

Oliv4945 commented 7 years ago

@Origin4 Si le fichier est vide il faut chercher par là. Que donne l'étape 6

ça serait cool si on pouvait avoir accès aux résultats de l'apprentissage, pour une boite qui prone l'open source !

Origin4 commented 7 years ago

Alors j'ai avance un petit peu, j'ai juste reinstaller jarvis et reefectuer les modifications pour interger kaldi et ca marche un peu mieux (est ce que c'est normale ???) il arrive à reconnaître quelques mots des fichiers qu'il reçoit, mais est-ce que c'est normal d'avoir des fichiers "tronque" , (en effet souvent il manque des bouts des phrases ,debut et fin) parce que je pense que le modèle que nous utilisons n'arrive pas détecter les mots à cause de ce souci

et l'etape 6 renvoyai le bon chemin /dev/shm/jarvis-record.wav

sinon pour les Modèles normalement il n'y a pas de soucis, j'en ai parlé avec mon responsable et il les il mettra a disposition(Docker + Modèles) des que possible , donc il vas voir comment il vas vous les transmettre

Oliv4945 commented 7 years ago

mais est-ce que c'est normal d'avoir des fichiers "tronque" , (en effet souvent il manque des bouts des phrases ,debut et fin)

Non, tu peux jouer sur les paramètres suivants dans le menu audio Min noise duration to start Min noise perc to start Min silence duration to stop Min silence level to stop

aheba commented 7 years ago

Hello, @Oliv4945 Je suis thésard à Linagora et je m'occupe de la partie STT (effectivement nos modèles sont Open :) , et sachant qu'on est sur une perspective de l'OpenSpeech, ça sera avec un grand plaisir de vous les partager, envoi moi un mail à: aheba@linagora.com), je suis actuellement à 30% de WER sur de parole conversationnel avec des corpus OPEN tel que TCOF ou ASCYNT (tu les trouveras sur le site Ortholang), d'ici Décembre 2017, on aura, je l'espère, une version stable à 20% de WER !. @Origin4 m'a informé de ses problèmes avec notre module STT et Jarvis. J'ai jetté un coup d'oeil et: Le problème vient du programme REC dans votre code Jarvis lors de l'enregistrement du fichier Audio à partir du microphone (indépendament du module STT que ce soit Microsoft ou Kaldi) (les paramètres pour la détection d'activité vocalique sont très hasardeuses et difficile à tunner... :/) Solution: Mettre en place une fonction pertinante de détection d'activité vocalique. (j'ai travaillé sur un proto que j'ai à ma disposition, la zone de parole est détecté à partir d'une analyse fréquentiel et d'energie existant dans le signal, je pourrai éventuellement vous passer le code sous Python... "cette solution est très robuste pour la détection de l'activité vocalique") Ou une solution Open qui est au top de l'état de l'art, consiste à utiliser l'outil du laboratoire LIUM "LIUM Diaritization" : http://www-lium.univ-lemans.fr/diarization/doku.php/welcome qui permet de faire +ieurs taches dont le suivi du locuteur et la segmentation de parole .... mais surtout ce qui vous intéresse : la détection de zones de parole qui est nettement plus intéréssant que l'utilisation des paramètres de REC....

Oliv4945 commented 7 years ago

@aheba Super, merci pour ces infos.

Modèles Kaldi: ça sera avec grand plaisir. Pour l'instant je n'ai pas le temps mais je reviendrais vers toi après :-)

Concernant la détection d'activité c'est effectivement loin d'être optimal, mais il faut souligner le tour de force qu' @alexylem a réussi à faire avec rec :-), du coup je vais jeter un oeil à Lium, ça m'a l'air très intéressant surtout que ça fait aussi de l'identification, fonction souvent demandée. Par contre j'ai l'impression que le projet n'a pas bougé depuis 2013, est-ce que je me trompe ?

Dans tous les cas je suis aussi intéressé par ton script Python, peut-être plus rapide à mettre en place.

Merci Oliv'