Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Utilisation d'une instance de PocketSphinx sur serveur distant #9

Open
alexylem opened this issue Jun 23, 2016 · 32 comments
Open

Utilisation d'une instance de PocketSphinx sur serveur distant #9

alexylem opened this issue Jun 23, 2016 · 32 comments

Comments

@alexylem
Copy link
Owner

Proposé par Physicien:
Pour finir, en jouant un peu dans les settings de Jarvis sur ma RP3, je me suis demandé s'il est envisageable d'ajouter une 4e option au choix de STT engine, soit l'option de faire appel à un serveur pocketsphinx sur un PC de l'utilisateur. Je lance l'idée, car ça revient à utiliser un serveur comme celui de Google ou de Wit(Facebook), mais sans les problèmes de respect de la vie privée.

@physicien
Copy link

C'est plutôt un détail que je veux apporter pour le moment, mais les modèles et dictionaires les plus à jour sont ceux directement accessible sur le site du LIUM. Dans précédemment, nous avons essayé avec les anciens modèles du LIUM de 62000 mots, alors que les nouveaux en contiennent environ 70000 mots. Tant qu'à utiliser un serveur avec un bon PC, autant avoir les meilleurs modèles disponibles!

@physicien
Copy link

Ça doit être bon signe ça!
capture d ecran - 2016-06-27 - 18 03 33

@alexylem
Copy link
Owner Author

C'est quoi exactement? un instance de pocketsphinx sur un autre serveur?

@physicien
Copy link

physicien commented Jun 27, 2016

C'est pocketsphinx sur Debian avec le français comme langue.

@alexylem
Copy link
Owner Author

ok et ca donne quoi niveau performances en reconnaissance continue?
Ca serait bien que tu indiques les specs de la bécane à côté du résultat 😄

@physicien
Copy link

Là je suis en train d'essayer de lui link mon micro de Webcam avec -adcdev plughw:0,0 -inmic yes et je dois simplement trouver comment. Pour les specs du PC, c'est certain que je vais mettre ça à côté!

@alexylem
Copy link
Owner Author

Ok bon déjà tu as la bonne commande, j'ai réussi à le faire marcher avec la même, voir #7

@physicien
Copy link

Au pire je vais test avec un .wav vu que c'est ce qu'on va lui passer à distance de toute façon.

@physicien
Copy link

J'ai envoyé un .wav et voici l'output. J'ai visiblement un setting qui n'est pas bon, je vais donc lire attentivement l'output!
output.txt

@alexylem
Copy link
Owner Author

la traduction extraite de ton fichier:

000000000: the moon
141567 last
000000001: we are as a hand on

J'ai regardé la config il semble que tu n'ai pas de `-lm

-lextreedump    0       0
-lifter     0       0
-lm             
-lmctl              
-lmname     default     default

Commence par ca 😄

@physicien
Copy link

J'ai utilisé un .lm.bin.

@alexylem
Copy link
Owner Author

Ok mais il n'est pas passé en paramètre car dans le header de config c'est vide.
Essayes:

pocketsphinx_continuous -lm ton_language_model.lm.bin ...

@physicien
Copy link

Voici le résultat...
capture d ecran - 2016-06-27 - 18 54 59

@physicien
Copy link

Ok, je crois que c'est la version Debian de PocketSphinx qui est outdated... Je vais essayer d'arranger ça.

@physicien
Copy link

Bon, j'ai réussi à patenter quelque chose, mais il parle français. Il dit n'importe quoi, mais en français et très rapidement.

@alexylem
Copy link
Owner Author

alexylem commented Jul 30, 2016

Je pense commencer à me pencher la dessus, j'aimerai avoir une approche suffisamment générique. L'idée est de proposer un stt remote qui puisse convenir à une instance de PocketSphinx, mais aussi pourquoi pas Kaldi ou d'autre moteur de reconnaissance vocale sur machine distante.
Ainsi cela couvrira l'implémentation de #25 .

L'appel sera une requête POST http, donc il faudra qu'un serveur web (apache, nginx, python...) tourne sur la machine distante. L'URL complète sera configurable (host/IP + path + variables). Le retour par contre devra être du json, on pourra aussi paramétrer l'attribut à lire.

remote stt settings:
  host_url: "http://192.168.1.10/pocketsphinxweb?action=recognize"
  attribute_name: "transcript"

request:
  curl -X POST "http://192.168.1.10/pocketsphinxweb?action=recognize" \
       -H "Content-Type: audio/wav; samplerate=16000" \
       --data-binary "@$audiofile"

response:
  {transcript:"ca marche", confidence:1234}

@physicien
Copy link

Si je me souviens bien, la dernière fois que j'ai travaillé avec Kaldi, je pouvais lui donner un .wav et il essayait de l'écrire en anglais. J'en étais rendu à l'entraîner pour comprendre le français. L'entraînement en tant que tel n'est pas difficile à réaliser. Ce qui est un peu plus difficile, c'est la préparation des données.

En effet, afin de l'entraîner, il faut préparer de petits extraits audio ainsi que la retranscription de ce qui y est dit. Étant donné que nous voulons une grande variété de voix et un vocabulaire développé, les meilleurs données disponibles sont les livres audio de LibriVox. Cette méthode a déjà été appliqué pour l'anglais, donnant ainsi LibriSpeech.

La difficulté de la préparation des données réside dans la segmentation des fichiers audios et l'alignement du texte sur ces fichiers audio. Un article décrit la technique utilisée pour LibriSpeech.

@alexylem
Copy link
Owner Author

Ok @physicien , sinon un commentaire sur l'approche générique d'implémentation choisie? (voir mon post juste au dessus).

@physicien
Copy link

@alexylem C'était globalement comme ça que je voyais l'implémentation de mon côté. Envoyer un .wav à transcrire et retourner la transcription. Je ne peux que donner mon appui 👍

@physicien
Copy link

Je viens de tomber sur un lien qui détaille globalement ce que nous voulons faire, avec des commentaires sur les difficultés rencontrées, les solutions trouvées et les performances globales.

@alexylem
Copy link
Owner Author

alexylem commented Aug 5, 2016

Super ca va nous aider. J'en ai profité pour laissé un commentaire sur leur site car ils ont "oublié" de mentionner le projet Jarvis 😄

@alexylem alexylem added this to the Prochainement milestone Sep 13, 2016
@alexylem alexylem removed this from the Je travaille dessus milestone Sep 13, 2016
@alexylem
Copy link
Owner Author

Je pense proposer dans un premier temps un "template" de STT de manière à faciliter la création de nouveau moteurs de reconnaissance vocale (ou connecteur comme ici) par la communauté.

@Oliv4945
Copy link
Collaborator

Salut,

Je bute sur l'installation de pocketsphinx_continuous sur Respeaker, mais je toute façon j'ai un doute sur le fait que ça tourne correctement. Donc la solution "serveur distant" me plait bien, avez vous avancé dessus ? Merci !

@alexylem
Copy link
Owner Author

Non mais je peux fournir un template très rapidement.
Tu aimerais faire tourner pocketsphinx sur un serveur distant? Pour la reconnaissance des commandes j'imagine? En français?

@Oliv4945
Copy link
Collaborator

@alexylem : tout juste !
Je suis entrain de regarder pour utiliser le script Python de détection de hotword fourni par Seeedstudio, mais je pense que la reconnaissance des commandes gagnerai à être faite sur une machine plus pêchue, même si Bing fonctionne bien pour l'instant

@alexylem
Copy link
Owner Author

@Oliv4945 ok je te laisse t'occuper de la partie serveur et je m'occupe de l'intégration à Jarvis.
Que proposes-tu pour la communication?

  • Serveur web (RestAPI)
  • SSH
  • Autre?

@Oliv4945
Copy link
Collaborator

Ce que tu décris ici me paraît plutôt bien, reste à voir d'un point de vue sécurité mais on peut s'en sortir avec une règle iptables.
Du coup je peux faire le serveur, mais pas tout de suite, j'aimerai avancer l'application Android et la publier, puis faire fonctionner les hotword respeaker.

@alexylem
Copy link
Owner Author

@Oliv4945 ok ça marche!

@domotic-fr
Copy link

domotic-fr commented Nov 15, 2017

Bonjour,

Peut-on envisager d'avoir PocketSphinx (ou autre) installé chez framasoft.org ?
On pourrai avoir la puissance d'une grosse machine avec le respect de la vie privée, à voir avec eux évidement.

@Oliv4945
Copy link
Collaborator

à voir avec eux évidement.

Bonsoir @domotic-29 , je pense que tu as effectivement trouvé le premier pas à faire :)

@domotic-fr
Copy link

Bonjour,

En faite, je pense qu'il faut d'abord faire fonctionner le truc (Jarvis sur PI + PocketSphinx sur un serveur) avant de demander à installer chez Framasoft. De toute façon s'ils refusent la solution restera possible à domicile.
J'ai donc essayé, mais PocketSphinx évolue et en voulant faire une l'installation rapide il ne reconnait pas le texte dicté. Certains fichiers ont changé, par exemple le fichier lium_french_f0.tar.gz ne semble plus utilisé. Je vais devoir mieux lire la documentation, mais je voulais savoir si vous aviez avancé, et peut-être un lien vers des instructions d'installations récentes ?

@baloss
Copy link

baloss commented Aug 8, 2019

Bonjour,
Tout d'abord je tiens à vous féliciter pour le projet Jarvis que j'ai découvert récemment et que je trouve super.
J’ai effectué mon installation avec Snowboy (pour la détection du mot clé) et Wit (pour la reconnaissance des commandes). Ca marche assez bien mais j’aimerais m’orienter vers une installation “full offline” et je voudrai avoir si l’utilisation d'une instance de PocketSphinx sur serveur distant est aujourd’hui possible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants