alexylem / jarvis

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

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

Open alexylem opened 8 years ago

alexylem commented 8 years ago

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 commented 8 years ago

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 commented 8 years ago

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

alexylem commented 8 years ago

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

physicien commented 8 years ago

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

alexylem commented 8 years ago

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 commented 8 years ago

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 commented 8 years ago

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

physicien commented 8 years ago

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

physicien commented 8 years ago

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 commented 8 years ago

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 commented 8 years ago

J'ai utilisé un .lm.bin.

alexylem commented 8 years ago

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 commented 8 years ago

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

physicien commented 8 years ago

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

physicien commented 8 years ago

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 commented 8 years ago

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 commented 8 years ago

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 commented 8 years ago

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

physicien commented 8 years ago

@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 :+1:

physicien commented 8 years ago

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 commented 8 years ago

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 commented 8 years ago

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 commented 7 years ago

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 commented 7 years ago

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 commented 7 years ago

@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 commented 7 years ago

@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?

Oliv4945 commented 7 years ago

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 commented 7 years ago

@Oliv4945 ok ça marche!

domotic-fr commented 6 years ago

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 commented 6 years ago

à voir avec eux évidement.

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

domotic-fr commented 6 years ago

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 commented 5 years ago

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.